web的脚本安全-CSRF

CSRF,即Cross-site request forgery,中文通常叫跨站请求伪造。前端

 

攻击原理是,用户在A网站(登陆,以后打开一个B网站,B网站的脚本(或HTML标签)向A网站发送一个请求,这个请求会自动携带用户的COOKIE,若是这时A网站验证成功,则完成了攻击。算法

 

那么,具体的攻击过程是什么?后端

1)用户登陆A网站。api

A网站提供一个修改用户名的api,例如http://A.com/modName?newname=test1。这个api会验证cookie,验证经过以后则修改用户名。服务器

 

2)以后用户登陆B网站,B网站的里有一段代码以下(能够成功把用户在A网站的名字修改成test2,由于发往A.com的请求都会自动带上A.com的cookie):cookie

<img src="http://A.com/modName?newname=test1" />网站

 

很简单吧,但这就完成了一次跨站请求伪造的攻击。咱们能够看出攻击要点在:编码

1)A网站的服务器对cookie的简单直接验证。token

2)用户登陆网站A以后能引导TA打开B网站。接口

 

攻击简单,解决方案也很简单:

1,保证A网站的全部api接口都不仅是经过验证cookie就完成用户确认。

2,前端与后端配合,使用同一个算法,在发送请求前,居于cookie再产生一个编码(也能够叫token)发送到服务器端,服务器端对这个token进行验证。

 

为何能解决问题?由于网站B虽然能伪造请求(即修改参数),但网站B获取不了A网站的cookie,这样网站B就伪造不出这个token,A网站获取不到这个token则没法完成用户确认。

 

PS:固然,服务器端还能够经过检测refer这个属性来防范CSRF,但这个可能会把部分用户正常请求当成非法请求,例如https转到http。

相关文章
相关标签/搜索