2012-02-13 22 views
0

これは、別のページから来た場合にリダイレクトするはずの小さなスクリプトですが、動作しません。 フォームページにリダイレクトされ続けます。有効な場合でもスクリプトリダイレクト

header('Location: ' . FORM); 
exit; 

はとにかくあなたがチェック考慮する必要があります。

は、ここで私はあなたにトラブルを引き起こしているものと仮定したコード

<?php 

define('FORM', 'form.html'); 
$referer = $_SERVER['HTTP_REFERER']; 

// this keeps redirecting even when I came by submiting the form to this page 
if ($referer != FORM) { 
    header('Location: ' .FORM); 
} 
?> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Testing 123</title> 
</head> 

<body> 
    <?php 
     $name = $_GET['name']; 
     $surname = $_GET['surname']; 
     echo 'hello'. $name. 'nice to see you here mr' .$surname; 
    ?> 
</body> 
</html> 
+1

'HTTP_REFERER' - >ユーザエージェントを現在のページに参​​照したページ(もしあれば)のアドレス。これはユーザエージェントによって設定されます。すべてのユーザーエージェントでこれを設定するわけではなく、HTTP_REFERERを機能として変更する機能もあります。要するに、それは本当に信頼できるものではありません。 http://php.net/manual/en/reserved.variables.server.php – mack

+2

'echo $ _SERVER ['HTTP_REFERER']; exit; ' –

+0

@yi_hありがとうございますが、あなたのヒントはあまり意味がありません –

答えて

1

だ、あなたはヘッダを()を呼び出した後、スクリプトを終了していないということですreferrer-infoの送信がユーザーのブラウザで無効になる可能性があるため、$_SERVER['HTTP_REFERER']に頼るのではなく、必要なパラメータを指定する必要があります。

isset($_GET['name']) : $name = $_GET['name'] ? $name = null; 
isset($_GET['surname']) : $surname = $_GET['surname'] ? $surname = null; 

if (empty($name) || empty($surname)) { 
    header('Location: ' . FORM); 
    exit; 
} 

また、あなたはそれを出力する前$_GET['name']$_GET['surname']をエスケープする必要があります!

1

特定の$ _POST変数が送信されたかどうかをチェックすることによって、ユーザーが「フォームページ」から来たものかどうかをテストできます。たとえば、あなたが

if(isset($_POST['somehiddenvalue']) && $_POST['somehiddenvalue'] == $hiddenVal) { 
    // ok. 
} else { 
    // redirect 
} 

ような何かを試みることができるユーザーはこれを覚えておく、ポスト変数を操作することができるようになります。

+0

あなたのヒントをありがとう。私はちょうど私のウェブサイトからフォームが実際に提出されたことを確認したかったのです。誰かがページを作り、スクリプトに投稿しようとしていませんでした。 –

+0

検証にHTTP_REFERERを使用するのは最良の選択肢ではありません。この回答は公正な行動を提供します。良いセキュリティのために、あなたは次のようなものを使うことができます:$ someHiddenValue = sha1( 'securityToken'); if(isset($ _ POST ['somehiddenvalue'])&& $ _POST ['somehiddenvalue'] === sha1( 'securityToken')){//フォームが送信されました} –

関連する問題