什么是XSS攻击?
XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
举例说明
假设在一个评论系统中,有以下情形:
用户A发表了评论 [hello world] 提交到服务器,用户B看到这一条评论,一切正常
恶意用户H发表了评论 [<script>console.log(document.cookie)</script>] ,当用户B访问这个评论界面的时候,这段代码就在用户B的页面中执行了,这样恶意代码甚至可以对B用户的cookie进行操纵,这样就构成了XSS攻击
防范
- 不要使用 innerHTML,改成 innerText,script 就会被当成文本,不执行
- 如果你一样要用 innerHTML,字符过滤
- 把 < 替换成 <
- 把 > 替换成 >
- 把 & 替换成 &
- 把 ' 替换成 '
- 把 ' 替换成 "
代码 div.innerHTML = userComment.replace(/>/g, '<').replace...
- 使用 CSP Content Security Policy
什么是CSRF攻击?
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
举例说明
1.用户在 qq.com 登录
2.用户切换到 hacker.com(恶意网站)
3.hacker.com 发送一个 qq.com/add_friend 请求,让当前用户添加 hacker 为好友。
4.用户在不知不觉中添加 hacker 为好友。
5.用户没有想发这个请求,但是 hacker 伪造了用户发请求的假象。
防范
1.尽量对要修改数据的请求使用post而不是get
2.给每一次用户登陆分配一个临时token,用服务端的setCookie头将此token种入用户cookie中,每次请求比对用户方token与服务器端token是否吻合。
3.服务器禁止跨域请求
4.及时清除用户的无效cookie