安全提交主键

时间:2013-08-15 12:24:45

标签: php javascript mysql

我不知道如何很好地编写网页,所以我有以下问题。我有一个用户可以管理的MySQL数据库。我有两张桌子:人物,视频。

我希望我的页面让用户从人员表中选择一个人(例如,通过名称),然后将此人与视频链接相关联。 从数据库中选择人员很简单,

SELECT personID, name
FROM persons
WHERE name LIKE '%John%'

所以现在用户必须在视频表中插入一个视频链接,该视频表的外键是personID。

我可以在隐藏的html输入表单中存储“select”之后的人的主键,但我认为这不是很安全,因为他们可以编辑它?

我的问题是:你会在select和insert调用之间存储这样的键值? 将所有这些数据存储在会话中更安全吗?

2 个答案:

答案 0 :(得分:2)

这种事情发生了很多,只要你不介意人们看到你的主键(如果他们是数字,它不应该是任何东西,那么完全正常担心)。

假设您正在从表中检索行列表,并以HTML格式显示它们。如果您希望每个表行都有一个“删除”按钮来删除该行,无论是从DOM还是在数据库中,比如通过XMLHttpRequest,每行的典型特征是具有“id”属性,其中id为您要删除的行的主键值。

通常,您的主键是:

  • 表格中的id字段
  • 设置了AUTO_INCREMENT的字段

简而言之,为每个下拉列表提供data-id属性,您可以通过.data选择器在JavaScript中访问该属性。那太好了。只要确保你也保护自己免受SQL Injection的攻击并使用PDO和准备好的陈述,你会没事的。

为了获得额外保护,并确保在提交之前没有人更改data-id属性客户端,请检查id是否与数据库中的name字段相对应,并且您'金色。

答案 1 :(得分:0)

我认为在会话中存储此类数据安全是一个不错的选择。毕竟,它是会话范围的,所以没有理由输出它。 将它存储在会话中会更安全,并且更容易访问和管理。