1

我有这样的东西(短版):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 表单数据并重定向回来的正确方法吗?问题是我的返回 url 可以是任何东西,但我希望用户被重定向到他们提交该表单的位置。

是否有一些我应该特别注意的安全问题?谢谢

4

3 回答 3

1

我会用这个:

索引.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']);
?>
于 2012-08-13T08:31:52.220 回答
0

在代码中的任何地方使用$_POST而不进行过滤都有可能导致不需要的行为;在您的情况下,您应该注意响应拆分攻击

好消息是,从 PHP 5.1.2 开始,不再可能在单个 header() 调用中不知不觉地设置多个标头。

也就是说,您仍然可以查看通常随 PHP 提供的各种输入过滤器FILTER_VALIDATE_URL- 例如.

于 2012-08-13T08:30:08.040 回答
0

我看不出有什么问题。黑客通过修改 POST 变量将一无所获。他只是在弄乱他自己将要获得的 HTTP 响应。由于请求是 POST,缓存服务器不会保存响应。响应拆分在这里不是潜在的攻击向量。

你在做什么是正确的。如果您要重定向 $_SESSION 变量而不是 $_POST,那么将会有多个漏洞。

于 2012-08-13T09:03:20.470 回答