白帽子讲web安全第三章笔记
这一章主要讲的是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下完成的。

浙公网安备 33010602011771号