PHP et sécurité, exécution de scripts via un formulaire. - PHP - Programmation
Marsh Posté le 26-11-2002 à 16:30:59
possible si le script ne contrôle pas les variables
d'une manière générale, tout est possible quand c'est mal fait..
Marsh Posté le 26-11-2002 à 16:32:48
si...
formulaire :
login= toto (user existant)
pwd= test' and '1=1
si la query n'est pas correcte, tu exécutes le code
query codée :
select login from user where login='$login' and password='$pwd'
après réception des données
select login from user where login='toto' and password='test' or '1=1'
exécution de la query... ok elle retourne des résultats... le user est valide --> bardaf, tu t'es fait hacké
protection de la query :
- gpc à on dans php.ini -> ajout automatique d'un \ devant les caractères délicats passés par Get/Post/Cookie ou addslash($password)
- md5($password)
Marsh Posté le 26-11-2002 à 16:33:30
faut faire un listing de toutes les variables PHP interdites
Marsh Posté le 26-11-2002 à 16:35:28
Va voir là : http://www.php.net/manual/fr/security.filesystem.php
Il suffit que tes variables ne soient pas testées, par exemple. Pour le coup de la commande lancée, t'as : http://www.php.net/manual/fr/security.cgi-bin.php
Ca n'arrive que si PHP est configuré en mode CGI et non en module pour ton serveur Ouaibe.
Marsh Posté le 26-11-2002 à 16:46:50
le but est d'être sûr que ce qui sera mis dans ta query est valide :
si ' et " sont transformés en \' et \", il n'y a plus moyen de trafiquer ta query à la volée.
Pour faire cela, soit tu le fais toi même avec addslashes(), soit tu configures ton serveur php pour qu'il le fasse automatiquement : dans php.ini tu mets
magic_quotes_gpc= On
de cette façon les variables issues de g(Get) p(Post) c (Cookie) seront traitées par le serveur.
le md5() c'est pour crypter, c'est rien je me suis emporté
mais bon si tu cryptes ton pwd avant de le comparer dans ta query, il est impossible d'exécuter qqch que tu ne veux pas, mais c'est pas la priorité.
Marsh Posté le 26-11-2002 à 16:07:35
J'ai entendu parler d'une méthode qui consisterait à utiliser, dans un formulaire de login, par exemple, (nom et pass), un mot de passe bidon suivit d'une commande enchainée pour qu'elle soit éxécutée par le serveur... possible ?
Message édité par Master_Jul le 26-11-2002 à 16:08:15