我有这样的代码:
<? 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 { ?>
<? } ?>
我需要一个更安全的解决方案来隐藏表单,因为目前使用此代码时,我按下提交(作为管理员),它告诉我必须输入书面消息的值。我可以使用ELSE位下面的隐藏表单来绕过它-但是有任何知识的人可以使用Inspect元素或Firebug来绕过它,然后发布该值。
我需要一个更安全的解决方案,这样人们就不能编辑隐藏的表单。我是否以某种方式将旧的变量发布到表单?
它用于PunBB页面(edit.php):http://punbb.informer.com/svn/punbb/tags/punbb-1.3.3/edit.php (原始)。
谢谢
发布于 2010-12-10 02:47:55
这始终是一个有趣的问题。
我建议使用表单+页面调用所特有的索引将私有数据存储在用户$_SESSION中。我刚刚在工作中遇到了一个类似的问题,我开始通过隐藏的表单字段传递太多的私有数据。现在,我简单地传递一个惟一的id,我使用它来索引会话中特定的私有表单数据。
这不是一个100%的解决方案。将数据存储在会话中,而不是存储在表单中,这意味着过时的表单可能会超时(例如,如果会话被终止/超时),但我认为这是值得的。
发布于 2010-12-10 02:52:52
我不完全确定我是否理解了这个问题。你是想控制表单的呈现方式,还是想弄清楚如何在表单中添加“敏感”数据?
首先,如果您担心在页面上呈现表单的哪些部分,那么只有在if子句中的条件不为真的情况下,才会呈现else子句中的所有内容。else并没有“隐藏”表单的一部分。
其次,没有“安全”客户端表单这回事。一般来说,您无法控制将哪些数据提交到您的应用程序,任何人都可以提交任何帖子或获取他们想要的数据。相反,您必须在服务器端通过适当的过滤来处理它,以确保用户有适当的授权来执行他们试图执行的操作。听起来您需要在处理表单时要求用户标识为管理员(很可能是通过会话数据)。
https://stackoverflow.com/questions/4401827
复制相似问题