我经常遇到通过选择框等表单公开内部数据库主键的 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/