2017-12-24 8 views
1

訪問者が特定のワードプレスのページから来た場合にのみ、ページへのアクセスを制限する必要があります。参照元ページに基づいてページへのアクセスを制限する

私はここから午前中に読んでいますが、私が見ているほとんどの回答は、偽装することができるため「ちょうど」参照者の使用を妨げています。

私はPHPのセキュリティと脆弱性についてよく分かりません。私の唯一の目的は、ページをブックマークしてそのページに直接アクセスするユーザーを「落胆させる」ことです。私は私たちのWordPressのウェブサイト上の訪問者を検証し、それらが認証されたときにだけページを指す必要があります。

現在のところ私がこれまでに出てきたのはこれです。

<?php 

$ref = $_SERVER['HTTP_REFERER']; 

$theOrigins = array(
'http://mysite.tld/?page_id=x1', 
'http://mysite.tld/?page_id=x2'); 

$validRef = false; 

if (in_array($ref, $theOrigins)) { 
$validRef = true; 
} 


if (isset($_GET['passkey']) && ($_GET['passkey'] == 'thePasskey') && $validRef) { 
?> 

<show html page> 

<?php 
} else { 
//echo 'You are not supposed to access this page directly'; 
header('HTTP/1.0 403 Forbidden'); 
exit('Forbidden'); 
} 
?> 

これは主に、私は、このページに

http://thisinterestsme.com/restricting-access-referrer/

をソリューションを追加することを計画。しかし、この記事によるとしています。この記事で答え

What is the best way to password protect folder/page using php without a db or username

に基づいています、

Passing PHP Session Value

WPがセッションに

を使用していない現在のWPのバージョンに適用されなくなっWPセッションを使用する方法については、この命令ですか?

https://silvermapleweb.com/using-the-php-session-in-wordpress/

私のオプションは何ですか?

おかげ

+0

私には間違っていません。あなたのサイトを閲覧するとどうなりますか? –

+0

セッションが認証されたときにセッションを設定し、参照元を確認する代わりにそのセッションをチェックするのはなぜですか?リファラーヘッダーは、プライバシー上の理由から一部のルーターがクリアするため、必ずしも設定されているわけではありません。誰かがそのようなルータを持っている場合、彼らは決してページにアクセスすることができません。 –

+0

@MatthiasMoritz何も間違っているわけではありませんが、私がここで見ているほとんどの回答は、偽装する可能性があるため、認証の形式として参照元を拒否しています。 – Wayne

答えて

0

Moin、

あなたは何をやろうとしていることは安全でない(HTTPヘッダーHTTP_REFERERを操作する可能性が)であることがわかっている場合、あなたは許可されたURLについてはあまり具体的であることを試みることができます。たぶん正しいホストを確認してください:

if(strpos($ref, 'mysite.tld') !== false && $_GET['passkey'] == 'thePasskey') 
{ ... } 
+0

OPはすでに完全なURL(ホスト名_と_クエリ文字列を含む)をチェックしているので、これが(ホスト名のみをチェックするだけで)より安全なのはなぜですか? –

+0

この提案の目的はより安全ではありません。 目的は、GETパラメータなしでリファラーを検証することです。 投稿コードの最初のifのin_array条件は、GETパラメータ 'passkey'を考慮しないため、2番目のifは決して真ではありません。 したがって、リファラーURLの検証時にあまり具体的でないことが最良です –

関連する問題