empecher un fichier php de s'executer...

empecher un fichier php de s'executer... - PHP - Programmation

Marsh Posté le 21-06-2004 à 01:57:31    

hello
 
je suis entrain de protéger un code et j'aimerais empecher son execution si on le lance directement à partir de d'une url
 
ex: http://www.toto.com/monscript.php?var=1
 
Je veux que ce soit executable uniquement dans ce style par ex:
 
<script language="JavaScript" src="http://www.toto.com/monscript.php?var=1"></script>
 
qq'un a une idée ? ma solution est une usine à gaz  :fou:   :lol:  

Reply

Marsh Posté le 21-06-2004 à 01:57:31   

Reply

Marsh Posté le 21-06-2004 à 08:03:13    

Tu as penssé aux .htacces ?

Reply

Marsh Posté le 21-06-2004 à 08:50:52    

pas con, mais j'ai jamais vraiment utilisé ce fichier :)


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 21-06-2004 à 08:58:05    

il bloque pas carrément l'accès au répertoire ? c'est juste le fichier que je veux bloquer...
(tu me diras, mets le tout seul dans une répertoire...à
mais uniquement si on l'appelle par l'URL complète
 
 
edit: voila réellement ce dont je veux parler:
dans un fichier html j'ai ça:

Code :
  1. <html>
  2. <head>
  3. <title>Document sans titre</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5. </head>
  6. <body>
  7. <script language="JavaScript" src="http://ad.mondomaine.com/showad.php?clid=NDk1LTc5Mg=="></script>
  8. </body>
  9. </html>


 
je veux pas que des gugus entrent ça directement dans une url:
http://ad.mondomaine.com/showad.php?clid=NDk1LTc5Mg==
 
pour lancer le script  :jap:


Message édité par dapp le 21-06-2004 à 09:04:36

---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 21-06-2004 à 09:05:16    

htaccess peut faire cela, et de façon sûre. contrairement au javascript qui ne protegera absolument rien


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-06-2004 à 09:27:43    

en partant sur les bases du hotlink par exemple ?


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 21-06-2004 à 09:28:57    

pas compris. répétez, répondez


Message édité par jagstang le 21-06-2004 à 09:29:12

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-06-2004 à 09:50:54    

je disais qu'avec le htaccess pouvait empecher par exemple les hotlinks sur tes images, en faisant de l'url rewriting...
je ne sais pas ce que ça va donner avec du des fichiers php...


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 21-06-2004 à 10:10:12    

 Avec une session non ?
 
  Tu crée un session avec une variable de contrôle dans le fichier où tu a ton Java Script et tu vérifie l'existance ou la valeur de cette variable dans ta page http://www.toto.com/monscript.php?var=1. Si la variable existe ou qu'elle contient la valeur souhaité, alors c Ok tu laisse se lancer ta page sinon tu fais un redirection avec le header ou en Java Script window.location.replace
 
  J'espère t'avoir aidé !  

Reply

Marsh Posté le 21-06-2004 à 10:18:38    

tu mets une variable de vérification en POST ?

Reply

Marsh Posté le 21-06-2004 à 10:18:38   

Reply

Marsh Posté le 21-06-2004 à 10:25:43    

Dr Raf a écrit :

tu mets une variable de vérification en POST ?


 
  Non, non dans ta session  
 
  // -- Dans le fichier qui contient ton JS :  
 
 

Code :
  1. session_start();
  2.   session_register("passe" );
  3.   $passe = "ok";


 
   
 

Reply

Marsh Posté le 21-06-2004 à 10:29:31    

c le meme principe :D (en mieux ok ok...)


Message édité par Dr Raf le 21-06-2004 à 10:30:20
Reply

Marsh Posté le 21-06-2004 à 14:05:41    

avec la session c'est pas bon, j'y ai déjà pensé:
je n'ai pas forcément accès à la page qui contient le javascript. Et puis elle peut etre en html.
je sais juste qu'elle contient ça:
 

Code :
  1. <script language="JavaScript" src="http://ad.mondomaine.com/showad.php?clid=NDk1LTc5Mg=="></script>


 
et je veux empecher l'execution directe du fichier showad.php
--
 
j'avance les détails: voici à quoi ça va servir: une régie publicitaire.
 
le fichier showad.php?clid=numeroclient identifie l'affilié et affiche la bannière correspondante.
 
seulement, ils ne devront pas s'amuser à le lancer directement pour obtenir la bannière, il faut que le script soit lancé uniquement  DANS une page déjà existante.
 
---
 
le problème de la session est que si je la met dans mon fichier showad.php,  elle sera forcément déjà chargée et le test est toujours vrai
 
 
---
 
à moins que je peux faire 2 scripts:
un 1er <script></script> qui va initialiser la variable
un 2e qui va contenir <script src = "...php"></script>
 
>> comment récupérer en php la variable qui a été initialisée dans le 1er script ?


Message édité par dapp le 21-06-2004 à 14:07:42

---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 21-06-2004 à 14:15:22    

le mieux c'est de mettre le fichier dans un repertoire protégé en htaccess.
 
et d'appeler une fonction dans ce rép. / fichier via des include.
 
DENY FROM ALL
ALLOW localhost
 
comme ça seul le serveur lui-même aura accès au fichier.
 
oublie les combines en JS <script> et compagnie. c'est pas secure du tout


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-06-2004 à 14:16:27    

et un contrôle avec $_SERVER['HTTP_REFERER'] te donne l'adresse de la page qui appèle le script. Tu peux donc vérifier que le serveur en question fait partie des clients.
 
Par contre je ne vois pas le problème de personnes qui l'éxécutent à la main. Pour de la pub, cela fait des visualiations en plus. C'est le but non ?

Reply

Marsh Posté le 21-06-2004 à 14:16:52    

moi je fais comme ça pour la chaine de connection BD. comme ça, même si le démon apache tombe, le fichier non interprété (source) ne sera pas envoyé au navigateur puisqu'htaccess agut au niveau de l'OS et non de PHP


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-06-2004 à 14:18:26    

JagStang a écrit :

moi je fais comme ça pour la chaine de connection BD. comme ça, même si le démon apache tombe, le fichier non interprété (source) ne sera pas envoyé au navigateur puisqu'htaccess agut au niveau de l'OS et non de PHP


Non le htaccess agit au niveau Apache et non pas de l'OS. Sans Apache, un htaccess seul ne sert à rien. De plus c'est indépendant de l'OS car le fonctionnement est identique sous Windows, Linux, ...
Si le serveur tombe, rien n'est envoyé puisque apache ne répond pas.


Message édité par T509 le 21-06-2004 à 14:21:12
Reply

Marsh Posté le 21-06-2004 à 14:52:17    

T509 a écrit :

et un contrôle avec $_SERVER['HTTP_REFERER'] te donne l'adresse de la page qui appèle le script. Tu peux donc vérifier que le serveur en question fait partie des clients.
 
Par contre je ne vois pas le problème de personnes qui l'éxécutent à la main. Pour de la pub, cela fait des visualiations en plus. C'est le but non ?

+1
C'est la seule méthode que je vois compte tenu de ta problématique de script public.

Reply

Marsh Posté le 21-06-2004 à 17:03:18    

j'ai essayé aussi $_SERVER['HTTP_REFERER'] mais elle ne semble pas définit par la page qui charge la javascript.
 
t509 -> ça fait de l'affichage oui, mais je dois le parser différement parce que le php génère du javascript (du style document.write) car elle est faite pour être appelée dans un javascript src ="...".
 
Mais pour le site affilié, si il l'execute à la main, ça génère de l'affichage, donc des revenus pour lui...
donc trouver parade.


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 21-06-2004 à 17:05:20    

javascript c'est comme si tu tappais l'adresse en DUR dans la barre d'url...


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-06-2004 à 17:05:56    

pour preuve... tape ceci dans ta barre d'adresse
 
 
javascript:alert('coucou')


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-06-2004 à 17:45:12    

ah merde alors...
 
bloqué de chez bloqué  :fou:  
 
mais j'ai une autre piste:
 
avec javascript on peut avoir ça:
 
<script langage = 'javascript'>mapage = document.href</Script>
 
ou un truc commme ça pour avoir l'url de la page courante...
 
alors dans mon script php
 
avant toute chose je teste:  
"si document.href contient showad.php" alors "gueule"
 
le problème: js coté client, php coté serveur...  :(  
 
 


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 21-06-2004 à 17:46:55    

JagStang a écrit :

le mieux c'est de mettre le fichier dans un repertoire protégé en htaccess.
 
et d'appeler une fonction dans ce rép. / fichier via des include.
 
DENY FROM ALL
ALLOW localhost
 
comme ça seul le serveur lui-même aura accès au fichier.
 
oublie les combines en JS <script> et compagnie. c'est pas secure du tout


 
 
mais même, là ça va tout bloquer: les pages contenant le script ne pourront pas s'afficher non plus...  :whistle:


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 21-06-2004 à 22:05:35    

j'ai une autre pite: comment récupérer l'url en cours en php ?

Reply

Marsh Posté le 21-06-2004 à 22:34:26    

avec les données du tableau super-global $_SERVER

Reply

Marsh Posté le 21-06-2004 à 22:51:48    

non plus, $_SERVER['server_name'] entre autre récupère le nom de domaine du serveur QUI EXECUTE LE SCRIPT,
 
autrement dit peut importe que tu le lances à la main ou que tu le mettes dans un javascript, l'environnement de retour est celui qui héberge le php
 
j'ai trouvé une pseudo solution:
 

Code :
  1. <script language="JavaScript">
  2. var clid="MTExLTExMQ==";
  3. var site=document.location.href;
  4. var showad="http://ad.mondomaine.com/showad.php?clid=";
  5.     document.write('<script language="JavaScript1.1"' +
  6.                    ' src=' + showad + clid + '&from=' + site +
  7.                    '></script>');
  8. </script>


 
en gros, je génère en JS le numéro client dans une variable et le site en cours dans une autre.
puis toujours en JS, je génère l'url d'appel au php qui est donc dynamique, avec des ?clid=xxx&from=yyy
 
je peux traiter ces variables coté php avec $_GET et faire mon traitement.
 
suite > le php génère du JS à partir des paramètres JS en entrée.
 
voilà comment faire du JS>PHP>JS  :D  
 
next step:
comment parser http://www.domaineduclient.com/repertoire/index.html > pour n'avoir que http://www.domaineduclient.com  :sarcastic:

Reply

Marsh Posté le 21-06-2004 à 23:27:05    

Sauf qu'il suffit de relire ton script JS et re composer les variables pour les écrires à la main.

Reply

Marsh Posté le 22-06-2004 à 08:36:12    

c'est vrai, mais il n'y a pas de véritable solution.
faut embrouiller à max le malin qui va le relire, mettre des variables partout dans tous les sens, des chaines avec des md5 par exemple, des randoms, des timestamps...
 
sinon je ne vois pas.
 


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 22-06-2004 à 09:09:34    

dapp a écrit :

c'est vrai, mais il n'y a pas de véritable solution.
faut embrouiller à max le malin qui va le relire, mettre des variables partout dans tous les sens, des chaines avec des md5 par exemple, des randoms, des timestamps...
 
sinon je ne vois pas.

Ce que fais le javascript, étant donné que c'est côté client, c'est reproductible [:spamafote]

Reply

Marsh Posté le 22-06-2004 à 09:17:21    

il y a bien un moyen ! bordel  :fou:  
 
j'essaie un truc:
je génère coté client des random() dans une variable,
puis les variables nécessaire,
je fais des md5,
lors de l'appel au php, je passe tout ça en parametre
coté serveur je teste:
> si dans l'url d'appel (document.location.href) je retrouve mon script php, je gueule.
> pour les md5, je tape dans une base de donnée la cohérence (un peu comme les password)
idem pour les random, je génère coté serveur, si le décalage est trop important, je gueule aussi
 


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 22-06-2004 à 09:26:48    

1 JS qui récupère un code généré sur ton serveur.
 
1 autre récupère ta bannière avec l'id client modifié et le code récupéré.
 
La génération de code peut par exemple avoir recours aux timestamp() multiplié par un nombre de ton choix auquel tu ajoutes un autre nombre et tu modifies le résultat en changeant de base de calcul. (alphanumérique ou alphabétique par exemple)
 
Normalement, le process total prend moins de 10 secondes. Si le timestamp récupéré est inférieur de plus de 15 secondes au timestamp en cours, tu ne comptabilise pas l'affichage mais tu affiches la bannière (c'est mieux pour toi et ton annonceur)

Reply

Marsh Posté le 22-06-2004 à 12:04:54    

déjà pensé: il suffit d'une petite congestion du réseau pour tout rater :_/


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 22-06-2004 à 12:22:05    

Tu tournes en rond là

Reply

Marsh Posté le 22-06-2004 à 13:20:24    

:)  j'ai trouvé la solution, tests ok:
 
