【问题标题】:database or sessions ? where to store tokens数据库或会话?在哪里存储令牌
【发布时间】:2014-05-28 13:33:36
【问题描述】:

令牌是防止csrf攻击的好工具

对于用户提出的每个请求,您的系统必须生成一个唯一的令牌并将其存储在某个地方

下次客户端要求执行某些操作时,系统会验证令牌是否存在,是否仍然有效

如果我们将令牌存储在会话中,那么会话将变得太大,这将消耗大量内存,因为 CPU 在响应请求时会将整个会话加载到内存中,例如 CPU 为 1Gb,并且1000 个用户有 1 个 1Mb 的会话,CPU 不会处理任何事情,这可能是典型的 ddos​​ 攻击(在知道它们存储在会话中的情况下请求越来越多的令牌)

另一方面,在数据库中存储令牌有他自己的弱点,

您使用哪种方法存储令牌?

【问题讨论】:

    标签: php token


    【解决方案1】:

    使用会话,每个会话 1MB 是相当高的 IMO。由于 PHP 的 Session 处理程序可以切换到使用不同的后端,因此您可以灵活地将它们存储在磁盘/memcached/mysql 上。

    【讨论】:

    • 你允许一个用户的最大令牌数是多少
    • 每个会话一个,见owasp.org/index.php/…
    • 当然可以,不过您应该让它们过期或定期重新生成它们。只需确保测试无效令牌不会导致用户丢失表单状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多