2011-11-20 9 views
2

Je me demandais s'il y a un moyen de vérifier qu'une page a été exécutée dans un navigateur (par un humain) en PHP.vérifier si la page est affichée dans le navigateur? PHP

J'ai une page qui doit seulement être accédée par une demande de cURL. Donc je ne veux pas que les utilisateurs fouillent dessus.

des idées?

grâce

EDIT:

Parce que c'est l'une de ces questions qui ne sont pas faciles à trouver sur le web, voici la solution i utilisé:

je suis venu avec une grâce idée à Anthony-Arnold. Ce n'est pas très stable, mais ça devrait l'être pour le moment.

J'ai simplement envoyé l'agent utilisateur dans ma demande 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); 

et je simplement écrit une instruction if pour y faire face:

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();} 

Et qui a fait l'affaire.

+0

Vous pouvez envoyer une variable spéciale avec la requête cURL – Sedz

+0

Que faire si un humain utilise curl sur la ligne de commande? : -O – deceze

+0

C'est bien, mais si quelqu'un veut vraiment avoir accès en utilisant autre chose que curl, ils le peuvent. – Anthony

Répondre

4

Cochez la case User-Agent ou utilisez le get browser function pour vérifier quel navigateur demande votre page. Vous pouvez configurer l'échec de votre serveur Web, sauf si un agent utilisateur spécifique est spécifié. Vous pouvez définir l'agent utilisateur dans cURL à l'aide du commutateur --user-agent (voir man page).

Malheureusement, l'agent utilisateur peut être usurpé de sorte que vous ne pouvez jamais être absolument sûr que celui envoyé par le client est correct.

Il y a cependant un problème avec cette idée. Si c'est sur le web public, vous devez vous attendre à ce que les gens essaient d'y accéder de quelque façon que ce soit! Si la requête HTTP est valide, votre serveur y répondra (sous la configuration par défaut). Si vous ne voulez pas qu'il soit accédé par une méthode autre que votre cURL prescrite, vous devrez peut-être investir dans d'autres méthodes d'authentification/d'autorisation (par exemple, l'authentification par nom d'utilisateur/mot de passe SSL).

+0

Juste jeté un coup d'oeil à la fonction de navigateur get. Avez-vous une idée de ce qui serait renvoyé si la page n'était pas affichée dans un navigateur? Je pensais si je pouvais juste faire si ($ _SERVER ['HTTP_USER_AGENT'] == "tout ce qui est retourné quand j'obtiens des informations sur le navigateur") {// faire quelque chose} else {// ne fais rien} Pensez-vous que pourrait travailler? –

+1

Ouais '$ _SERVER ['HTTP_USER_AGENT']' fonctionnerait. Vérifiez-le par rapport à l'agent utilisateur attendu. Vous pourriez ignorer la fonction 'get_browser'. – Anthony

+0

Génial. Merci pour ce xD –

Questions connexes