la page html est composée de 3 scripts <JS>
- la première crée des variables statiques (numéro affilié par exemple)
- la 2e appelle un script php en passant la 1ere variable en parametre
> ce 1er php va générer des variables JS à valeur codée  
> le dernier script JS récupère les précédente variables JS générées par le php au dessus et appelle le générateur de bannière en passant toujours les variables en paramètres.
 
 
quel est l'intérêt de passer par du php pour générer des variables et ne pas les mettre directement dans le 1er script JS ?  :D  
 
> pour qu'à la lecture, il soit impossible de prédire le contenu des variables générées puisqu'elles ne sont pas en ecrites en "dur" dans le JS mais générées à la volée.  :jap:


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 22-06-2004 à 13:34:03    

dapp a écrit :

:)  j'ai trouvé la solution, tests ok:
 
la page html est composée de 3 scripts <JS>
- la première crée des variables statiques (numéro affilié par exemple)
- la 2e appelle un script php en passant la 1ere variable en parametre
> ce 1er php va générer des variables JS à valeur codée  
> le dernier script JS récupère les précédente variables JS générées par le php au dessus et appelle le générateur de bannière en passant toujours les variables en paramètres.
 
 
quel est l'intérêt de passer par du php pour générer des variables et ne pas les mettre directement dans le 1er script JS ?  :D  
 
