CSRF

作者: zooeydotmango | 来源:发表于2019-08-07 17:34 被阅读0次

    原理

    CSRF(Cross Site Request Forgery,中文名跨站请求伪造)是一种利用网站可信用户的权限去执行未授权的命令的一种恶意攻击。
    原理是攻击者构造网站后台某个功能接口的请求地址,诱导用户去点击或者用特殊方法让该请求自动加载。用户在登录状态下这个请求被服务器端接手后会被误认为是用户合法的操作。
    对于GET形式的接口地址可以轻易被攻击,对于POST形式的接口地址也不是百分百安全,攻击者可以诱导用户进入带Form表单可用POST方式提交参数的页面。

    利用方式

    要完成一个CSRF攻击,必须具备条件:

    • 受害者已经登陆了目标网站并且没有退出
    • 受害者有意或无意的访问了攻击者发布的页面或链接地址

    大概步骤:

    1. 用户在网站A登陆了,A返回了一个session ID(使用cookie存储)
    2. 浏览器保持登陆状态
    3. 攻击者给用户发了个链接,用户点击并查看了内容
    4. 用户在打开链接时,这个页面已经自动对A发送了一个请求,因为此时用户还保持登陆状态,因此只要请求的地址是A的就会携带A的cookie信息
    5. A误以为是用户的操作,这样攻击者可以随意更改用户在A上的信息,以用户的身份在A网站操作

    如何防范

    防范CSRF攻击,主要以两个方面入手:

    • 正确使用GET,POST和Cookie
    • 在非GET请求中增加伪随机数

    增加伪随机数其实是在请求中嵌入一些额外的授权数据,让网站服务器能区分未授权的请求,比如说在请求参数中添加一个字段,这个字段的值从登录用户的Cookie或者页面中获取的(这个字段的值必须对每个用户来说是随机的,不能有规律可循)。攻击者伪造请求的时候是无法获取页面中与登录用户有关的一个随机值或者用户当前cookie中的内容的,因此就可以避免这种攻击。

    防范的方法有:

    1. token机制:在生成表单的时候生成一串随机token,内置到表单成为一个字段,同时置入session中。每次表单提交到后台都会检查两个值是否一致,以此来判断表单提交是否可信。
    2. 验证码。通常验证码能很好的遏制CSRF攻击,但是用户体验较差,因此只能作为一种辅助手段
    3. referer识别。在HTTP Header中有一个字段referer,记录了HTTP请求的来源地址。如果是其他网站,有可能是CSRF攻击,则拒绝该请求。但是服务器端不是每次都能收到referer。有些用户出于隐私考虑限制了referer的发送,某些情况下浏览器也不会发送referer,例如https跳转到http

    相关文章

      网友评论

          本文标题:CSRF

          本文链接:https://www.haomeiwen.com/subject/hdtadctx.html