CSRF
CSRF(Crossing-site request forgery),跨站请求伪造。盗用个人身份向站点发送恶意请求。
CSRF攻击原理和过程:
- 用户C打开浏览器,访问受信任的网站A,向网站A发送请求。
- 用户请求信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户成功登录A网站,可以发送请求到网站A。
- 用户在为退出网站A时,在同一浏览器中,打开网站B,向网站B发送请求。
- 网站B收到请求后,返回攻击性代码,请求放完第三方网站A。
-
浏览器收到攻击性代码,根据网站B的请求,利用用户C向网站A发送请求,网站A认为用户C发出请求,根据用户C的权限,执行来自网站B的恶意代码。
CSRF百度百科
CSRF的防范
防御CSRF攻击主要有三种策略:验证HTTP Referer字段;在请求地址中添加token并验证;在HTTP头中自定义属性并验证。
1.验证HTTP Referer字段
HTTP头中Referer字段记录了该请求的来源地址。如果是网站B恶意伪造用户C发出请求,该字段的值判断为不合法,拒绝请求。
2.请求地址中添加token并验证
网站B伪造用户C发出请求,该请求中所有的用户验证信息都是存在于cookie中,防范CSRF的攻击,在请求中除了验证cookie信息,以参数的形式加入随机产生的token,并在服务器端建立拦截器来验证这个token。对于GET请求,token将附在请求地址之后,URL为http://url?csrftoken=tokenvalue。对于POST请求,在<form>最后加上
<input type='hidden' name='csrftoken' value='tokenvalue'/>
3.在HTTP头中自定义属性并验证
这种方法是把token以参数的形式放在HTTP请求中,而是把它放在HTTP头自定义属性里。通过XMLHttpRequest这个类,一次性给所有该类请求加上csrftoken这个HTTP头属性。
参考文章:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/
网友评论