我有一个HTML列表,其<ul>
个项目的ID与数据库表中的主键相同。为此目的公开主键通常是否可以接受?如果没有,可以使用哪些有效的方法来掩盖它们?
答案 0 :(得分:6)
如果您的网站安全,通常没有问题。任何可以访问主键的人都不应该对这些知识做任何事情。如果你依赖它们是一个秘密,那就是通过默默无闻的安全,这根本不是安全。
但是,如果您的主键是数字,则它们不是有效的元素ID。元素ID必须以字母(src)开头。你可以这样做,例如
<span id="foo-<%= Model.PrimaryKey %>"></span>
答案 1 :(得分:3)
ID不应以数字开头。
http://www.w3schools.com/tags/att_standard_id.asp
如果你可以添加一些东西,真的不应该是一个问题。安全方面,我认为使用ID不足以担心风险。
答案 2 :(得分:1)
向用户公开数据库密钥有什么代价?如果没有,那么继续展开它们。如果存在惩罚(通常表示更大的安全问题),那么您可以加密它们。
(您可能会发现查看SO的页面来源很有帮助)
答案 3 :(得分:0)
我见过很多人使用这种策略,我觉得它运作得很好。如果您愿意,可以“隐藏”ID,但是您的安全问题是什么?
答案 4 :(得分:0)
除非您出于安全原因不想公开ID,否则使用主要ID是完全正常的
答案 5 :(得分:0)
没有安全措施是100%防火的。在其他条件相同的情况下,具有多层安全性优于单一层。花时间模糊或加密ID是否值得取决于您的数据的价值,以及因此黑客可能的确定程度。换句话说,如果数据库遭到入侵,会对公司造成多大伤害?
但是,我认为如果有人获得了对您的数据库的足够访问权限,他们能够针对它运行可以利用主键的查询,那么他们可能会运行可能会暴露主键的查询。所以混淆密钥更有可能减慢黑客的速度而不是阻止他们。
但是,只要你确保混淆的字符串是唯一的,那么混淆它们并没有什么坏处。为了有效,您应该难以从混淆的id中派生主键。
答案 6 :(得分:0)
我看到有些人说“ID不能以数字开头”,但实际上在HTML5中不再是这样:
http://mathiasbynens.be/notes/html5-id-class
因此,如果你使用HTML5(没有理由不这样做),你就不用担心了。