1.简介
xss攻击,通常指黑客通过注入"HTML注入",来篡改网页,插入恶意的脚本,从而在用户浏览网页的时候,控制用户浏览器的一种攻击。
那么什么是xss呢?看看下面的例子~~
正常情况下,用户向test提交的数据会显示在页面中,例如:
http://127.0.0.1/study/test.php?test=This%20is%20a%20test;
http://
此时查看页面源代码如图:
但是如果提交一段html代码:test=<script>alert('hack')</script>,就会发现,代码被执行了。
再查看源代码:
用户输入的script脚本已经被写入页面中,而显然这不是开发者不想看到的。
上面这个例子就是xss的一种:反射型xss.
xss根据效果不同,分为3类:
1.反射型xss
反射型xss就是简单的把用户输入的数据“反射”给浏览器。黑客需要诱使用户”点击“一个恶意链接,才能攻击成功。反射型xss也叫做"非持久型"xss.
2.储存型xss
储存型xss会把用户输入的数据“储存”在服务器端。这种xss具有很强的稳定性。
下面举例说明:
用户输入的内容还是没有过滤,没有显示页面上,而是插入到了数据库中。
新建一个php,内容如下:
该代码是用来读取之前插入数据库的内容的,并将页面显示在浏览器上。
创建一个数据库名为xss,表名为temp:
然后访问页面:
点击页面却不会显示,而实际上数据已经存入了数据库,输入代码:<script>alert('hack')</script>,出现页面:
3.DOM Based XSS
实际上这种xss并非按照数据是否储存在浏览器兑换来划分,DOM Based Xss 按效果来说也算是反射型xss,这里把它单独划分出来,是因为DOM Based Xss 的形成原因比较独特。
看如下代码:
<script>
function test()
{
var str=document.getElementById("test").value;
document.getElementById("t").innerHTML="<a href='"+str+"'>testLink</a>";
}
</script>
<div id="t"></div>
<input type="text" id="text" value="" />
<input type="button" id="s" value="write" οnclick="test()" />
在点击wirte按钮后,会在当前页面插入一个超链接,其地址为文本框的内容:
在这里,“write"按钮的onclick调用了test()函数,修改了页面DOM节点,然后通过innerHTML把一段数据当作HTML写入到页面中,就造成了DOM Based Xss.