csrf xss
CSRF和XSS
CSRF
Cross Site Request Forgery跨站请求伪造
本质是:恶意网站把正常用户作为媒介,通过模拟正常用户的操作,攻击其登录过的站点
原理如下:
- 用户访问正常站点,登录后,获取到正常站点的令牌,以cookie的形式保存
- 用户访问恶意站点,恶意站点通过某种形式去请求了正常站点(请求伪造),迫使正常用户把令牌传递到正常站点,完成攻击
防御
方式1:Cookie限制
Cookie的SameSite,禁止跨域附带Cookie,只需要把Cookie设置的SameSite设置为Strict即可
SameSite可以取下面的值
- Strict:严格模式,所有跨站请求都不要附带Cookie
- Lax:宽松模式,所有跨站的超链接,get请求的表单,预加载连接时会发送Cookie,其他情况不发生
- None:无限制
缺点:只能浏览器端使用,并且低版本不支持
方式2:非Cookie令牌
在验证请求合法性的时候,在请求头里面或者请求体里附带一个token
方式3:验证referer和Origin
页面中的二次请求都会附带referer或者origin请求头,向服务器表示该请求来自于哪个源或页面,服务器可以通过这个头进行验证
但是某些浏览器的refer是可以被用户禁止的,尽管这种情况很少
方式4:表单随机数
流程:
- 客户端请求服务器,请求页面,传递cookie
- 生成页面时,表单中假如一个隐藏的表单域
<input type="hidden" name="hash" value="<%=session['key']%>">
- 填写好信息后,提交表单,会自动提交隐藏的随机数
- 服务端
- 先拿到cookie,判断是否登陆过
- 对比提交过来的随机数和之前的随机数是否一致
- 清除掉session中的随机数
方式5:二次认证
当做出敏感操作的时候,进行二次认证
XSS
xss:Cross Site Scripting跨站脚本攻击
攻击方式
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 cles's blog!
评论