Se connecter / S'enregistrer
Votre question

[Débutant] Sécurité de vos applications PHP

Tags :
  • Php
  • Programmation
Dernière réponse : dans Programmation
23 Décembre 2008 19:18:38

Plus je lis le forum, plus je lis des portions de code et plus, moi, développeur PHP junior (mais plus confirmé que beaucoup ici), je me sens obligé de vous alertez.

Vous crachez sur IE car il n'est pas sécurisé ? avez vous vérifié vos sites web ?

PHP est très facile à prendre en main, mais si il y a une chose à toujours faire attention, c'est d'ajouter un minimum de sécurité. Vous trouverez d'excellent sites sur la sécurité en PHP via Google, cependant voici quelques trucs à ne JAMAIS oublier.

Stockage des mots de passe

Jamais vous ne devez stocké en "clair" les mots de passe de vos membres dans votre base de donnée. Il existe pour cela des fonctions de hachage : md5(), sha1() ... Voici comment les faire fonctionner.

A l'inscription l'utilisateur entre un mot de passe. Je récupère son mot de passe en clair dans $_POST['password_inscription']. Premier réflexe, md5 ! $password_for_db = md5($_POST['password_inscription']); $password_for_db contient maintenant une chaine de 32 caractères et il est impossible de revenir en arrière, d'avoir $_POST['password'] avec $password_for_db !

Mais on fait comment après pour connecter le membre ?

Pour connecter le membre rien de plus simple, même réflexe. $password_for_check = md5($_POST['password_connexion']); Si $password_for_check == $password_for_db alors le mot de passe saisi est correct.

Vous pouvez explorer votre base de donnée, vous n'allez jamais voir le mot de passe de vos membres.

Démo (PHP est utilisé en ligne de commande ici, mais sur une page web le fonctionnement est 100% identique) :

Citation :
simon@lucie:/tmp$ cat demo.php
<?php
$motdepasse1 = "toto";
$motdepasse2 = "tata";
$motdepasse3 = "toto";

echo md5($motdepasse1)."\n";
echo md5($motdepasse2)."\n";
echo md5($motdepasse3)."\n";

?>
simon@lucie:/tmp$ php -f demo.php
f71dbe52628a3f83a77ab494817525c6
49d02d55ad10973b7b9d0dc9eba7fdf0
f71dbe52628a3f83a77ab494817525c6
simon@lucie:/tmp$



Injection SQL

L'injection SQL, est ce que je recontre le plus sur le forum, c'est aussi et de loin l'erreur la plus grave et la plus dangereuse.

Il ne faut jamais, jamais mettre directement les variables $_POST ou $_GET dans vos requêtes SQL. Si une valeur doit être un nombre, vérifié que vous avez bien un nombre avec is_numeric(), si le résultat est faux, arrêter l'exécution du programme. Dans le cas des texte, le problème bien des apostrophes, il est possible de totalement détourner une requête pour lui faire dire n'importe quoi si vous ne vous protégez pas.

Avant de mettre de mettre des variables veuillez donc, pour les variables qui doivent être des nombres à le vérifier avec is_numeric() et pour les champs texte à les passer avec la fonction mysql_real_escape_string().

Pour voir les dégâts d'une injection SQL, une petite recherche sur Google et vous verrez de très très nombreux exemple.


Document écrit par SiM07 et disponible sous licence Creative Commons by-nc

Autres pages sur : debutant securite applications php

25 Décembre 2008 16:50:09

Bonjour,

Le mieux est d'encore passé le $_POST ou le $_GET dans plusieurs fonction genre:

$blabla = htmlspecialchars(mysql_real_escape_string($_POST['blabla']));

Tu as oublié de signaler que mysql_real_escape_string(); doit s'utiliser APRES une connexion à la base de données.
25 Décembre 2008 17:37:21

Pour htmlspecialchars(), l'inconvénient c'est que le comportement du code change. Il serait à classer dans les fonctions pour éviter les attaques XSS et non les injections SQL.
Contenus similaires
26 Décembre 2008 19:32:35

Citation :
Plus je lis le forum, plus je lis des portions de code et plus, moi, développeur PHP junior (mais plus confirmé que beaucoup ici), je me sens obligé de vous alertez.


bof, chacun sécurise ses appli comme il veut et a ses propres méthodes alors autant poster du code le plus simple possible et laisser l'autre se l'approprier.

C'est bien mais t'as oublié un élément de base important que sont les magic_quotes. Elles vont être désactivées sous PHP6 alors autant les désactiver dans le php.ini (quand vous mettrez votre version php à jour et si vous travailliez avec les magic_quotes par défaut, vous allez pleurez). Si vous avez pas accès à ce fichier, une fonction php (get_magic_quotes_gpc un truc comme ça) renvoit true si elles sont activées.
18 Mars 2009 12:56:03

Hiola a dit :
Citation :
bof, chacun sécurise ses appli comme il veut et a ses propres méthodes alors autant poster du code le plus simple possible et laisser l'autre se l'approprier.


pour ma part j'apprécie énormément que des personnes m'alarment ou me guident.

Et pour avoir eu mon site piraté je trouve qu'il a bien raison de dire que la protection est du choix de chacun et que nul ne devrait dire du mal des autres ( de IE par exemple ! ) alors que la cause première est de soi-même !

pour la 'petite histoire' celui qui m'avait piraté :(  était sous linux et firefox !!!

Bien sûr je garde le libre arbitre de mes actions ! Mais j'aime les informations qu'elles quelles soient et d'où qu'elles viennent.

c'est ainsi que je progresse, moi!
Salut :hello: 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS