security - 避免在 Web 应用程序源中暴露主键?

标签 security database-design architecture web-applications data-modeling

我经常遇到通过选择框等表单公开内部数据库主键的 Web 应用程序。有时我会看到 javascript 与 int 或 guid 魔法值匹配,从而切换逻辑。

这是避免泄露 Web 应用程序中行的所有内部标识符的最佳实践,以防止外部人员过多了解您的系统并可能利用它来利用您的系统。如果是这样,解决这个问题的最佳方法是什么?

您是否应该向网络应用程序公开一些可以转换回主键的其他值?

谢谢

编辑

在完美的世界中,您的应用程序将是 100% 安全的,因此即使您掩盖了某些内容也没关系。显然情况并非如此,因此我们是否应该谨慎行事而不公开此信息?

有人指出 Stackoverflow 可能会暴露 Url 中的一个键,这可能没问题。但是,企业应用程序的考虑因素是否有所不同?

最佳答案

我不同意暴露主键是一个问题的立场。如果您让它们对用户可见,则可能会出现问题,因为它们在系统外部被赋予了意义,而这通常是您想要避免的。

但是如何使用 ID 作为组合框列表项的值?我说就去吧。在某些中间值之间进行转换有什么意义?您可能没有可用的唯一 key 。这样的翻译会带来更多潜在的错误。

不要忽视安全性。

如果您向用户展示 6 个项目(ID 1 到 6),切勿假设您只会从用户那里获取这些值。有人可能会尝试通过发回 ID 7 来破坏安全性,因此您仍然必须验证您返回的内容是否被允许。

但是完全避免这种情况吗?决不。不需要。

正如另一个答案的评论所说,请查看此处的 URL。这无疑包括 SO 数据库中问题的主键。公开 key 用于技术用途是完全可以的。

此外,如果您确实使用一些代理值,那并不一定更安全。

关于security - 避免在 Web 应用程序源中暴露主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/806787/

相关文章:

architecture - 从内存中提取一个单词需要多长时间?

ruby-on-rails - Rails 数据库 - 如何使用用户密码存储加密数据?

javascript - 允许用户动态添加 javascript 的网页安全性

mysql - 在谷歌云 sql (mysql) 数据库表与枚举列中管理主数据的最佳方式

c# - N-Layer/N-Tier 错误处理设计

rest - 什么是 RESTful 编程?

http - 使用 HTTP 的 WCF 自定义用户名身份验证

amazon-web-services - 如何为多个用户管理 EC2 key 对?

mysql - 确保表条目是唯一的

.net - 如何计算字符串列表的良好哈希码?