安全的隐藏表格解决方案

时间:2010-12-09 18:37:04

标签: php

我有这段代码:

<? if ($cur_post['poster_id'] == $forum_user['id']) { ?>
  <div class="txt-box textarea required">
  <label for="fld<?php echo ++ $forum_page['fld_count'] ?>"><span><?php echo $lang_post['Write message'] ?>  <em><?php echo $lang_common['Required'] ?></em></span></label>
  <div class="txt-input"><span class="fld-input"><textarea id="fld<?php echo $forum_page['fld_count'] ?>" name="req_message" rows="14" cols="95"><?php echo forum_htmlencode(isset($_POST['req_message']) ? $message : $cur_post['message']) ?></textarea></span></div>
 </div>
</div>
  <? }
else { ?>

<? } ?>  

<? if ($cur_post['poster_id'] == $forum_user['id']) { ?> <div class="txt-box textarea required"> <label for="fld<?php echo ++ $forum_page['fld_count'] ?>"><span><?php echo $lang_post['Write message'] ?> <em><?php echo $lang_common['Required'] ?></em></span></label> <div class="txt-input"><span class="fld-input"><textarea id="fld<?php echo $forum_page['fld_count'] ?>" name="req_message" rows="14" cols="95"><?php echo forum_htmlencode(isset($_POST['req_message']) ? $message : $cur_post['message']) ?></textarea></span></div> </div> </div> <? } else { ?> <? } ?>

我需要一个更安全的隐藏表单解决方案,因为当我按下提交(作为管理员)时,目前使用此代码,它表示我必须输入写入消息的值。 我可以使用位下的隐藏表单绕过这个 - 但是有知识的人可以使用Inspect Element或Firebug绕过它,然后发布该值。

我需要一个更安全的解决方案,以便人们无法编辑隐藏的表单。我是否以某种方式将旧变量发布到表单中?
这是一个PunBB页面(edit.php):http://punbb.informer.com/svn/punbb/tags/punbb-1.3.3/edit.php(原创)。

由于

2 个答案:

答案 0 :(得分:0)

这总是一个有趣的问题。

我建议将私有数据存储在用户$ _SESSION中,并使用表单+页面调用唯一的索引。我刚刚在工作中遇到了类似的问题,我开始通过隐藏的表单字段传递过多的私有数据。现在我只传递一个唯一的id,我用它来索引会话中的特定私有表单数据。

这不是100%的解决方案。将数据存储在会话中而不是表单中意味着过时的表单可以超时(即,如果会话被终止/超时),但是我认为这是一个值得折衷的价值。

答案 1 :(得分:0)

我不完全确定我理解这个问题。您是在尝试控制表单的呈现方式,还是试图弄清楚如何在表单中添加“敏感”数据?

首先,如果您担心在页面上呈现表单的哪些部分,else子句中的任何内容都只会在if子句中的条件不正确时呈现。 else不是“隐藏”表单的一部分。

其次,没有“安全”的客户端形式。一般来说,您无法控制向您的应用程序提交的数据,任何人都可以提交他们想要的任何POST或GET数据。相反,您必须通过适当过滤来在服务器端处理它,以确保用户具有执行他们正在尝试执行的操作的适当授权。听起来你需要用户在处理表单时识别为管理员(很可能是通过会话数据)。