2011-11-20 8 views
2

PHPでブラウザが(人間によって)実行されたことを確認する方法があるかどうか疑問に思っていました。ページがブラウザで表示されているかどうかを確認しますか? PHP

私はcURLリクエストによってアクセスする必要があるページを持っています。だから、私はユーザーがその上を詮索するのを望んでいない。

おかげ

EDIT:

これは簡単にウェブ上で発見されていないこれらの質問の1つであるため、ここで私が使用した溶液だ:

私はアイデアのおかげで思い付いanthony-arnoldに。それほど安定していませんが、今のところそれが必要です。

私は単に私のcURLの要求でユーザエージェント送ら:

//made a new var with the user agent string. 
$user_agent = "anything I want in here, which will be my user agent"; 

//added this line in the cURL request to send the useragent to the target page: 
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 

をして、私は単にそれを処理するためのif文を書いた:

if 
($_SERVER['HTTP_USER_AGENT'] == "my expected useragent - the string i previously placed into the $user_agent var."){ 

echo "the useragent is as expected, do whatever"; 
} 

else if 
($_SERVER['HTTP_USER_AGENT'] != "my expected useragent - the string i previously placed into the $user_agent var."){ 

echo "useragent is not as expected, bye now."; exit();} 

そして、それはトリックをしました。

+0

あなたはcURLリクエストで特殊変数を送ることができます – Sedz

+0

人間がコマンドラインで 'curl 'を使用するとどうなりますか? :-O – deceze

+0

それは問題ありませんが、誰かが本当にカール以外の何かを使ってアクセスしようとしているのなら、そうすることができます。 – Anthony

答えて

4

User-Agentを確認するか、get browser functionを使用してページをリクエストしているブラウザを確認してください。特定のユーザーエージェントが指定されていない限り、Webサーバーが失敗するように構成できます。 --user-agentスイッチ(man pageを参照)を使用して、cURLでユーザエージェントを設定できます。

残念ながら、ユーザーエージェントはスプーフィングされる可能性があるため、クライアントから送信されたものが実際に正しいかどうかは絶対に確信できません。

しかし、このアイデアには問題があります。それが公開ウェブ上にある場合、あなたは人々が何らかの方法でそれにアクセスしようとするかもしれないと期待する必要があります! HTTP要求が有効な場合、サーバーはそれに応答します(デフォルト構成で)。 の場合には、指定したcURL以外の方法でアクセスしたくない場合は、さらに認証/承認の方法(例:SSLによるユーザー名/パスフレーズ認証)に投資する必要があります。

+0

ちょうどgetブラウザ機能を見ました。ページがブラウザで表示されなかった場合に何が返されるか考えていますか? {$ _SERVER ['HTTP_USER_AGENT'] == "ブラウザ情報を取得できなかったときに返されるものは何でも" else {//何もしない} あなたはそのことを考えると思いますか?働くことができますか? –

+1

うん、 '$ _SERVER ['HTTP_USER_AGENT']'は動作します。あなたが期待しているユーザエージェントに対してそれをチェックするだけです。あなたは 'get_browser'関数を無視することができます。 – Anthony

+0

素晴らしいです。そのxDをありがとう –

関連する問題