xss攻击
xss本质是html注入,和sql注入差不多. SQL,HTML,人类语言都是指令和数据混在一起的,都存在注入风险(程序根据分隔符,标签识别指令和数据,人类则是根据语境,语义和日常经验判断)
比如注册用户时,用户输入"张三"并提交,服务端会生成"
<p>欢迎新用户,张三</p>
"传给浏览器.如果用户输入
<script>alert('逗你玩')</script>
服务端就会生成
<p>欢迎新用户,<script>alert('逗你玩')</script></p>
输入用户内容就会被浏览器识别为指令执行,这就是xss注入;
攻击者也是根据这个原理,输入一个有特殊语义的名字,被其他客户端识别为指令,从而完成了一次漂亮的存储型xss注入式攻击.
csrf攻击
Cross-site request forgery
假设网站中有一个通过 Get 请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
如果接口是 Post 提交的,就相对麻烦点,需要用表单来提交接口
<html>
<head>
<script type="text/javascript">
function steal()
{
  iframe = document.frames["steal"];
iframe.document.Submit("transfer");
}
</script>
</head>
<body onload="steal()">
<iframe name="steal" display="none">
<form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
<input type="hidden" name="toBankId" value="11">
<input type="hidden" name="money" value="1000">
</form>
</iframe>
</body>
</html>
如何防御
防范 CSRF 可以遵循以下几种规则:
- Get 请求不对数据进行修改
- 不让第三方网站访问到用户 Cookie
- 阻止第三方网站请求接口
- 请求时附带验证信息,比如验证码或者 token
防抓包
使用HTTPS(HTTPS 还是通过了 HTTP 来传输信息,但是信息通过 TLS 协议进行了加密。)替换HTTP,对传输的数据进行加密,这样,当请求的信息被抓包工具抓包后,也无法修改提交的数据。