2013-01-17 45 views
-1

我有一个问题表,该表的主键是“自动增量”的“ID”。 现在我正在创建一个管理问题的控制面板。控制面板中的一项功能是删除问题。 现在我的问题是:我想把问题表的主键作为HTML标签的标识符发送给客户端,这样当用户点击HTML标签删除问题时,问题的主键就会发送到服务器进行删除问题。在安全性方面是否危险?你有更好的解决方案吗?我应该使用主键来确定要从表中删除的记录吗?

+8

你的问题很难遵循,但如果归结为“我应该使用主键来确定要从表中删除的记录吗?”那么答案是“是”。至于安全性,服务器脚本有责任确定请求是由有效用户进行的,并且该用户有权删除问题。 – GordonM

回答

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' 

使用主键删除可能很好b e更快。

但是,由于这个删除操作是从一个html页面触发的,所以您肯定需要考虑如何保护页面并防止意外删除,但这与决定使用主键与其他字段无关删除记录。

1

看起来像你要使用

<a href="YOUR_URL_TO_DELETE/ID_TO_DELETE">YOUR_ANCHOR</a> 

主要问题thah我用这种方法遇到的是,每一个可以遵循的链接脚本可以在你的表中删除记录。考虑使用带POST方法的表单,并在请求前向用户显示一个确认对话框。

+2

这个问题非常难以遵循,但我想它也可以归结为“我应该使用GET来改变状态的操作吗?”,答案“可能不是”。虽然HTTP规范不禁止改变服务器状态的GET请求,但他们强烈地不鼓励 – GordonM

2

每个请求都必须经过验证,无论它是以HTTP,GET或POST还是Web服务调用的形式出现。

一个正确的网站需要防止依赖于IP地址跟踪和请求频率分析的机器人的保护;隐藏ID可能会阻止一些人编写shell脚本来获得一系列对象,但还有其他方式可以通过使用某种强力攻击来利用网站。

ICQ ID很有价值,但仅仅是因为它们与用户有关,并且是用户的主要识别手段;它是用户身份验证的独一无二的方法,不会被任何其他服务,程序或网站使用。

结论是的,你需要担心刮刀和DDOS攻击,数据保护以及其他一些东西,但隐藏id不会很好地解决任何这些问题。

相关问题