Donc, j'ai besoin de vérifier le référent sur une page à l'aide de PHP, et s'il est * .Example.com, ou * .anoftite.com, exécutez le code, mais sinon, rediriger ailleurs. P>
Comment irai vérifier si le http_reger est égal à ces valeurs, avec un caractère générique? P>
Merci! P>
Edit: L'URL contiendra plus d'un domaine. La regex doit donc correspondre à la première occurrence trouvée. P>
5 Réponses :
Essayez ceci:
if (preg_match('/\.example\.(com|org)/', $_SERVER['HTTP_REFERER']))
{
// execute your code
}
else
{
header("Location: http://example.com/redirectpage.htm");
exit();
}
$ref = $_SERVER['HTTP_REFERER'];
if (strpos($ref, 'example.com') !== FALSE) {
redirect to wherever example.com people should go
}
if (strpos($ref, 'example.org') !== FALSE) {
redirect to wherever example.org people should go
}
Of course, this only works if the referer is "nice". For instance, coming from google you could possibly have "example.org" in the search term somewhere, in which case strpos would see it, and redirect, even though you came from google.
Et si l'hôte autorisé est iana.org code> et que le référeur est www.iana.org.nyud.net code>? (domaine réel) b>
La vérification des référateurs est rarement fiable, car c'est quelque chose qui est complètement sous le contrôle de l'utilisateur.
Et si l'adresse de la page de l'attaquant est http :: //evil-atacker.org/example.com / ... code>
Ceci ne correspondra qu'une adresse qui possède un sous-domaine, et il ne continuera pas à ne rien chercher à chercher quoi que ce soit au-delà de correction - cela correspondra à Preg_Match ('/ (. +?) \. Exemple \. (COM | ORG) /', $ _ Server ['http_referer']) CODE> P>
sous-domaines.example.com code> ou .org code>. I.e. sous-domaine.example.com/some-OTTher-Stuff code>. Avez-vous besoin de correspondre également à ceux-ci? P>
www.example.com code> mais ne correspondra pas exemple.com code>. p>.
devrait le faire:
Autres réponses Les «chèques» sont bons mais ne sont pas strictement liés à votre site Web. Donc, par exemple, référenant avec valeur Il existe une méthode fiable et sécurisée pour vérifier si le référateur est vraiment em> strud> votre domaine . Bien sûr, le référenant peut être utilisé, mais une victime d'un site d'attaquant enverra un référent correct. P> Le truc est dans http://attacker.com/www.example.com/ code> passera presque tous les chèques. Et il est très facile de faire un tel site et d'envoyer une demande croisée croisée. ^ code> caractère spécial. Voici la regex magique: p> ^ code> - garantit que nous sommes au début
https? Code> - Protocole - HTTP ou HTTPS
(([A-Z0-9 -] +) \.) * code> - correspond à des sous-domaines, également de niveaux plus élevés, s'il est de
Exemple \ .com code> - correspond à un domaine principal
/ code> - assure le démarrage du chemin afin que le nom de domaine ne puisse pas continuer p> p>
Si vous souhaitez soit http ou https, il devrait être http? Code>;)
@Alekwisnia no ... point d'interrogation signifie que le caractère avant d'avoir lieu à max une fois (il peut donc être aussi 0 fois). Donc https? Code> correspondances http code> et https code> et votre exemple correspondent httt code> et http code> http code> http code> http code> http code>
Étant donné que le référent peut être spoofé ou complètement omis, cela devrait être la réponse n ° 1 comme chaque petit bit aide. (La seule chose que j'ajouterais est l'utilisation de $ _Server ['nom_serveur'] au lieu de coder du disque dur du nom de domaine.)
Je viens de revenir à cela une décennie (!) Plus tard, la méthode la plus sécurisée est définitivement la bonne réponse!
Sachez que si vous ne pouvez contrôler les navigateurs accéder à ce script, vous ne pouvez pas compter beaucoup sur http_referrer. Il sera souvent vide, tel que si redirigé à partir d'un site SSL, ou si l'utilisateur définit les paramètres de sécurité du navigateur pour empêcher l'envoi du http_referrer.
Ouais, je n'ai pas besoin de m'appuyer fortement, c'est une vérification supplémentaire.