【问题标题】:Cross Site Request Forgery in web servicesWeb 服务中的跨站点请求伪造
【发布时间】:2014-07-09 23:27:25
【问题描述】:

因此,我正在开展一个项目,该项目将进行安全审查,以确保我们确保某些数据的安全(具体来说是学生数据)。我个人现在不需要太担心这个,因为计划是“现在开发,以后安全”,所以从某种意义上说,我正在做“过早的安全优化”,但我还是想知道。

我正在使用 django,它内置了一些跨站点请求伪造保护。如果启用它,我将无法执行文件上传,但它提供的解决方案是要求将 crsf_token 放入表单中,但我没有t 实际上有一个表格,因为项目的这一部分只是一项服务。所以我想知道将其标记为不受 CSRF 保护是否安全?

没有设置 cookie,没有存储会话,每个请求都必须通过我创建的一小部分自签名证书进行身份验证,并且只会提供给一小部分受信任的人(目前为 1 个)。在我看来,CSRF 并不适用于此,这意味着我可以将我需要的内容标记为不受 CSRF 保护的权利?

【问题讨论】:

    标签: django security rest csrf django-csrf


    【解决方案1】:

    我不知道您网站的来龙去脉,但我会说不,它不能免除CSRF 保护

    假设您的网站是 https://www.example.com,我假设自签名证书是客户端使用的 SSL 证书 like this

    现在说他们可以与您的网站交互,因为他们已经在浏览器中安装了客户端证书。现在,假设您的一位用户不小心访问了www.evil.comwww.evil.com 有一个隐藏表单,可以从您的用户浏览器向您的网站发出请求。此表单提交至https://www.example.com/delete_everything

    在您的网站做任何事情之前,它会检查客户端证书 - 嘿,它是有效的,所以继续做它的东西。

    这就是您需要 CSRF 保护的原因 - 提交表单的有效负载中需要首先从您自己的站点读取的内容(例如令牌)。如果www.evil.com 试图通过用户的浏览器读取此内容,他们将无法读取,因为它受到Same Origin Policy 的保护。

    【讨论】:

    • 更好的答案!我没有考虑有人在他们的浏览器中安装这个。虽然我真的希望我信任这些证书的人不会愚蠢到在他们的浏览器中安装这些证书,但我觉得我仍然应该防范这种情况。谢谢!
    【解决方案2】:

    你有很多选择,让我们想想别人:

    • 在 CsrfViewMiddleware 之前编写一个中间件并进行一些验证(源 ip、标头、令牌等)
    • 用@csrf_excepmt 装饰并在视图函数中进行验证

    【讨论】:

    • 如果我执行上述验证,将其标记为豁免实际上是否安全?
    • 在一般用例中进行思考,在视图内部进行验证就可以解决问题...您将完全控制要应用的过滤器,只需检查 request 和 request.META 即可查看您拥有的内容.
    • 如果我不执行任何验证接受 SSL 验证,假设我需要的证书仅由客户端代码使用,而不是任何人的浏览器使用。我将进行进一步检查,但假设是这种情况,我就不必担心了吗?
    • 只有你可以定义你的应用程序的风险是什么,只有你设计你的安全策略......我有一些没有 csrf 验证的 web 服务,因为我的“业务逻辑安全”不需要,其他的有基于令牌或其他任何东西的自定义验证。
    猜你喜欢
    • 2013-11-19
    • 2014-08-31
    • 2014-06-21
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多