Rechercher : dans
Par :

PHP - Faille ???

Dernière réponse le 12 déc 2007 à 00:37:47 php_noob, le 11 déc 2007 à 19:33:08 
 Signaler ce message aux modérateurs

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>';
}
?>
Configuration: Windows XP
Internet Explorer 7

Meilleures réponses pour « PHP Faille ??? » dans :
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
[PHP] Notice: Undefined index: VoirSi vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line...
Télécharger PHP Edit VoirPHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de fonctionnalités permettant de développer plus efficacement : Coloration syntaxique Auto-complétion des fonctions Débuggeur...
Télécharger PHP FTP Synchronizer VoirLa mise à jour de site web est aussi complexe que sa conception. Alors il faut utiliser le bon outil avec les bon paramètres et une bonne connaissance de programmation pour mettre à jour un site. PHP FTP Synchronizer est une application vous...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...

1

php_noob, le 11 déc 2007 à 22:51:00

N'y a-t-il donc aucun gourou php par ici ? :-(

Répondre à php_noob

2

kilian, le 11 déc 2007 à 23:21:35

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!

Répondre à kilian

3

le père, le 11 déc 2007 à 23:42:53

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.

Répondre à le père

4

php_noob, le 12 déc 2007 à 00:02:14

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

Répondre à php_noob

5

 kilian, le 12 déc 2007 à 00:37:47

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
http://www.google.fr/...

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(...)

Répondre à kilian