CodeIgniter-防止编辑<;表单>;使用Inspect Element执行操作


CodeIgniter - Prevent problems caused by editing <form> action using Inspect Element

我相信每个web开发人员都知道,可以使用浏览器的Inspect Element功能编辑网页的内容。

例如,我实际上可以编辑表单动作属性的值,立即提交(无需刷新),并将表单的值发布到与我编辑的新值等效的URL。

这给我实现类似于Facebook的页面评论功能带来了一个严重的漏洞。我使用CodeIgniter。我所做的是将用户评论的页面的ID作为URL中的参数进行传递。

<?php 
echo form_open(base_url().'pages/process_comment/'.$page_id, $attributes) 
?>

生成的标记如下所示:

<form action="http://localhost/myproject/index.php/pages/process_comment/3" method="post" accept-charset="utf-8" id="comment" name="comment">
    <textarea name='comment_content'></textarea>
    <input type='submit' id='post' name='post' value='post' />
</form>

这种实现的危险在于,我可以将page_id(3)编辑为其他内容,当我提交评论时,它会发布到不同的页面,因为它引用了不同的page_id。如何防止这种情况发生?有没有更好的实施?感谢您的帮助。提前感谢!

我也遇到了同样的问题。我的解决方案是:

在数据库中,我添加了一个名为identifierHash的列,并为其分配了一个9个字符的散列值。然后在表单中,我会有一个指向index.php/controller/postFunction的表单操作链接。该表单将包含两个隐藏值,一个带有userID,另一个带有此哈希。两者必须匹配才能正确发帖。

发布是客户端服务器。因此,您应该始终检查用户是否被允许在线程上发帖。或者,如果任何值不正确/无效
这必须在服务器端进行检查。

帮助防止这种情况的一种方法是使用加密。类似的东西

echo form_hidden('page_id', $this->encrypt->encode($page_id)); 

并使用它而不是URL中的param来确定要发布到的页面的id。它仍然可以被操纵,但对于攻击者来说,要找出值的含义以及如何利用它将是一项艰巨的任务。

有更好的实现吗

从这个角度(保护免受开发人员工具的影响),可能不会。继续阅读。

当某人使用开发人员工具时,他/她应该小心,并对自己所做的事情负责。我可以使用"高级休息客户端"等工具在标准网站上发布一百条评论,但我要为由此造成的混乱负责,而不是网站的开发者。开发人员能做的最好的事情就是开发一个好的算法来检测垃圾邮件。

事实上,当网络服务可用时,你可以在不打开网站前端的情况下发布评论或其他数据!!然而,在以适当方式使用captcha的情况下,这个问题可能会受到限制。反过来,这将确保你确实看到了前端。

因此,为了回答你的问题,有一种方法可以让开发者意外提交错误的值变得更加困难:你可以创建一个特定于页面的"令牌"-它可以再次被操纵,但很难做到。