PHP - Faille ???

Fermé
php_noob - 11 déc. 2007 à 19:33
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 12 déc. 2007 à 00:37
Bonjour, j'ai écrit un petit script php pour calculer des md5 et autre sha1, mais quelqu'un m'a dit qu'il présentait une grosse faille de sécurité... il n'a pas voulu m'en dire plus... (par mesure de prudence, je l'ai retiré de mon site), mais je ne vois pas ce qui ne va pas dans mon script... il me semble pourtant avoir bien tester que l'utilisateur de puisse pas entrer n'importe quoi ?
Avez-vous une idée de ce que j'aurais pu oublier, mal programmer?

Merci d'avance de vos réponses.

<?php
if (isset($_POST['func'], $_POST['value']) && is_string($_POST['func']) && is_string($_POST['value']))
{
        $value = htmlentities($_POST['value']);
	$func  = htmlentities($_POST['func']);
	
	echo $func($value);
}
else
{
        echo '<h2>Hash MD5 / SHA1 / Crypt</h2>
	<form method="post" action="index.php">
		Input: <input type="text" name="value" />
		<input type="submit" name="func" value="md5" />
		<input type="submit" name="func" value="sha1" />
		<input type="submit" name="func" value="crypt" />
	</form>';
}
?>
A voir également:

5 réponses

N'y a-t-il donc aucun gourou php par ici ? :-(
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 déc. 2007 à 23:21
Salut,

A ton avis qu'est ce qui se passe si je transforme ton formulaire comme ça dans une page web concoctée par mes soins:
<form method="post" action="http://adressedetonsite/index.php">
		Input: <input type="text" name="value" />
		<input type="submit" name="func" value="file_get_contents" />
	</form>

Et que dans le champs de value je mets database.php, le fichier qui contient les identifiants de ta base de données situé dans le même repertoire?
Et s'il est dans le repertoire au dessus, je peux mettre ../database.php, ça change rien.

Et hop, j'envoie le tout!
0
Bonsoir

D'autre part, mais ceci n'a aucun rapport avec un problème de sécurité, faire htmlentities($_POST['value']) n'a pas grand sens.
htmlentities transformes les &, " et autres < en & amp; & quot; & lt;. C'est utile quand on envoie des textes contenant ces caractères spéciaux vers une page HTML et qu'on ne veut pas qu'ils soient interpretés somme des balises. Par contre, ça fausse les données récupérées d'un formulaire.
0
Merci beaucoup de toutes vos réponses...
je débute, donc je ne me rendais pas vraiment compte que tels risques pouvaient exister dans un si petit script...
Je crois que je vais acheter un livre sur le sujet... ce sera plus efficace que de suivre des tutoriaux à droite à gauche...
En auriez-vous de bons à me conseiller (traitant notamment de la sécurité, ou comment éviter les failles (du moins les plus courantes...))?
Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
12 déc. 2007 à 00:37
Non je connais pas de bouquin sur le sujet mais il y a un bon paquet de sites qui traitent de ça:
http://phpsec.org/projects/guide/fr/2.html
https://www.google.fr/search?hl=fr&q=s%C3%A9curit%C3%A9+php&btnG=Recherche+Google&meta=&gws_rd=ssl

Quelques thèmes à aborder:
_ Mettre à jour php quand la version que tu as possède des failles
_ Les injections sql
_ Les données en provenance de formulaire ou d'url
_ Les données en provenance des sessions/cookies
_ Le cross site scripting
_ La configuration de php (cf: safe_mode)
_ Les variables non initialisées
_ Les applications php ou librairies pas à jour
_ etc...

Globalement il faut faire attention à un truc: ne jamais faire confiance aux données qui viennent de l'utilisateur.
Et puis tu devrais éviter les fonctions dynamique du genre $func(...)
0