保持数据更新安全

时间:2013-08-27 16:53:20

标签: php html mysql

我见过许多网站(包括SO和我的网站),用于存储从HTML属性中的数据库中提取的数据的行ID。我知道它可以由客户端的用户编辑,也可以发送到服务器端来更新数据。以此查询为例,请记住,它是用于提升评论:

SELECT comment_id, comment FROM comments

正常人会像这样进行打印:

<td data-commentid="<?php echo $row['comment_id']; ?>"><?php echo $row['comment']; ?></td>

和输出:

<td data-commentid="1">+1, beat me to it.</td>
<td data-commentid="2">Damn! What is this?</td>
...

当它显示给某个黑客类型的用户时,他会尝试用250之类的东西编辑这个纪念品,然后点击upvote按钮,我们无辜的脚本会接受它并且会用id 250来支持其他评论,尽管它是视觉上的ID为1或2的评论。

问题

有没有办法摆脱这个?您可以打开控制台并检查SO,当您更改其属性引用以注释重要信息时,它似乎使用更新的属性ID更新数据库。

1 个答案:

答案 0 :(得分:7)

这实际上不是攻击。

执行“hack”与实际查看评论#250并提升它之间没有区别。

如果用户将ID或操作更改为他不允许执行的操作,则必须使用服务器端授权/访问控制来拒绝该请求。

简而言之:

永远不要相信客户提供的任何信息。

始终验证输入是否有意义,并且允许用户执行操作。