如何不允许人们手动更改html表单代码并提交

时间:2013-09-15 09:22:16

标签: php forms security codeigniter

所以我使用的是codeigniter,我已经提交了表单来提交评论。

echo form_open(current_url()); // http://localhost/post/26
$textarea = array(
    'id' => 'comment_area',
    'name' => 'comment',
    'value' => set_value('comment'),
    'cols' => 35,
    'rows' => 5
);
echo form_textarea($textarea);
echo '<br />';
    echo form_submit('submit', 'Comment');
echo form_close();

所以你怎么猜这个产生:<form action="http://localhost/post/26" method="post" accept-charset="utf-8">

但是有问题,当我使用firebug动作id手动更改为25:

<form action="http://localhost/post/25" method="post" accept-charset="utf-8">

并提交 - &gt;它提交评论到第25个帖子,而不是第26个...所以我怎么能像这样保护我的表格标签?

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,我会说不要为这样的事情烦恼。如果他们有权限而不是让他们这样做。

这里有一点解释(场景)为什么你可能不想这样做。

让我们根据您提供的内容,生成的密钥是30,因此您有一个表单,例如

< form action="http://localhost/post/30" method="post" accept-charset="utf-8">

假设您现在创建另一个成为31的帖子,因此您现在还有一个表单,例如

< form action="http://localhost/post/31" method="post" accept-charset="utf-8">

现在假设我是访问并阅读第30篇帖子的用户,我会点击

localhost/post/30 (http of course)

的链接

现在你建议我阅读另一篇第31篇帖子,我会点击一个链接

localhost/post/31

如果知识渊博的用户在第30个帖子并且决定更改为30到31,该怎么办?那你怎么知道他们点击你提供的链接还是自己更改了价值? (HTTP引用可以从我听到的内容中解决)。

我只能说是检查他们是否有权在该特定帖子上发帖,否则就让他们这样做。我认为stackoverflow也做同样的事情。检查帖子是否存在且用户是否有权在该帖子上发表评论。然后让他们这样做,不要担心他们从一个帖子提交评论到另一个试图成为黑客的帖子。那不是黑客,那就是鬼混。

修改 如果你有权限并且帖子存在,那么对于甚至不是安全问题的事情都要做很多工作。我只是检查许可(可能有点复杂)和帖子的存在。

答案 1 :(得分:0)

这是服务器端问题。您必须阻止代码以这种方式在服务器中发布。 您可以使用HTTP Post方法。另一个技巧可能是以某种方式加密post id,或者每次需要访问时都为每个帖子生成一个唯一的id并暂时使用它。