如何在MariaDB中存储API令牌?

yquaqz18  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我有一个API,我想找到一个安全的机制来存储在MariaDB v10.5中。
下面是我心中的几个选择:
1.散列API密钥并将散列的用户密钥与数据库值进行比较。但是,用户将无法在生成过程之外检查API。
1.使用可逆加密对值进行加密。用户可以随时查阅密钥。
有没有最合适的选择?

6qqygrtg

6qqygrtg1#

为了避免编写API安全指南,API密钥的关键要求是:

  • 保密性,包括不可猜测性

对于一个不可猜测的API密钥,它应该包含至少128位的随机数据(可能是基于意见的,但由于AES 128密钥是安全的,这也是)。为了方便用户以base64(或其他编码机制)的形式呈现它,添加一点验证可能性,以区分不同形式的白色空格(和其他字符)。
所以在数据库端,128位的数据是BINARY(16)。MariaDB-10.11+将使用RANDOM_BYTES,但是任何应用程序语言都可以以某种形式提供随机字节。由于其BINARY,请确保使用准备好的语句来绑定insert/select查询中的值,而不是尝试SQL转义它。
像密码一样散列一个值实际上并不会增加与其值相关的随机性。坚持使用随机字节,如果可能的话,使用加密安全的字节,以避免可能的伪随机生成器预测。
如果它被加密了,它可以被解密,这只会暴露出API被滥用。不要这样做。允许用户生成多个API密钥,并且在第一次生成后不显示API密钥。就像信用卡一样,可能允许最后几个(8位,2个十六进制数字)在接口和使用API密钥作为检查的设备中暴露。
注意:OWASP有一些很好的安全指南API Security Top 10 2023

相关问题