一。了解背景
下面两张图,比较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('<', "<");
map.put('>', ">");
map.put('\'', "'");
map.put('\"', """);
map.put('&', "&");
在DB层无sql注入防范的时候,甚至需要是三位一体!
拿上面那个例子来说,用户输入name,DB应该存储下面的内容
<script>alert('xss')</script>
但是很不幸,这串字符使用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进制编码
jjjjj //十 进制编码
jjjjj //十 六进制编码
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="javascript:alert('XSS');"> //10进制转码 如图三
<img style="xss:expr/*XSS*/ession([code])"> //css的注释符号 为/**/,其中的内容会被忽略
<style>@im\port'\ja\vasc\ript:alert("XSS")';</style> //css中忽略的符号还有“\”
~~~~~~~~~~~~~~分割~~~~~~~~~~~~~~
p.s.
1.用Jquery的text()取"<script>alert('xss')</script>",会被直接读成<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
分享到:
相关推荐
XSS蠕虫&病毒--即将发生的威胁与最好的防御
开发安全培训(XSS攻击&SQL;注入),教你如何解决XSS攻击和SQL注入。
IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。 ...也就是说,打开一个服务器上...
本方案采用struts2的拦截器过滤,将提交上来的参数转码来解决。 配置struts.xml extends=struts-default,> <!-- 配置拦截器 --> <!-- 定义xss拦截器 --> 此处填写拦截器类名></interceptor>
在这篇文章中我将说明所有关于XSS以及更多相关的知识.通过这篇文档,我希望能让你明白什么是XSS,为什么使用XSS,以及怎样使用XSS.一旦你学会了,你将需要发挥自己的创造力,因为大多数人都修补了简单的XSS漏洞.但是他们...
预防xss攻击,过滤标签.js
XSS代码转换工具,用于XSS代码的转换
《Struts 2.0.0 - Struts 2.3.14.1 URL及A标签远程命令执行漏洞探测 V1.1》 使用说明: 运行EXE程序,输入扫描站点的任意一个URL入口链接地址, 若提示扫描是否包含顶级域名下的所有页面,根据提示输入即可。 ...
一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如...
XSS & SQL注入
像注入漏洞的“’”、“and 1=1”和“and 1=2”一样,Input XSS也有自己的漏洞检测字符串,它们就是“”、“”和 “<script>alert(/xss/)”。如果当你在Input框中输入“”,并在新 页面的源代码中找到这对标签的话,...
基于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 attack test2 xss attack test2 xss attack test2 xss attack test2
java防止xss注入解决Java出现的xss
动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成XSS,原本应当是css,但为了和层叠样式表(Cascading Style Sheet,CSS )有所区分,故称XSS)的威胁,而静态站点则完全不受...
xss是一个用于对用户输入的内容进行过滤,以避免遭受 XSS 攻击的模块,可通过白名单来控制允许的标签及相关的标签属性,另外还提供了一系列的接口以便用户扩展。
Struts2-Vuln 本系列文章将详细分析 Java 流行框架 Struts2 的历史漏洞,今后关于 Struts2 新的漏洞分析,也... - 、标签存在XSS漏洞 Contact blog : License Struts2-Vuln is licensed under MIT.See the for detail.