我有一个Questions表,这个表的主键是“id”,带有自动增量。 现在我正在创建一个用于管理问题的控制面板。控制面板中的一个功能是删除问题。 现在我的问题是:我希望将问题表的主键发送到客户端作为HTML标记的标识符,这样当用户点击HTML标记删除问题时,问题的主键就会发送到服务器以删除问题。这在安全方面是危险的吗?你有更好的解决方案吗?
答案 0 :(得分:2)
每个请求都必须经过验证,无论它是以带有id,POST或Web服务调用的HTTP GET形式出现的。
正确制作的网站需要针对机器人的保护,这些机器人依赖于IP地址跟踪和请求频率分析;隐藏ID可能会阻止某些人编写shell脚本来获取一系列对象,但还有其他方法可以通过某种类型的强力攻击来利用网站。
ICQ ID很有价值,但仅仅因为它们与用户有关并且是用户识别的主要手段;它是一种独一无二的用户身份验证方法,不被任何其他服务,程序或网站使用。
结论是的,你需要担心刮刀和DDOS攻击以及数据保护和其他一些东西,但隐藏ID不能正确解决任何这些问题。
答案 1 :(得分:2)
如果您的问题与使用主键与任何其他唯一列集来识别要删除的记录有关,则数据库级别的安全性没有差异。
例如,如果您有一个包含以下列的表:
id - primary key
subject -
serial_number -
...
other fields
每行subject + serial_number
或每行唯一,无论你做什么都没有区别
delete from table where id = '&id'
与
delete from table where serial_number = '&1' and subject = '&2'
使用主键删除可能会更快。
然而,由于此删除是从html页面触发的,因此您肯定需要查看如何保护页面并防止意外删除,但这与使用主键与任何其他字段的决定无关。删除记录。
答案 2 :(得分:1)
好像你要使用
<a href="YOUR_URL_TO_DELETE/ID_TO_DELETE">YOUR_ANCHOR</a>
我遇到这种方法的主要问题是每个可以跟踪链接的脚本都可以删除表中的记录。考虑使用带有POST方法的表单,并在执行请求之前向用户显示确认对话框。