Php CodeIgniter-防止编辑引起的问题<;表格>;使用检查元素的操作

Php CodeIgniter-防止编辑引起的问题<;表格>;使用检查元素的操作,php,html,forms,codeigniter,google-chrome-devtools,Php,Html,Forms,Codeigniter,Google Chrome Devtools,我敢肯定,每个web开发人员都知道,可以使用浏览器的Inspect元素功能编辑网页内容 例如,我实际上可以编辑表单的action属性的值,立即提交它(无需刷新),并将表单的值发布到与我编辑的新值等效的URL 这对我实现类似于Facebook的页面评论功能造成了严重的漏洞。我使用CodeIgniter。我要做的是将用户评论的页面ID作为URL中的一个参数传递给用户 <?php echo form_open(base_url().'pages/process_comment/'.$page_

我敢肯定,每个web开发人员都知道,可以使用浏览器的Inspect元素功能编辑网页内容

例如,我实际上可以编辑表单的action属性的值,立即提交它(无需刷新),并将表单的值发布到与我编辑的新值等效的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>


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

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

是否有更好的实现

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

当有人在使用开发人员工具时,他/她应该小心,他/她应对自己的工作负责。我可以使用诸如“高级Rest客户端”之类的工具在标准网站上发表上百条评论,但我对由此造成的混乱负责,而不是网站的开发人员。开发人员所能做的最好的事情就是开发一个好的算法来检测垃圾邮件

事实上,当web服务可用时,您可以在不打开网站前端的情况下发布评论或其他数据!!但是,如果以适当的方式使用captcha,则此问题可能会受到限制。反过来,这将确保您确实查看前端

因此,为了回答您的问题,有一种方法可以让开发人员更难意外地使用错误的值提交:您可以创建一个页面特定的“令牌”——它可以再次被操纵,但很难做到这一点。

有助于防止这种情况发生的一种方法是使用加密。差不多

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

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

我也有同样的问题。我的解决办法是:


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

我们已经修改了标记解析器,以支持“裸”URL(在大多数情况下,但并非所有情况下,请注意URL中的异常字符);它们将自动转换为链接:

I often visit http://example.com.
通过将URL括在尖括号中强制URL:

Have you seen <http://example.com>?
你看到了吗?

URL可以是相对的,也可以是完整的。

谢谢。我明白。但是,如果允许用户在该评论上发表评论,并且他使用Inspect元素输入的page_id值实际上存在并且有效,那么我如何在服务器端防止该问题呢?如果允许用户在这两个方面发表评论,而他们这样做只是因为(我想不出有意义的理由),谁在乎呢?他们刚刚找到了一个非常复杂和愚蠢的方法来做他们被允许做的事情。谢谢!这可能就是我要找的。实际上,我已经在我的用户表中使用了它,该表主要用于验证电子邮件,但我没有意识到我可以在页面中实现它。谢谢!