这一章主要讲的是XSS(cross site scipt)跨站脚本攻击,这种攻击方式主要是在客户端(浏览器)中通过非法的JavaScript脚本来更改页面
例如:在php页面中有如下代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php $input = $_GET["param"]; echo "<div>".$input."</div>"; ?> </body> </html>
这段代码主要功能是显示Param变量,如果在浏览器中输入:http://localhost/test.php?param=这是一个测试
页面就会显示:

如果将param变量换成<script>alert(/xss/)</script>页面是显示:

P.S.如果在chrome中会报错,chrome会显示: Chrome 在此网页上检测到了异常代码。为保护您的个人信息(例如密码、电话号码和信用卡信息),Chrome 已将该网页拦截。
分成几种类型:
1.反射型 XSS(非持久型Non-persisitentXSS)
把用户输入的数据反射给浏览器
2.存储型XSS(持久型 peristen XSS)
将恶意JavaScript脚本存储在服务器,每个访问这个服务器网站的用户都会执行这段代码。这种方法比上面的更加复杂。
3.DOM based XSS
根据DOM的XSS,实际上是一种反射型的xss。
例如如下的代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>XSS test</title> </head> <body> <script type="text/javascript"> function test () { var str=document.getElementById("text").value; //str获取来自text中的内容 document.getElementById("t").innerHTML="<a href='"+str+"' >testlink</a>"; //在html中id等于t的地方显示这个链接。 } </script> <div id="t"></div> <input type="text" id="text" value=""/> <input type="button" id="s" value="write" onclick="test()"/> </body> </html>
如果在输入框中输入的内容是普通的内容,此时<a>标签的内容就是

这样,因为localhost里面没有相应的资源,此时会返回一个页面错误。
可是,如果在input标签里输入的内容是如下内容的话:
' onclick=alert(/这是一个xss/)//
此时链接的内容就变成这样:

点击链接,就会发生

因为testLink此时就变成了
<a href '' onclick=alert(/这是一个XSS/)//
因为构造输入的文本为:
' onclick=alert(/这是一个xss/)//
前面一个单引号与JavaScript中的单引号配对,而且后面一个单引号也会被注释不会显示。
同理,如果输入的文本为:
'><img src=# onerror=alert(/xss/) /><'
,将显示以下内容:

P.S.这是在Chrome下完成的。