我想知道数据连接到主键的数据是否存在任何差异(安全性或性能或不良做法)。所以基本上可以说你有这样一个数据库:
用户
id | username | password
帖子
id | post | user_id
现在假设我们有一个链接到用户的帖子。我们有一个页面,我们删除帖子,例如。因此,当您单击删除按钮时,我们将运行这样的查询:
DELETE FROM posts where id=5;
现在执行此操作的缺陷是,您可以作为用户操纵GET
值id
。
我学会防止这种情况的方法是通过另外检查来检查它,该帖子的用户ID与当前使用PHP和其他查询登录的用户的ID相同。
但我最近尝试了另一种方法,只需更改这样的查询:
DELETE FROM posts where id=5 and userid=1;
如果您想要一条消息知道您是否删除了某些内容,您可以获得受影响的行数。我的朋友告诉我这是非常糟糕的做法,我可以看到,但是这比第一种方法更糟糕? (假设在两种情况下都会阻止sql注入)。总体差异是什么?
答案 0 :(得分:0)
您可以切换到使用不太容易猜到的GUID。阅读https://blog.codinghorror.com/primary-keys-ids-versus-guids/,其中提供了更多信息。