> pour qu'à la lecture, il soit impossible de prédire le contenu des variables générées puisqu'elles ne sont pas en ecrites en "dur" dans le JS mais générées à la volée.  :jap:

Je pense que ça ne marche pas au niveau de la sécurité car qu'est-ce qui empeche quelqu'un de faire manuellement ce que fait le navigateur avec ses 3 requêtes ?

Reply

Marsh Posté le 22-06-2004 à 14:09:40    

Pour jouer le diable, que se passe t il si javascript est désactivé ?
 
Autre solution :
1- tu crées un script PHP hébergé chez toi qui délivre une clé de codage "aléatoire"
2- tu crées un autre script php qui est hébergé chez ton client qui récupère la clé de codage et crypte le numéro de client à la "volée". Ce même script récupère les données de la bannière à afficher et génère le HTML correspondant pour le client.
3- un script php qui gère la requête d'affichage des bannières (pour que l'affichage soit obligatoire) avec de l'url rewriting (par exemple le lien html généré est de la forme -http://ton-serveur.com/cle_validation/id_client/id_pub/image.jpg
qui renvoie vers /dossier/script_affichage.php?cle=cle_validation&id_c=id_client&id_p=id_pub)
ce script envoi directement le contenu de l'image que tu souhaite.
 
Avantage : tu possède une clé de cryptage confidentielle
Les connexion sont gérées à partir du serveur de ton client donc tu peux vérifier $_SERVER['HTTP_REFERER']. S'il n'est pas OK, tu refuses l'incrémentation du compteur client.
 
