加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何防止id被修改?

发布时间:2020-12-13 17:30:14 所属栏目:PHP教程 来源:网络整理
导读:我使用CodeIgniter,PHP和PDO for MySQL从头开发了一个公告板.现在我正在清理它并测试缺陷/安全漏洞.我遇到了一个小缺陷,我无法想到一个可靠的解决方案.用户可以使用甚至与任何论坛帖子无关的随机评论来充斥我的数据库.为了更好地描述这个问题,让我简要解释一
我使用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) ?>" />

提交时,您拒绝散列不适合pid值的任何内容.由于盐从未暴露在用户的浏览器中,因此他们应该很难将其伪造为不存在的pid.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读