0

假设我有以下表格:
1. comments: c_id, a_id, body
2. articles: a_id, title,body

我有一个评论系统(类似于 SO)。但是当然我必须提供要发布的文章的 ID,并且有很多方法可以做到这一点。

因此,我采用了简单的方法,即使用文章 ID 创建一个隐藏输入,就像这样:
<input type="hidden" name="article_id" value="1" />
然后简单地将其发布到服务器端。并使用 MySQL 插入到表中。但是,不良用户是否可以更改隐藏输入中的数据?

例如,如果他更改隐藏的输入并输入无效的 ID,或者不存在的文章或我真正不需要的任何内容。这是我应该考虑的事情吗?因为唯一会发生的是无效评论,仅此而已。因为我得到了intval所有整数输入,所以我不害怕任何类型的 SQL 注入。

底线:我是否真的关心无效评论,并首先发出额外的查询检查文章是否存在,这将占用更多资源,以确保不会插入无效的无害评论。

4

2 回答 2

1

用户可以更改数据是 100% 正确的。底线是,客户端上的任何东西都可以被客户端修改(好或坏)。

无论您如何使用它,我肯定会验证来自客户端的 ID。如果您有正确的外键关系设置,将无效 ID 插入数据库在技术上应该会失败,但假设您没有设置,那么它可能会导致数据库中充满无效数据。

此外,如果您跟踪所有提交的“无效”ID 以及提交它们的用户,您可以(将来)实现可以阻止/禁止用户发表评论的逻辑等。

于 2012-07-21T02:50:19.743 回答
1

您应该始终检查以确保用户没有插入错误/无效数据。

永远不要相信客户。更改隐藏值非常容易

现在您的数据库中应该有外键约束,这将部分保护您免受此影响,但是如果他们将文章 ID 更改为有效的东西,但也许他们无权访问(文章已锁定)您想要保护 vs那

于 2012-07-21T02:46:20.363 回答