Page 1 sur 1

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

Posté : 17 avr. 2009, 12:14
par Pickwick
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

Posté : 17 avr. 2009, 12:52
par Calimero
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.

Posté : 17 avr. 2009, 15:39
par Pickwick
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

Posté : 17 avr. 2009, 15:52
par Calimero
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).

Posté : 17 avr. 2009, 18:09
par Pickwick
Bonjour,

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

Bien à toi,

Pickwick

Posté : 18 avr. 2009, 21:55
par Pickwick
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: