繁体   English   中英

确保数据更新安全

[英]Keeping data update safe

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

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之类的内容编辑commentid,然后单击upvote按钮,我们的无辜脚本将接受它,并且将对id为250的其他注释进行表决,尽管它在视觉上是对id为的注释1或2。

问题

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

那实际上不是攻击。

执行“ hack”与实际查看注释250和对其进行评论之间没有区别。

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

简而言之:

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

始终验证输入是否合理,并允许用户执行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM