W3G*_*eek 4 php mysql pdo spam-prevention primary-key
我使用CodeIgniter,PHP和PDO for MySQL从头开发了一个公告板.现在我正在清理它并测试缺陷/安全漏洞.我遇到了一个小缺陷,我无法想到一个可靠的解决方案.用户可以使用甚至与任何论坛帖子无关的随机评论来充斥我的数据库.为了更好地描述这个问题,让我简要解释一下我的系统
当您登录以查看帖子时,post_id将从数据库中提取帖子对象以及任何相关的评论.您可以选择阅读帖子并留下您自己的评论.底部的注释表单有一个隐藏字段pid,用于存储我们正在查看的当前帖子的ID,因此当您单击提交按钮时我可以保持状态.然而,这是一个垮台.隐藏字段可以在提交之前修改为任何整数值,因为您可能猜到了.
URL方案看起来就像您正在查看帖子时;
http://www.domain.com/forum/post/22
按下提交后,您将被重定向到一个看起来像的URL;
http://www.domain.com/forum/create_comment
...评论信息将与相关的用户ID和帖子ID一起插入数据库.
我尝试针对引用网址进行测试,但案例类似.我想出了几个解决方案,但我不知道他们中是否有任何想法?执行JavaScript,将其存储pid到会话中,和/或隐藏在字段中隐藏的信息.
你不能强制执行JavaScript,pid在会话中存储会驱动任何有多个标签的人,并且混淆永远不会很好.
一种可能的解决方案是使用salted哈希来验证数据.例如:
<input type="hidden" name="pid" value="<?= $pid ?>" />
<input type="hidden" name="pid_hash" value="<?= sha1('this is my salt' . $pid) ?>" />
Run Code Online (Sandbox Code Playgroud)
提交时,您拒绝散列不符合pid值的任何内容.由于盐从未暴露在用户的浏览器中,因此他们应该很难将其伪造为不存在的pid.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |