【问题标题】:CSRF: Do I need to use CSRF token for no cookies site?CSRF:我需要对没有 cookie 的网站使用 CSRF 令牌吗?
【发布时间】:2021-09-27 23:51:58
【问题描述】:

我真正想知道的是,我是否需要将 CSRF 令牌添加到不使用 cookie 的网站上的表单中?我不在我的网站上使用 cookie,我使用会话。当然,对于我所有的表格,我都使用 post 方法。如果我需要使用它们,你能解释一下为什么,因为我读到 CSRF 攻击是通过存储在 Web 浏览器中的 cookie 发生的。所以,我的逻辑是没有 cookie,没有 CSRF 攻击。我说的对吗?

非常感谢。

【问题讨论】:

  • 会话信息一般存储在cookies中。您的会话如何存储在客户端?
  • “我的逻辑是没有 cookie,没有 CSRF 攻击”——这是正确的,但不清楚这是否真的不适用于你的情况,除非你能澄清您的会话是如何工作的。
  • 我有会话,但不使用 cookie,因为它们在浏览器中,而会话在服务器端。例如,我在用户登录后设置的那些会话: $_SESSION['user_id'] = $result["usr_id"]; $_SESSION['user_loggedin'] = TRUE; $_SESSION['username'] = $result['username']; $_SESSION['email'] = $result['email'];
  • 那些会话使用cookies!!浏览器获取一个 cookie,其会话 id 与其服务器端会话相对应!你觉得具体的浏览器还能怎么识别呢‽
  • 如果您不使用令牌,您容易受到 CSRF 攻击。

标签: php forms security csrf csrf-token


【解决方案1】:

所以,我的逻辑是没有 cookie,没有 CSRF 攻击。我说的对吗?

不,你不正确。

如果您的 Web 客户端更改了服务器的状态(包括更改服务器使用的数据库中的数据),那么 CSRF 攻击是可能的,您需要 CSRF 保护。如果您的 Web 客户端不更改/改变服务器的状态(例如,仅读取、列出数据),则不需要 CSRF。

以上内容适用于任何会话和 cookie。

例如,您的网络服务器仅列出您最喜欢的城市在过去 10 年中的平均每日气温。每个人都可以看到这些数据,因此服务器不会对用户进行身份验证并且没有会话。而且没有饼干。但是,您不希望某些“脚本小子”编写脚本并无休止地调用您的 API 端点,每天进行数百万次调用。因此,您实施速率限制。您还会在一段时间内(例如 1 小时或 1 天)阻止作为超出限制的 API 请求来源的客户端 IP 地址。 (这样的阻塞是作为例子提到的,它是否是一个好主意超出了我们的主题范围)

在这种情况下,您仍然需要 CSRF 保护,因为攻击者可以发起 CSRF 攻击,导致受害者无法使用您的服务器。

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 2023-03-08
    • 2018-01-05
    • 2012-07-21
    • 1970-01-01
    • 2013-07-20
    • 2021-08-02
    • 2019-12-30
    相关资源
    最近更新 更多