Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1708 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  empecher un fichier php de s'executer...

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Précédente
Auteur Sujet :

empecher un fichier php de s'executer...

n°770726
dapp
papango
Posté le 21-06-2004 à 01:57:31  profilanswer
 

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:  

mood
Publicité
Posté le 21-06-2004 à 01:57:31  profilanswer
 

n°770782
esox_ch
Posté le 21-06-2004 à 08:03:13  profilanswer
 

Tu as penssé aux .htacces ?

n°770822
dapp
papango
Posté le 21-06-2004 à 08:50:52  profilanswer
 

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


---------------
Marre des reflex - je passe au M !
n°770832
dapp
papango
Posté le 21-06-2004 à 08:58:05  profilanswer
 

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 !
n°770841
jagstang
Pa Capona ಠ_ಠ
Posté le 21-06-2004 à 09:05:16  profilanswer
 

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?  
n°770864
dapp
papango
Posté le 21-06-2004 à 09:27:43  profilanswer
 

en partant sur les bases du hotlink par exemple ?


---------------
Marre des reflex - je passe au M !
n°770868
jagstang
Pa Capona ಠ_ಠ
Posté le 21-06-2004 à 09:28:57  profilanswer
 

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?  
n°770890
dapp
papango
Posté le 21-06-2004 à 09:50:54  profilanswer
 

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 !
n°770913
the_white_​rabbit
Follow the white rabbit !
Posté le 21-06-2004 à 10:10:12  profilanswer
 

 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é !  

n°770926
Dr Raf
Roaccutane® powered
Posté le 21-06-2004 à 10:18:38  profilanswer
 

tu mets une variable de vérification en POST ?

mood
Publicité
Posté le 21-06-2004 à 10:18:38  profilanswer
 

n°770938
the_white_​rabbit
Follow the white rabbit !
Posté le 21-06-2004 à 10:25:43  profilanswer
 

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";


 
   
 

n°770940
Dr Raf
Roaccutane® powered
Posté le 21-06-2004 à 10:29:31  profilanswer
 

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


Message édité par Dr Raf le 21-06-2004 à 10:30:20
n°771368
dapp
papango
Posté le 21-06-2004 à 14:05:41  profilanswer
 

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 !
n°771380
jagstang
Pa Capona ಠ_ಠ
Posté le 21-06-2004 à 14:15:22  profilanswer
 

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?  
n°771382
T509
$job-&gt;GetJob(now)
Posté le 21-06-2004 à 14:16:27  profilanswer
 

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 ?

n°771383
jagstang
Pa Capona ಠ_ಠ
Posté le 21-06-2004 à 14:16:52  profilanswer
 

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?  
n°771387
T509
$job-&gt;GetJob(now)
Posté le 21-06-2004 à 14:18:26  profilanswer
 

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
n°771456
ratibus
Posté le 21-06-2004 à 14:52:17  profilanswer
 

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.

n°771646
dapp
papango
Posté le 21-06-2004 à 17:03:18  profilanswer
 

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 !
n°771657
jagstang
Pa Capona ಠ_ಠ
Posté le 21-06-2004 à 17:05:20  profilanswer
 

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?  
n°771661
jagstang
Pa Capona ಠ_ಠ
Posté le 21-06-2004 à 17:05:56  profilanswer
 

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?  
n°771751
dapp
papango
Posté le 21-06-2004 à 17:45:12  profilanswer
 

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 !
n°771755
dapp
papango
Posté le 21-06-2004 à 17:46:55  profilanswer
 

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 !
n°772014
dapp
papango
Posté le 21-06-2004 à 22:05:35  profilanswer
 

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

n°772091
T509
$job-&gt;GetJob(now)
Posté le 21-06-2004 à 22:34:26  profilanswer
 

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

n°772119
dapp
papango
Posté le 21-06-2004 à 22:51:48  profilanswer
 

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:

n°772157
T509
$job-&gt;GetJob(now)
Posté le 21-06-2004 à 23:27:05  profilanswer
 

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

n°772288
dapp
papango
Posté le 22-06-2004 à 08:36:12  profilanswer
 

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 !
n°772305
ratibus
Posté le 22-06-2004 à 09:09:34  profilanswer
 

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]

n°772317
dapp
papango
Posté le 22-06-2004 à 09:17:21  profilanswer
 

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 !
n°772322
T509
$job-&gt;GetJob(now)
Posté le 22-06-2004 à 09:26:48  profilanswer
 

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)

n°772541
dapp
papango
Posté le 22-06-2004 à 12:04:54  profilanswer
 

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


---------------
Marre des reflex - je passe au M !
n°772565
T509
$job-&gt;GetJob(now)
Posté le 22-06-2004 à 12:22:05  profilanswer
 

Tu tournes en rond là

n°772613
dapp
papango
Posté le 22-06-2004 à 13:20:24  profilanswer
 

:)  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 !
n°772633
ratibus
Posté le 22-06-2004 à 13:34:03  profilanswer
 

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 ?

n°772698
T509
$job-&gt;GetJob(now)
Posté le 22-06-2004 à 14:09:40  profilanswer
 

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
n°772713
dapp
papango
Posté le 22-06-2004 à 14:14:24  profilanswer
 

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 !
n°772724
dapp
papango
Posté le 22-06-2004 à 14:17:15  profilanswer
 

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 !
n°772746
T509
$job-&gt;GetJob(now)
Posté le 22-06-2004 à 14:26:05  profilanswer
 

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

n°772773
jagstang
Pa Capona ಠ_ಠ
Posté le 22-06-2004 à 14:43:22  profilanswer
 

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?  
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  empecher un fichier php de s'executer...

 

Sujets relatifs
Executer commandes externes via exec avec un apache chrooté[ Résolu ] Importer fichier .sql
[c#][vs.NET]executer un fichier mp3[java] performance d'une copie de fichier
Utiliser une variable dans un autre fichierPhp & Mysql ou Php et fichier texte
Supprimer les fichier contenu ds Temp avec un .bat a chaque reboot??Modifier un fichier Excel
ouverture de fichier 
Plus de sujets relatifs à : empecher un fichier php de s'executer...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR