Tester la présence d'une chaîne de caractères dans un autre fichier

Pickwick
Invité n'ayant pas de compte PHPfrance

17 avr. 2009, 12:14

Bonjour,

Je voudrai vérifier qu'une page externe contient l'appel à un fichier... Plus précisément, je veux m'assurer que la page target.php contient l'appel include('script.php'); via le fichier trigger.php.

Le but est d'empêcher la suppression ou la modification de cet include, pour des raisons de sécurité.

Après plusieurs dizaines d'essai (!), j'ai abandonné l'idée de recourir à une epxression régulière : sa syntaxe me pose un problème liée, je pense, à l'usage des apostrophes (!). De plus, le manuel Php dit que preg_match est lent, et je veux lancer quatre test successifs.

Je me suis donc rabattu sur la fonction strpos à utiliser dans trigger.php avec une syntaxe de forme :
$text = "include('script.php');";
$find = strpos(file_get_contents('target.php'),$text);
if ($find === FALSE)
{
	echo 'NOK';
}
else
{
	echo 'OK';
}
Hélas, si la chaîne est modifée par exemple mise en commentaires avec //include('script.php'); ou /*include('script.php');*/, strpos renvoie TRUE, et ce problème me chagrine.

J'ai essayé avec strstr, mais je me heurte au même écueil.

Merci pour votre aide.

Cordialement,

Pickwick

ViPHP
ViPHP | 2287 Messages

17 avr. 2009, 12:52

Salut,

C'est quoi la finalité de ce que tu cherches à faire ? Suivant ta réponse, on pourrait peut-être te suggérer une autre façon d'atteindre ce but.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Pickwick
Invité n'ayant pas de compte PHPfrance

17 avr. 2009, 15:39

Bonjour,

Pour répondre à la question, j'ai écrit un petit script avec un ami, que nous voulons mettre à la disposition d'une communauté... Cependant, nous aimerions ajouter et sécuriser cet include, qui comporte une mention vers les auteurs.

Merci.

Pickwick

ViPHP
ViPHP | 2287 Messages

17 avr. 2009, 15:52

On n'a pas dû bien se comprendre là ;-)

Est-ce que tu contrôles (ou peux contrôler) la création des fichiers php sensés contenir cet include ? Si oui, il me parait plus judicieux d'intervenir à ce niveau, cela t'évitera de tester à posteriori.

Si non, Ouille :evil: . tu vas devoir écrire une fonction de test respectant la syntaxe de php dans son ensemble et tenant compte notamment des commentaires... Et en plus sans expression régulière ? Demande-toi si ça en vaut bien le coup. Tu sais, les expressions régulières ne sont visiblement lentes que quand tu les utilises dans une boucle de 10 000 intérations. En dessous, elles restent assez rapides (on parle de millisecondes là) et très adaptées à ce que tu veux faire (tout du moins, c'est une des façons les plus simples et exhaustives d'atteindre ton but).

Tu peux aussi regarder comment font des "gros" scripts tels que phpbb par exemple, ils ne s'embarassent pas autant pour inclure leur signature dans le code source, et c'est tant mieux pour tout le monde (celui qui veut vraiment l'enlever trouvera toujours un moyen de le faire disparaitre, sachant que c'est très facile en CSS par exemple et que ton test ne couvrira pas ce cas).
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Pickwick
Invité n'ayant pas de compte PHPfrance

17 avr. 2009, 18:09

Bonjour,

Merci, Calimero, pour ces remarques judicieuses, qui m'aident à y voir plus clair.

Bien à toi,

Pickwick

Pickwick
Invité n'ayant pas de compte PHPfrance

18 avr. 2009, 21:55

Petit complément à ce message...

J'ai trouvé une solution alternative en utilisant md5_file ou sha1_file "and it works like a charm" comme disent nos amis anglais ! :lol: