`
sw1982
  • 浏览: 503882 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

XSS转码 && struts2 property标签的bug

阅读更多

一。了解背景

下面两张图,比较html转义和js的转义。

一定要区分清楚的是,内容回写页面,一定要做的是JS转义!!而不仅仅是html转义



 

从上面两张图可以看出,js里面需要转义到的 单引号',反斜杠\ 均不在html转义字符之列!(如果针对XSS的话,只要对

<

>

'

")

 

 

二。<s:property value="xx"/>的稀烂之处

1.这个标签默认是带了html转义的,即完全等同于<s:property value="name" escape="true"/>

 

2.正确XSS防范做法,应该是后台转义后存储,也就是说存到DB里面的数据,就应该是处理过的!(这里的转义是html&js的综合体):

map.put('<', "&lt;");
map.put('>', "&gt;");
map.put('\'', "&#39;");
map.put('\"', "&quot;");
map.put('&', "&amp;");

   在DB层无sql注入防范的时候,甚至需要是三位一体!

 

   拿上面那个例子来说,用户输入name,DB应该存储下面的内容

&lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;

    但是很不幸,这串字符使用s:property直接输出到页面上,会因为&符号又会促发一次html escape,导致显示问题

    这里就只能继续恶心一把了,每个标签写上:<s:property value="name" escape="false"/> ,徒劳耗费键盘。(这种安全的内容回写比较推荐使用${name}的ongl方式直接输出)

 

 

三。严防死守

1.org.springframework.web.util.HtmlUtils, spring自带了一个类来处理,其本质需要注意,基于Char的过滤

 

看看源代码应该很容易理解

 StringBuffer escaped = new StringBuffer(input.length() * 2);
     for (int i = 0; i < input.length(); ++i) {
       char character = input.charAt(i);
       String reference = characterEntityReferences.convertToReference(character);
       if (reference != null) {
          escaped.append(reference);
       }
       else {
          escaped.append(character);
       }

 

a.使用String.replace(xx)的方式是搞不定的。举例来说,字符j的表示方式有下面15种之多:

 

\6A\06A\006A\0006A\00006A            //java形式的16进制编码

&#106;&#0106;&#00106;&#000106;&#0000106;           //十 进制编码

&#x6A;&#x06A;&#x006A;&#x0006A;&#x00006A;           //十 六进制编码

 

 

b.使用html的过滤方式也是99% OK的,但是像mhtml这样的漏洞,还需要过滤%0d%0a

 

c.指望过滤<>,过滤scrpit串这些明文,也是靠不住的。

 

附件是查资料找到的文档,包括:强烈建议一睹为快

1.浅析XSS(Cross Site Script:跨站式攻击)漏洞原理(转)

 2.Ajax hacking with XSS


介绍了诸如此类的注入方式,属于眼界开阔篇

 

<img src="javascript:alert('XSS');">示例:

    <img src="&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97&#108&#101&#114&#116&#40&#39&#88&#83&#83&#39&#41&#59"> //10进制转码 如图三

 

<img style="xss:expr/*XSS*/ession([code])">            //css的注释符号 为/**/,其中的内容会被忽略

  <style>@im\port'\ja\vasc\ript:alert("XSS")';</style>            //css中忽略的符号还有“\”

 

~~~~~~~~~~~~~~分割~~~~~~~~~~~~~~

p.s.

1.用Jquery的text()取"&lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;",会被直接读成<script>alert('xss')</script> 。

 

2. 这个串如果直接使用$("#xxyy").html()输出,会产生alert框。

 

3.正确的做法是使用innerHTML函数,可以避免字符串中js被执行:document.getElementById("xxyy").innerHTML=


  • 大小: 53.1 KB
  • 大小: 46.9 KB
  • 大小: 5.2 KB
  • 大小: 5.5 KB
分享到:
评论
1 楼 高军威 2014-11-19  
<b>行不行</b>

相关推荐

    XSS蠕虫&病毒--即将发生的威胁与最好的防御

    XSS蠕虫&病毒--即将发生的威胁与最好的防御

    开发安全培训(XSS攻击&SQL;注入).pdf

    开发安全培训(XSS攻击&SQL;注入),教你如何解决XSS攻击和SQL注入。

    Web高级知识-跨域&XSS;&CSRF;解决方案

    IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。 ...也就是说,打开一个服务器上...

    JSP Struts过滤xss攻击的解决办法

    本方案采用struts2的拦截器过滤,将提交上来的参数转码来解决。 配置struts.xml extends=struts-default,&gt; &lt;!-- 配置拦截器 --&gt; &lt;!-- 定义xss拦截器 --&gt; 此处填写拦截器类名&gt;&lt;/interceptor&gt;

    XSS & SQL注入

    在这篇文章中我将说明所有关于XSS以及更多相关的知识.通过这篇文档,我希望能让你明白什么是XSS,为什么使用XSS,以及怎样使用XSS.一旦你学会了,你将需要发挥自己的创造力,因为大多数人都修补了简单的XSS漏洞.但是他们...

    预防xss攻击,过滤标签.js

    预防xss攻击,过滤标签.js

    XSS-Codec XSS代码转换工具

    XSS代码转换工具,用于XSS代码的转换

    Struts 2.0.0 - Struts 2.3.14.1 URL及A标签远程命令执行漏洞探测 V1.1

    《Struts 2.0.0 - Struts 2.3.14.1 URL及A标签远程命令执行漏洞探测 V1.1》 使用说明: 运行EXE程序,输入扫描站点的任意一个URL入口链接地址, 若提示扫描是否包含顶级域名下的所有页面,根据提示输入即可。 ...

    预防XSS攻击和SQL注入XssFilter

    一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如...

    XSS &amp; SQL注入

    XSS & SQL注入

    Input XSS最新漏洞及利用

    像注入漏洞的“’”、“and 1=1”和“and 1=2”一样,Input XSS也有自己的漏洞检测字符串,它们就是“”、“”和 “&lt;script&gt;alert(/xss/)”。如果当你在Input框中输入“”,并在新 页面的源代码中找到这对标签的话,...

    XSS_Rays.zip_XSS Rays 下载_tool_xss扫描_xss扫描器_漏洞扫描

    基于JS的XSS扫描器——XSS Rays. 最近The Spanner发布了一个名为XSS Rays的 XSS漏洞扫描器。这tool有点意思,是使用JS写的,JS遍历目标的link、form,然后构造测试用例去测试,可以发现DOM的XSS(当然是在测试用例打...

    XSS漏洞扫描 XSS漏洞扫描

    XSS漏洞扫描XSS漏洞扫描XSS漏洞扫描XSS漏洞扫描XSS漏洞扫描XSS漏洞扫描XSS漏洞扫描XSS漏洞扫描XSS漏洞扫描XSS漏洞扫描XSS漏洞扫描

    xss attack test2

    xss attack test2 xss attack test2 xss attack test2 xss attack test2

    xss_javaxss_XSS_

    java防止xss注入解决Java出现的xss

    jQuery-with-XSS 检测jQuery版本是否存在XSS漏洞

    动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成XSS,原本应当是css,但为了和层叠样式表(Cascading Style Sheet,CSS )有所区分,故称XSS)的威胁,而静态站点则完全不受...

    xss.js.zip

    xss是一个用于对用户输入的内容进行过滤,以避免遭受 XSS 攻击的模块,可通过白名单来控制允许的标签及相关的标签属性,另外还提供了一系列的接口以便用户扩展。

    Struts2-Vuln:关于Struts2框架的历史漏洞个人分析文章

    Struts2-Vuln 本系列文章将详细分析 Java 流行框架 Struts2 的历史漏洞,今后关于 Struts2 新的漏洞分析,也... - 、标签存在XSS漏洞 Contact blog : License Struts2-Vuln is licensed under MIT.See the for detail.

Global site tag (gtag.js) - Google Analytics