【问题标题】:Can you tamper with the cookie expiration date of a signed cookie in Rails?你可以篡改 Rails 中签名 cookie 的 cookie 过期日期吗?
【发布时间】:2018-07-18 19:10:33
【问题描述】:

据我所知,一旦 cookie 作为响应发送(并且 cookie 包含过期日期),过期日期不会随请求一起发回,只是 cookie 内容。

因此,即使 cookie 在 Rails 中签名,是否有可能只是篡改其到期日期并将其设置为比实际时间更远的未来?

【问题讨论】:

  • 您可以通过cookies.encrypted[:valid_until] = ...提供安全值

标签: ruby-on-rails ruby cookies


【解决方案1】:

是的,除非您提供额外的安全性,否则只能篡改加密/签名 cookie 的 cookie 到期日期。

查看值是如何加密的,您总是可以向 cookie 值添加其他信息 - 例如。到期日期(并以数组形式存储整个值,元素索引 0 是值,元素索引 1 是 cookie 到期日期,例如,或者在该字符串中使用一些查询并拆分字符串以获取值) .然后,在您的控制器中,将 cookie 值解析为一个数组并检查过期日期的值(例如,如果它应该已经过期,在这种情况下会引发错误)并将 cookie 的过期日期设置回正确的、非篡改客户的价值。这样,每次您需要该 cookie 的值时,您始终可以检查该 cookie 是否仍然存在,或者到期日期是否已被篡改。

我认为你不需要经常这样做,它的应用是针对一个非常具体的控制器方法。当然,这是一种骇人听闻的方式,但这是真正确定 cookie 值和 cookie 过期日期没有被篡改的唯一方法。

【讨论】:

    【解决方案2】:

    是的,你当然可以。

    cookies.signed[:ssid] = { value: '', expires: Time.now + 30.minutes } 或 cookies.signed[:ssid] = { value: '', expires: Time.now + 60.years }

    这里的值可以是字符串或数组。 有了这个,您可以将 cookie 的过期时间设置为您想要的任何时间。

    【讨论】:

    • 这没有回答问题,问题是关于已经设置的cookies。您正在解释的方法仅适用于 Rails 代码中的新 cookie。
    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    相关资源
    最近更新 更多