2010-09-10 3 views
4
<script src="test.php"></script> 

Je veux que mon test.php soit exécuté uniquement s'il provient de <script>, est-ce possible?Est-il possible de vérifier si une demande est de <script> tag en PHP?

+0

duplication possible de [obtenir le referer du site Web qui demande votre fichier js] (http://stackoverflow.com/questions/3411474/get-referer-of-website-that-is-requesting-your-js-file – thomasrutter

+1

Pas exactement dupe, celui-ci est pour PHP alors que c'est pour JavaScript. – BoltClock

+0

En fait cette autre question n'est pas vraiment une copie exacte maintenant que je la regarde, mais cela peut aider. – thomasrutter

Répondre

8

Non, ce n'est pas possible. Stuff dans la balise <script> est simplement demandé en tant que pages normales et (AFAIK) aucun navigateur n'envoie d'en-têtes spéciaux ou tout ce qui pourrait vous aider (de manière fiable) à identifier qu'il provient d'un tag <script>. Peut-être que si vous expliquiez pourquoi vous voulez faire cela, nous pourrions peut-être trouver une meilleure solution?

Je vais aller de l'avant et vous avertir que si vous prévoyez d'utiliser ceci pour empêcher les gens de voir ou de copier votre code source JS, oubliez-le. Il n'y a tout simplement aucun moyen de le faire. Le code JS doit être disponible pour le navigateur, ce qui signifie qu'il sera également disponible pour l'utilisateur.

0

Que faire si "test.php? Source = script">?

Edit: Test de la solution referrer $_SERVER['HTTP_REFERER'] et $_SERVER['HTTP_USER_AGENT'] résultats ci-dessous

localhost/a.php appelle testjs.php

dans a.php (appelant) < script type = "text/javascript" src = "testjs.php"> </script>

dans testjs.php

document.writeln("<p><?php echo $referrer = $_SERVER['HTTP_REFERER'];?></p>"); 
//outputs http://localhost/a.php 

document.writeln("<p><?php echo $browser = $_SERVER['HTTP_USER_AGENT']?></p>"); 
// outputs //Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 

Ai-je manqué où il dit que c'est un appel du script src?

+3

Qu'est-ce qui empêche un utilisateur de taper cela dans la barre d'adresse? – NullUserException

2

Le navigateur envoie généralement un en-tête «Referer» (sic) pour les demandes de script contenant l'URL de la page contenant le lien de script, quelle que soit la manière dont cet élément de script a été créé.

Ceci est accessible en vérifiant la variable $ _SERVER ['HTTP_REFERER'] (notez l'orthographe inhabituelle) en PHP. L'idée est que vous pouvez vérifier cette variable et voir si elle fait référence à une partie de votre site.

Notez que cette variable n'est pas toujours précise; un utilisateur peut choisir de protéger sa vie privée en ne lui envoyant pas d'en-tête référent (en utilisant une sorte d'outil de confidentialité dinky) et il peut même modifier son navigateur pour envoyer ce qu'il veut dans ce champ. Il ne devrait donc pas être utilisé pour l'authentification, sauf si vous tenez également compte du fait que même un utilisateur légitime peut l'avoir laissé vide ou y avoir placé une chaîne arbitraire.

Questions connexes