JS注入攻击

来源:互联网 发布:php培训班多少钱 编辑:程序博客网 时间:2024/05/24 20:08

Javascript 注入攻击?

什么是javascript注入攻击呢?其实比较其他的攻击,javascript可能相对简单一些。

每当接受用户输入的内容并重新显示这些内容的时候,网站就容易受到这种攻击。

用asp.net mvc来个简单的例子:

[csharp] view plain copy
print?
  1. [ValidateInput(false)]  
  2.     public class HomeController : Controller  
  3.     {  
  4.         public string Index(string genre)  
  5.         {  
  6.             //将genre参数原封不动的返回  
  7.             string result = genre;  
  8.             return result;  
  9.         }  
  10.   
  11.         public ActionResult About()  
  12.         {  
  13.             return View();  
  14.         }  
  15.     }  
这是controller的代码, 一个url请求经过route解析之后,会到对应的action中。

对于这个index方法,不需要call view层面的代码,直接会在页面上将genre这个参数以字符串的方式显示出来。

如果对于正常的url 比如http://localhost:1796/home/index?genre=abc ,那么页面就会显示abc

但是javascript攻击的话,比如url是http://localhost:1796/home/index?genre=<script>window.location='http://baidu.com/'</script>

这里还分两种情况

1,Chrome浏览器下的情况:

表面现象是什么都没有返回,但是打开调试器,会发现有一个页面错误

Refused to execute a JavaScript script. Source code of script found within request.

2. 来看看IE的情况:

尼玛,直接就跳转到baidu页面了, IE,你果然牛X。


其他的浏览器没有实验。

个人判断chrome浏览器的行为是这样的,

1.从server端返回的结果是<script>window.location='http://baidu.com/'</script>

2.浏览器说,我cao,这是一段js代码,我是执行还是不执行呢?

3.不着急,先看看刚才的request是什么, http://localhost:1796/home/index?genre=<script>window.location='http://baidu.com/'</script>

4.chrome浏览器:“尼玛,这是典型的javascript攻击啊,因为匹配reuqest和返回的js代码是一样的”

5.妈的,老子拒绝执行!

这样来意淫一下chrome的执行,觉得chrome还是很聪明的。


PS:实际上asp.net mvc框架还是比较优秀的。

细心的你可能会发现controller的代码里面多了一行[ValidateInput(false)]

目的是屏蔽mvc的校验querystring这块,如果url里面包含<script>这样的东西,http请求就不会达到urlRoute层。

而是被System.Web.HttpRequest率先截获,抛出一个异常

A potentially dangerous Request.QueryString value was detected from the client (genre="<script>

而加上[ValidateInput(false)]的目的就是关闭http的校验。