一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
XSS攻击
XSS攻击就是往HTML文件中插入恶意JS代码。比如document.cookies 、addEventListener 监听用户的键盘事件、修改DOM生成广告等。
分类
存储性XSS
将恶意代码存储到有漏洞的服务器, 访问含有恶意脚本的页面就会自动加载恶意脚本, 然后恶意脚本就会上传你的cookie到他们的服务器。
反射性XSS
比如说你设置了视图要展示xss参数, 然后点击了一个恶意链接是http://localhost:3000/?xss= 就会导致xss被替换成了
基于DOM的XSS
比如通过网络传输页面过程中修改HTML页面内容, 有的用wifi路由器劫持, 有的是本地恶意软件, 主要就是在web资源传输过程中或用户使用页面的过程中修改web页面的数据.
怎么阻止XSS攻击
- CSP策略
- 服务端对于一些关键的字符进行转码,比如可以替换为空
- 服务器响应头用HttpOnly属性,这样无法通过document.cookie获取cookie
CSRF攻击
CSRF攻击就是黑客利用用户的登录态,通过第三方站点干坏事。
分类
自动发起GET请求
在处于登录状态时,打开某恶意链接,恶意链接中有一个图片,图片的src就是一个Get请求。当打开链接加载图片时,就会触发src中的代码从而发起Get请求。
自动发起POST请求
当用户打开黑客页面时会自动提交POST请求。
<!DOCTYPE html>
<html>
<body>
<h1>黑客的站点:CSRF攻击演示</h1>
<form id='hacker-form' action="https://xxx.org/sendcoin" method=POST>
<input type="hidden" name="user" value="hacker" />
<input type="hidden" name="number" value="100" />
</form>
<script> document.getElementById('hacker-form').submit(); </script>
</body>
</html>
引诱用户点击链接
比如网站出现了一个中奖图片
<div>
<img width=150 src=http://images.xuejuzi.cn/1612/1_161230185104_1.jpg> </img> </div> <div>
<a href="https://time.geekbang.org/sendcoin?user=hacker&number=100" taget="_blank">
点击领大奖
</a>
</div>
用户一点就发起post请求了。
怎么预防CSRF攻击
- 在服务端响应头上添加set-cookie设置cookie时加上SameSite。这样第三方站点再发起请求时请求头就不会带着Cookie。
- 服务端根据Http请求头中的Referer和Origin属性来判断是否是第三方站点,如果是第三方站点就不提供服务。
- 用CSRFToken也可以避免CSRF攻击。浏览器向服务器发起请求的时候存放csrf-token,然后再次发起请求的时候带上token,第三方站点带不上token,也就无法成功。
<!DOCTYPE html>
<html>
<body>
<form action="https://time.geekbang.org/sendcoin" method="POST">
<input type="hidden" name="csrf-token" value="nc98P987bcpncYhoadjoiydc9ajDlcn">
<input type="text" name="user">
<input type="text" name="number">
<input type="submit">
</form>
</body>
</html>