我应该采取哪些安全措施,以确保如果我的数据库被入侵,长期访问令牌不会被盗?
长期访问令牌对于特定服务与用户名和密码一样重要,但从与他人的交流中发现大多数人(包括我自己)将访问令牌存储为明文。这似乎就像将密码以明文形式存储一样糟糕。显然,您不能对令牌进行salt & hash。
理想情况下,我希望对它们进行加密,但我不确定最佳方法是什么,尤其是在开源项目上。
我想答案可能类似于存储付款信息和PCI合规性的答案,但我也想问一下为什么没有更多讨论呢?也许我漏掉了什么。
我应该采取哪些安全措施,以确保如果我的数据库被入侵,长期访问令牌不会被盗?
长期访问令牌对于特定服务与用户名和密码一样重要,但从与他人的交流中发现大多数人(包括我自己)将访问令牌存储为明文。这似乎就像将密码以明文形式存储一样糟糕。显然,您不能对令牌进行salt & hash。
理想情况下,我希望对它们进行加密,但我不确定最佳方法是什么,尤其是在开源项目上。
我想答案可能类似于存储付款信息和PCI合规性的答案,但我也想问一下为什么没有更多讨论呢?也许我漏掉了什么。
您只是想验证他人提供的令牌吗?如果是,就像处理密码一样处理它。使用字节派生算法(如密码基础密钥派生函数 2 (PBKDF2),也在RFC 2898中描述),迭代10,000次并存储前20个字节左右。当接收到令牌时,它是不可逆的。
您想向其他人提供令牌以进行身份验证吗?如果是,这是一个挑战,因为如果您的应用程序可以解密或以其他方式访问令牌,则攻击者也可以。考虑香农的最大化原则,攻击者知道系统,特别是对于开源项目。
在这种情况下,最好的方法是使用强加密算法(例如AES256)加密令牌,使用强加密标准随机数生成器生成密钥,并将密钥安全地存储在与数据不同的位置,例如在数据库之外受权限保护的文件中。后者意味着SQL注入攻击不会泄露密钥。