然后简单地将其POS">
假设我有以下表格:
comments
:c_id
,英特尔,a_id
,body
articles
:title
,英特尔,body
我有一个评论系统(类似于SO)。但当然,我必须提供文章的Id,有很多方法可以做到这一点。
因此,我采用了简单的方法,即使用文章的ID创建一个隐藏输入,如下所示:
<input type="hidden" name="article_id" value="1" />
然后简单地将其POSTed到服务器端。并使用MySQL插入到表中。但是,不好的用户不可能更改隐藏输入中的数据吗?
例如,如果他更改了隐藏的输入并放入了一个无效的ID,或者一篇不存在的文章,或者任何我真的不需要的东西。这是我应该考虑的事情吗?因为唯一会发生的事情就是无效的注释,仅此而已。因为我得到了所有整数输入的intval
,所以我不怕任何类型的SQL注入。
底线:我是否真的应该关心无效评论,并发出额外的查询来检查文章是否首先存在,这将占用更多的资源,只是为了确保不会插入无效的无害评论。
发布于 2012-07-21 02:46:20
您应该始终检查以确保用户没有插入错误/无效的数据。
永远不要相信客户。更改隐藏值非常容易。
现在你应该在你的数据库中有foriegn key约束,这将在一定程度上保护你不受这种情况的影响,但是如果他们把文章id改成了有效的东西,但是他们可能不能访问(文章被锁定)你想要保护的东西而不是那个东西。
发布于 2012-07-21 02:50:20
用户可以更改数据的说法是100%正确的。底线是,客户端上的任何东西都可以由客户端修改(好的或坏的)。
我肯定会验证来自客户端的ID,不管你是如何使用它的。如果您设置了适当的外键关系,那么在技术上将无效it插入到数据库中应该会失败,但是假设您没有这样做,那么它可能会导致数据库中充满无效数据。
此外,如果您跟踪所有提交的“无效”if以及提交它们的用户,您可以(在将来)实现可以阻止/禁止用户发布评论的逻辑。
https://stackoverflow.com/questions/11589082
复制