gpt4 book ai didi

mysql - 加密数据库主键以在客户端进行混淆

转载 作者:行者123 更新时间:2023-11-28 23:12:06 29 4
gpt4 key购买 nike

我正在构建一个网络应用程序,出于安全原因,我想混淆主键客户端在其浏览器中查看的资源。

这是在 URL 中公开的主键 (1001) 的示例:https://example.com/orders/1001

如果主键以纯文本(数字)显示,用户可以猜测我们在服务器上有多少资源,尝试打开其他用户的资源(所谓的 FUSK 攻击)和其他不好的事情可能发生。

要混淆主键,最安全的方法是使用加密随机字符串向数据库添加一列,与每个 PK 相关联,并在客户端使用这些而不是 PK。然而,这种安全性是有代价的:

1) 由于冲突,生成新的随机字符串可能需要多次尝试(这种情况极为罕见,但并非完全排除)。

2) 删除行后,无法验证新随机键的唯一性(针对已删除的行),也可能导致与数据库请求发生冲突删除原始行后稍后出现。

上述问题可以通过维护一个预先填充随机字符串的单独表来解决,但我不喜欢为这样一个简单的任务快速积累费用。

如何简单地使用对称 key 加密 PK?例如,Skipjack 加密方法非常适合 64 位 key 。

问题是,这个想法有没有我不知道的缺陷?

这个想法的反对者说(与真正的随机字符串不同)迟早加密会被破解并导致安全漏洞。看起来真的有可能吗? AFAIU,对称加密被认为是非常安全的。此外,我的资源还受到用户身份验证的额外保护,因此即使发生 PK 泄漏也不会造成太大危害。

其他人都在使用什么来混淆主数据库 key ?加密主数据库 key 是一种常见的做法吗?还是每个人都使用随机字符串映射?

最佳答案

加密您的主 key 并公开加密值似乎效率低下,而且有些矫枉过正。如果你真的想走混淆路线,也许你可能会对 hashids 感兴趣.

然而,更常见的方法是简单地使用 UUID/GUID作为您的主键,并在 URL 中使用它。如果您已经在使用数字主键并且不想更改,则可以添加一个新的 GUID 列作为备用键 - 然后您可以在此列上添加索引并公开这些值在您的网址中。

几乎每个数据库系统都内置了 GUID 以及在数据库引擎中随机生成它们的能力。

我还想补充一点,您不能仅仅依靠 URL 混淆来确保安全 - 您必须包括适当的检查以确保只有正确的授权用户才能访问每个 ID。

关于mysql - 加密数据库主键以在客户端进行混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45529415/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com