1

Paypalから参照されたとしても、以下がすべてのトラフィックをページが見つからないページに送信する理由を理解できないようです。何か案は?

$refererUrl = $_SERVER['HTTP_REFERER'];
$Exploded = explode("/",$refererUrl);
$urlToCheck = $Exploded[3];
$findURL = strpos($urlToCheck,'paypal.com');
if($findURL === false){
    header('location:/page-not-found');
} else  {
/* Do something if page referred to by Paypal */
}
4

3 に答える 3

3

'paypal.com'にが存在するかどうかを確認してい$Exploded[3]ます。リファラーURLのその部分がホスト名であると期待するのはなぜですか?配列インデックスは0から始まるため、左から右に数えると次のようになり、2が正しいインデックスになることを示します。

$Exploded = explode('http://www.google.com/?q=foobar', '/');

// $Exploded now contains:
0: http:
1: 
2: www.google.com
3: ?q=foobar

ただし、任意のURLを解析し、解釈されたURLからホスト名を読み取るユーティリティを使用する方が安全です。あなたはこのようなことをすることができます(テストされていません):

$referer = parse_url($_SERVER['HTTP_REFERER']);
if($referer['host'] != 'paypal.com')
    header('location:/page-not-found');
else
    /* Do something if page referred to by Paypal */

parse_url doc:http ://php.net/manual/en/function.parse-url.php

于 2013-02-28T12:16:32.343 に答える
1

設定されていますかHTTP_REFERERドキュメントを見ると、

ユーザーエージェントを現在のページに参​​照させたページのアドレス(存在する場合)。これは、ユーザーエージェントによって設定されます。すべてのユーザーエージェントがこれを設定するわけではなく、HTTP_REFERERを機能として変更する機能を提供するものもあります。要するに、それは本当に信頼できるものではありません。

于 2013-02-28T12:14:02.297 に答える
0

それが正しいか?

$urlToCheck = $Exploded[3];

refferがhttp://www.example.com/のように見える場合、「/」で展開すると、3番目のインデックスでドメインを取得することはありません。2にする必要があります。

使ってみてください

$urlToCheck = $Exploded[2];
于 2013-02-28T12:15:08.543 に答える