1. CSRF (cross-site request forgery)跨站请求伪造
利用cookie,用户本地存储cookie,攻击者利用用户的cookie进行认证,然后伪造用户发出请求,攻击者利用了存储在浏览器用于用户认证的cookie
预防:
- 不用cookie来验证可以预防,采用token(不存储于浏览器)认证,为每一个提交的表单生成一个随机token, 存储在session中,每次验证表单token,检查token是否正确,
所以我们的防御思路是这样:用户在访问网上银行时,除了携带 Cookie 中的信息之外,还需要携带一个随机数,如果用户没有携带这个随机数,则网上银行网站会拒绝该请求。黑客网站诱导用户点击超链接时,会自动携带上 Cookie 中的信息,但是却不会自动携带随机数,这样就成功的避免掉 CSRF 攻击了。
- 通过referer识别,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。那么这样的话,我们必须登录银行A网站才能进行转账了。
补充:
-
Spring Security 中默认实际上就提供了 csrf 防御
-
前端是 App、小程序之类的应用,不涉及浏览器应用的话,其实可以忽略这个问题
2、XSS (cross site script)跨站脚本攻击
攻击者在网页中嵌入恶意脚本程序
举例:
攻击者在上面发布了一个文章,内容是这样的 ,如果我没有对他的内容进行处理,直接存储到数据库,那么下一次当其他用户访问他的这篇文章的时候,服务器从数据库读取后然后响应给客户端,浏览器执行了这段脚本,然后就把该用户的cookie发送到攻击者的服务器了
被攻击原因:
用户输入的数据没有做处理,变成了代码,比如说上面的