制止CSRF攻击的方案

打印 上一主题 下一主题

主题 548|帖子 548|积分 1644

CSRF攻击的方式

恶意网站发送对感爱好网站的哀求(大概正常网站发送恶意哀求,但一样平常正常网站不可能这么做),显然,这肯定属于跨域哀求了。
办理思绪

跨域角度

起首,对跨域行为进行限制:


  • 限制cookie

    • 克制第三方网站的cookie被携带:跨域哀求时,不允许携带cookie。通过SameSite属性为strict来设置。
    • 限制cookie的作用范围:制止造成更大范围的攻击。

  • ajax哀求:严格限制ajax哀求的跨域白名单,而且服务端严格区分HTTP哀求的动词,因为浏览器并不会阻止ajax的GET哀求发出,服务端是可以处理跨域ajax的GET哀求(以及OPTIONS、HEAD等),所以如果允许跨域ajax,则最多允许OPTIONS、HEAD、GET方法
  • 检查referrer首部
针对CSRF的方式

表单使用脚本自动提交

使用表单让脚本自动提交的方式可以进行CSRF攻击
  1. form method="POST" action="https://www.a.com/update" enctype="multipart/form-data">
  2.     <input type="hidden" name="hello" value="update state"/>
  3.     .....
  4.     <input type="hidden" name="attack" value="csrf attack"/>
  5. </form>
  6. <script>
  7.     document.forms[0].submit();
  8. </script>
复制代码


  • 只使用JSON API:制止application/x-www-form-urlencoded的form提交
  • 制止使用POST哀求:该form提交只能使用GET大概POST
  • 不要对form表单进行方法重写:不要将form的POST哀求重写为PUT、DELETE等
使用CSRF token进行哀求验证

服务端下发用于CSRF token用于哀求验证,客户端使用脚本进行哀求时,携带该token进行验证,而恶意网站是无法获取到该token的值。这种方式要求token值一定要是随机生成。


  • 在表单内植入该token值:<input type="hidden" name="csrf_token" value="{{ csrf_token_value }}" />
  • 在静态资源和a链接的URL内植入token:https://www.a.com/bbb/cc?a=b&csrf_token={{csrf_token_value}}
  • 跨域的脚本哀求可以使用自定义首部携带该token

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表