[web安全]XSS可能发生的场景及解决方法

来源:互联网 发布:mysql 数据库快照 编辑:程序博客网 时间:2024/06/07 18:18

跨站脚本攻击,通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

1.在HTML标签中输出

<div>$var</div>
<a href=# >$var</a>

在这种场景下,XSS的利用方式一般是构造一个<script>标签,或者是任何能够产生脚本执行的方式。
<div><script>alert(/xss/)</script></div>
<a href=# ><img src=# onerror=alert(1) /></a>


2.在HTML属性中输出
<div id="abc" name="$var" ></div>
灵活构造XSS PAYLOAD
<div id="abc" name=""><script>alert(/xss/)</script><"" ></div>


3.在<script>标签中输出
<script>
var x = "$var";
</script>
攻击者需要先闭合引号才能实施XSS攻击
<script>
var x = "";alert(/xss/);//";
</script>

4.在事件中输出
<a href=# onclick="funcA('$var')" >test</a>
可能的攻击方法
<a href=# onclick="funcA('');alert(/xss/);//')" >test</a>

5.在CSS中输出
<style type="text/css">
body {background-image:url(${xss});}
body {background-image:expression(${xss});}
</style>
在CSS中输出同样存在XSS的风险,如:
body {background-image:url("javascript:alert('XSS')");}
body {background-image:expression(alert(/xss/));}

6.在地址中输出
6.1 在URL的path(路径)或者search(参数)中输出
<a href="http://www.evil.com/?test=$var" >test</a>
<a href="http://www.evil.com/?test=" onclick=alert(1)"" >test</a>

防御方法:使用URLEncode

6.2 整个URL能够被用户控制
这时URL的Protocol和Host部分是不能够使用URLEncode的
<a href="$var" >test</a>
攻击方法:
<a href="javascript:alert(1);" >test</a>
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTs8L3NjcmlwdD4=" >test</a>
防御方法:检查变量是否以"http"开头,再对变量进行URLEncode,OWASP中有函数ESAPI.encoder().encoderForURL(),但此API未解决伪协议的问题。


以上是最常见到的XSS场景,OWASP Esapi很好地解决了这些场景的安全问题,在OWASP Esapi "org.owasp.esapi.codecs"包中提供了一系列的编码操作,其中包括HTML编码、JavaScript编码、VBScript编码、CSS编码、SQL编码等。
1.HTML编码操作
对于HTML编码,可以使用下面的接口:
String str = ESAPI.encoder().encodeForHTML(String input);
使用这个接口可以对字符串进行HTML编码,它采用的编码器是HTMLEntityCodec。
而且OWASP还有专门应用对HTML属性的编码操作类,接口如下:
String str = ESAPI.encoder().encodeForHTMLAttribute(String input);
2.CSS编码
对输入、输出的CSS编码,接口如下:
String str = ESAPI.encoder().encodeForCSS(String input);
CSS编码器是CSSCodec
3.JavaScript编码
对输入、输出的JavaScript编码,接口如下:
String str = ESAPI.encoder().encodeForJavaScript(String input);
JavaScript编码是JavaScriptCodec类实现的。

OWASP ESAPI工具包是专门用来防御安全漏洞的API,如SQL注入、XSS、CSRF等知名漏洞。目前支持JavaEE、ASP、NET、PHP、Python等语言。

0 0