CSRF跨站请求伪造原理 和 防范措施

1.什么是CSRF ?

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

利用网站对已认证的权限去执行未授权的命令的一种恶意攻击

攻击者会盗用你的登记信息,以你的身份模拟发送请求。比如转账汇款操作

web 身份认证机制只能识别一个请求是否来自某个用户浏览器,但是无法保证请求是用户自己或者批准发送的

CSRF跨站请求伪造原理 和 防范措施_第1张图片

       图解:左边是用户,右边是需要登陆的网站。一个用户A通过自己的身份验证,去登陆网站SNS,网站会返回一个cookie值Cookie: sid=1234567890用来标识这个用户。然后中间一个攻击者给你发一个链接或者给你一个图片你可能会对它进行一个点击,比如发给你一个图误导你来去点击,这个链接是发送评论的请求地址,如果你点击这个地址它就会以你的名义来发送这个你好。这个时候假如你误点这个图片就会触发这个链接的操作,然后你就会携带你的Cookie去请求SNS网站。这个时候你就会发现你实际上并没有想去发送你好这个评论。但是你通过攻击者留下的链接陷阱点进去之后然后你就误发这个评论。

所谓的CSRF就是攻击者利用你的登录信息,然后做了一些没有经过你授权的一些行为。

2.CSRF产生的条件

  要完成一个 CSRF攻击,需要具备两个条件

受害者已经登录到目标网站并且没有退出( 保持登录状态 )

受害者访问了攻击者发布的链接或者表单

二者必须缺一不可

3.如何防范 CSRF?

      在使用Get请求的时候非常容易伪造链接,所以尽量不要在GET请求里有任务数据修改操作。目前所有Python主流的web 框架所采用的的方式令牌同步。

令牌同步(Synchronizer token pattern , 简称STP):在用户请求的表单中嵌入一个隐藏的csrf_token,服务端验证其是否与cookie中的一致(基于同源策略其他网站是无法获取cookie中的csrf_token)。黑客是拿不到你cookie中的 csrftoken值的,前提是网站本身没有 xss漏洞

如果是 js 提交需要先从cookie获取csrf_token作为 X-CSRFToken请求头提交

其他:检测来源HTTP Referer(容易被伪造);验证码方式(安全但是繁琐)

你可能感兴趣的:(Python,web框架)