gpt4 book ai didi

php - 对匿名用户使用 CSRF 保护是否有意义?

转载 作者:可可西里 更新时间:2023-11-01 00:59:38 25 4
gpt4 key购买 nike

CSRF 保护是否应该用于匿名用户,或者这是否违背了它的目的?

我有一个可以匿名访问的 URL。当使用适当的信息访问 URL 时,一些值会在我的数据库中更新。例如,客户可以在他们的订单确认页面上放置一些代码,这些代码将向 http://example.com/save-request 发出 POST 请求,并发送以下数据:

{orderId: 1234, referralCode: 'ABCDEF'}

当我收到此请求时,我会使用推荐代码更新数据库中的给定订单:

$order = Order::find(Input::get('orderId'));
$order->referral_code = Input::get('referralCode');
$order->save();

我正在努力保护此 URL 免遭滥用,以便用户无法发送随机订单 ID 请求并尝试获取与其相关联的推荐代码。

我想到了 CRSF 保护,但这意味着我需要先获取 token ,这需要另一个公共(public) URL。这似乎会使滥用变得稍微困难​​一些,但仍然有可能,因为滥用者可以简单地获取 token ,然后像往常一样发出请求。

是否有任何策略可以防止此类滥用?

最佳答案

CSRF 旨在保护经过身份验证的 session 。基本思想是:服务器为所有经过身份验证的 session 向客户端提供一个 CSRF token 。客户端应该在每个后续请求中将相同的 CSRF token 传递给服务器。因此,如果请求没有 token ,服务器应该忽略/记录它。理想情况下,您的 CSRF token 应该只传递给客户端身份验证。如果有一个单独的 URL 来获取 CRSF token ,它就变得毫无意义。

在您的情况下,由于用户在“订单确认”时始终是匿名的,因此 CSRF 保护不太适用。我认为最好的策略是对数据和 API 进行建模,以便每个“订单确认”都是一个带有可选“referralCode”的原子请求。您的 API 函数/端点,可能是 /confirm-order,然后可以获取 referralCode 并将其与任何其他确认一起保存到 Order 对象中处理逻辑。编辑顺序的 API 函数/端点,可能是 /edit-order,应该需要身份验证。然后,应用标准的 CSRF 保护。

但是,如果您打算允许匿名用户更改他们的订单详细信息,包括referralCode,您可以通过跟踪更改来减少滥用,并且只允许最大数量的变化。如果有帮助,您还可以添加一些时间限制。

关于php - 对匿名用户使用 CSRF 保护是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31143437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com