我有这样的东西(短版): 的index.php:
<?PHP
echo "<form action='process_form.php?action=do_something' method='post'>";
echo "<input type='hidden' name='return_url' value='index.php?".$_SERVER['QUERY_STRING']."'>";
?>
现在在process_form.php我处理了那个表单,最后我把它放了:
<?PHP
$return_url = $_POST['return_url'];
header ("location: $return_url");
die();
?>
我的问题是 - 我做得对吗?是处理POST表单数据和重定向的正确方法吗?事情是,我的返回网址可以是任何内容,但我希望用户可以完全重定向到他们提交该表单的位置。
我是否应该特别注意一些安全问题? 感谢
答案 0 :(得分:1)
我会用这个:
<强>的index.php 强>
<form action="process_form.php" method="post">
<input type="hidden" name="action" value="do_something" />
<input type="submit" value="Submit" />
</form>
<强> process_form.php 强>
<?php
header('Location: ' . $_SERVER['HTTP_REFERER']);
?>
答案 1 :(得分:0)
在代码中的任何位置使用$_POST
而不进行过滤可能会导致不必要的行为;在您的情况下,您应该知道response splitting attacks。
好消息是,自PHP 5.1.2以来,不再可能在单个header()调用中无意中设置多个标头。
那就是说,您仍然可以查看通常附带PHP的各种input filters - 例如FILTER_VALIDATE_URL
。
答案 2 :(得分:0)
我没有看到任何问题。黑客通过修改POST变量不会获得任何好处。他只是在搞乱他自己会得到的HTTP响应。由于请求是POST,因此缓存服务器不会保存响应。响应分裂不是潜在的攻击向量。
你所做的是正确的。如果不是$ _POST,而是重定向$ _SESSION变量,那么就会有多个漏洞。