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

私はこれを使用します:

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']);
?>
于 2012-08-13T08:31:52.220 に答える
0

問題はありません。ハッカーは、POST 変数をいじっても何も得られません。彼は、自分が取得しようとしている HTTP 応答をいじっているだけです。リクエストは POST であるため、キャッシュ サーバーはレスポンスを保存しません。ここでは、応答分割は潜在的な攻撃ベクトルではありません。

あなたのしていることは正しいです。$_POST の代わりに $_SESSION 変数からリダイレクトする場合、複数の脆弱性が存在します。

于 2012-08-13T09:03:20.470 に答える
0

$_POSTフィルタリングせずにコード内の任意の場所で使用すると、望ましくない動作が発生する可能性があります。あなたの場合、応答分割攻撃に注意する必要があります。

幸いなことに、PHP 5.1.2 以降、無意識のうちに単一の header() 呼び出しで複数のヘッダーを設定することはできなくなりました。

とはいえ、通常は PHP に同梱されているさまざまな入力フィルターをチェックアウトすることもできますFILTER_VALIDATE_URL

于 2012-08-13T08:30:08.040 に答える