Tu peux vérifier la cohérence des données des compteurs client à partir des stats de fréquentation de leur site
 
c'est indépendant de l'utilisation du javascript ou non.
 
Tu protège doublement ton système.
 
Pour les 2 premiers scripts, il faut regarder la fonction fsockopen()


Message édité par T509 le 22-06-2004 à 14:10:37
Reply

Marsh Posté le 22-06-2004 à 14:14:24    

la seule façon de le faire c'est de mettre les 3 scripts à la suite.
si tu lances uniquement un des scripts, ça ne marche pas.
idem si tu appelle directement le fichier php puisqu'elle ne reçoit pas les paramètres qui lui sont envoyés par le script précédent.
 
et comme c'est du php qui génère des variables
> tu ne connais pas les valeurs donc tu ne peux pas l'executer en direct
 


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 22-06-2004 à 14:17:15    

ma question serait plutot: peut'on lancer ça directement dans l'url ?
 

Code :
  1. <script type="text/javascript">var client='123456';</script>
  2. <script type="text/javascript" src="ad.mondomaine.com/salt.php"></script>
  3. <script type="text/javascript" src="ad.mondomaine.com/showad.js"></script>


 
avec showad.js:

Code :
  1. function adstring(param,value) {
  2. showad += param + "=" + value + "&";
  3. }
  4. adstring('salt',salt);
  5. adstring('clid',clid);
  6. document.write("<script language ='JavaScript' src='" + showad + "'></script>" );


 
la variable s'appelle bien showad, mais tu ne connais pas la valeur qui est générée par le fichier salt.php
et même si tu la connaissais, tu ne peux pas prédire ce que le prochain affichage va générer comme valeur, elle n'est pas fixe.


---------------
Marre des reflex - je passe au M !
Reply

Marsh Posté le 22-06-2004 à 14:26:05    

dapp a écrit :

la seule façon de le faire c'est de mettre les 3 scripts à la suite.
si tu lances uniquement un des scripts, ça ne marche pas.
idem si tu appelle directement le fichier php puisqu'elle ne reçoit pas les paramètres qui lui sont envoyés par le script précédent.
 
et comme c'est du php qui génère des variables
> tu ne connais pas les valeurs donc tu ne peux pas l'executer en direct


 
Les scripts JS sont downloadés sur la machine client. Il est donc possible d'aller chercher les sources et de tout mettre dans un seul fichier qui effectue tes 3 actions à la suite.
 
je ne suis pas sûr que cela fonctionne : <script type="text/javascript" src="ad.mondomaine.com/salt.php"></script>
 
la solution JS n'est pas fiable a mon sens.
 
Ma méthode précédente possède l'avantage de répartir les requêtes sur 2 machines différentes : le serveur de ton client et la machine du visiteur. C'est donc plus difficile de zapper la sécu

Reply

Marsh Posté le 22-06-2004 à 14:43:22    

T509 a écrit :

la solution JS n'est pas fiable a mon sens.


c'est ce que j'essaie de dire depuis le début mais personne m'écoute [:jagstang]


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed