我应该采取哪些安全措施来确保,如果我的数据库受到损害,长寿命访问令牌不会被盗?
长寿命访问令牌与特定服务的用户名和密码一样好,但从与其他人的交谈看来,大多数人(包括我自己)都以纯文本形式存储访问令牌。这似乎与以纯文本形式存储密码一样糟糕。显然,人们无法对令牌进行加盐和哈希处理。
理想情况下,我想对它们进行加密,但我不确定执行此操作的最佳方法,尤其是在开源项目上。
我想这个问题的答案与存储支付信息和 PCI 合规性的答案类似,但我还想问为什么没有对此进行更多讨论?也许我错过了一些东西。
您只是想验证其他人提供的令牌吗?如果是这样,请将其视为密码。使用字节推导算法,例如基于密码的密钥派生函数 2 (PBKDF2) http://en.wikipedia.org/wiki/PBKDF2(也描述于RFC 2898 https://www.rfc-editor.org/rfc/rfc2898)进行 10,000 次迭代并存储前 20 个字节左右。当收到令牌时。它实际上是不可逆的。
您想将令牌出示给其他人进行身份验证吗?如果是这样,这就是一个挑战,因为如果您的应用程序可以解密或以其他方式访问令牌,那么攻击者也可以。想想 Shannon 的 Maxim,攻击者了解系统,尤其是对于开源项目。
在这种情况下,最好的方法是使用强大的算法(例如 AES256)加密令牌,使用强大的加密标准随机数生成器生成密钥,并将密钥安全地存储在与数据不同的位置,例如上例中数据库外部的受权限保护的文件。后者意味着 SQL 注入攻击不会泄露密钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)