我有这段代码:
<? 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(原创)。
由于
答案 0 :(得分:0)
这总是一个有趣的问题。
我建议将私有数据存储在用户$ _SESSION中,并使用表单+页面调用唯一的索引。我刚刚在工作中遇到了类似的问题,我开始通过隐藏的表单字段传递过多的私有数据。现在我只传递一个唯一的id,我用它来索引会话中的特定私有表单数据。
这不是100%的解决方案。将数据存储在会话中而不是表单中意味着过时的表单可以超时(即,如果会话被终止/超时),但是我认为这是一个值得折衷的价值。
答案 1 :(得分:0)
我不完全确定我理解这个问题。您是在尝试控制表单的呈现方式,还是试图弄清楚如何在表单中添加“敏感”数据?
首先,如果您担心在页面上呈现表单的哪些部分,else
子句中的任何内容都只会在if
子句中的条件不正确时呈现。 else
不是“隐藏”表单的一部分。
其次,没有“安全”的客户端形式。一般来说,您无法控制向您的应用程序提交的数据,任何人都可以提交他们想要的任何POST或GET数据。相反,您必须通过适当过滤来在服务器端处理它,以确保用户具有执行他们正在尝试执行的操作的适当授权。听起来你需要用户在处理表单时识别为管理员(很可能是通过会话数据)。