Jogiter / jogiter.github.com

Jogiter`s Blog
https://blog.jogiter.cn/
3 stars 0 forks source link

XSS & CSRF 防范 #14

Closed Jogiter closed 5 years ago

Jogiter commented 5 years ago

CSRF(Cross-site request forgery):跨站请求伪造。

要完成一次CSRF攻击,受害者必须满足两个必要的条件:

(1)登录受信任网站A,并在本地生成Cookie。(如果用户没有登录网站A,那么网站B在诱导的时候,请求网站A的api接口时,会提示你登录) (2)在不登出A的情况下,访问危险网站B(其实是利用了网站A的漏洞)。

CSRF如何防御

方法一、Token 验证:(用的最多) (1)服务器发送给客户端一个token; (2)客户端提交的表单中带着这个token。 (3)如果这个 token 不合法,那么服务器拒绝这个请求。

方法二:隐藏令牌: 把 token 隐藏在 http 的 head头中。

方法三、Referer 验证: Referer 指的是页面请求来源。意思是,只接受本站的请求,服务器才做响应;如果不是,就拦截。

XSS(Cross Site Scripting):跨域脚本攻击。

XSS的攻击原理

不需要你做任何的登录认证,它会通过合法的操作(比如在url中输入、在评论框中输入),向你的页面注入脚本(可能是js、hmtl代码块等)。

最后导致的结果可能是:

XSS的防范措施(encode + 过滤)

1、编码: 对用户输入的数据进行 HTML Entity 编码。把字符转换成 转义字符。

2、过滤: 移除用户输入的和事件相关的属性。如onerror可以自动触发攻击,还有onclick等。 移除用户输入的 Style 节点、Script 节点、Iframe 节点。(尤其是Script节点,它可是支持跨域的呀,一定要移除)。

3、校正 避免直接对 HTML Entity 进行解码。 使用 DOM Parse 转换,校正不配对的 DOM 标签。

CSRF 和 XSS 的区别

Jogiter commented 5 years ago

XSS game