我有一个 Questions 表,该表的主键是“id”,具有自动增量。现在我正在创建一个用于管理问题的控制面板。控制面板中的一项功能是删除问题。现在我的问题:我想将 Questions 表的主键作为 HTML 标签的标识符发送给客户端,以便当用户单击 HTML 标签删除问题时,问题的主键发送到服务器以删除问题。在安全方面是否有危险?你有更好的解决方案吗?
3 回答
每个请求都必须经过验证,无论它以带有 id 的 HTTP GET、POST 或 Web 服务调用的形式出现。
正确制作的网站需要防止依赖于 IP 地址跟踪和请求频率分析的僵尸程序;隐藏 id 可能会阻止某些人编写 shell 脚本来获取一系列对象,但是还有其他方法可以通过使用某种蛮力攻击来利用网站。
ICQ id 很有价值,但这仅仅是因为它们与用户相关并且是用户的主要识别手段;这是一种独一无二的用户身份验证方法,没有被任何其他服务、程序或网站使用。
结论 是的,你需要担心爬虫和 DDOS 攻击和数据保护以及一大堆其他东西,但是隐藏 id 并不能正确解决任何这些问题。
如果您的问题与使用主键与任何其他唯一列集来识别要删除的记录有关,那么数据库级别的安全性没有区别。
例如,如果您有一个包含以下列的表:
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 页面触发的,您肯定需要查看如何保护页面并防止意外删除,但这与使用主键而不是任何其他字段来删除记录的决定无关.
好像你要使用
<a href="YOUR_URL_TO_DELETE/ID_TO_DELETE">YOUR_ANCHOR</a>
我遇到这种方法的主要问题是每个可以跟随链接的脚本都可以删除表中的记录。考虑使用带有 POST 方法的表单,并在执行请求之前向用户显示确认对话框。