Page 1 sur 1

Question sur la sécurité.

Posté : 25 avr. 2010, 06:24
par Simax150
Bonjour à tous !
Je viens de terminer le script d'inscription, d'activation et de connexion de mon site.
Je suis donc à la phase "commentaire et sécurités".
Mais je ne sais pas vraiment quoi et comment sécurisé.
En cherchant sur le net, j'ai trouvé trois choses :
  • "htmlspecialschars", qui sert sur les variable GET ou POST et qui échappe les balises html. Quand l'utiliser ? Systématiquement ou seulement dans certain cas ?
  • "mysql_real_escape_string", à utiliser, je crois, sur les variable que l'on veut inserer dans la base de donnés.
  • "htmlentities", qui n'est, je crois, pas obligatoire lorsqu'on utilise "htmlspecialschars".
Y'a-t-il d'autre sécurités à mettre en place ?

P.S : Dans une requête SQL, vaut-il mieux concaténer les variables ou les placer directement entre guillemets dans la requête ?

Merci d'avance .

Re: Question sur la sécurité.

Posté : 25 avr. 2010, 14:10
par Simax150
up

Re: Question sur la sécurité.

Posté : 25 avr. 2010, 15:26
par SinBert
Bonjour,

Je vais te répondre fonction par fonction :
  • htmlspecialschars : cette fonction est, je pense à utiliser systématiquement dès que l'utilisateur peut rentrer une donnée dans un champ de texte. Cette fonction remplace simplement les caractère "<", ">" et d'autre en leur équivelent respectif : "<", ">"...etc
  • mysql_real_escape_string : cette fonction doit être utilisée à chaque fois avant de faire une requête avec des variable envoyée par l'utilisateur. Cette fonction aide à contrer les attaque par injection SQL.(Plus d'info sur ces attaques : http://fr.wikipedia.org/wiki/Injection_SQL)
    Un exemple pour bien illustrer que cette fonction est capitale en matière de sécurité :
    /* Imaginons que l'utilisateur vient de soumettre un formulaire dont :
              * $_POST['login'] = 'Arno';
              * $_POST['password'] = "' OR ''='";
    */
    $query = "SELECT * FROM users WHERE user='{$_POST['login']}' AND password='{$_POST['password']}'";
    mysql_query($query);
    
    echo $query; //SELECT * FROM users WHERE user='Arno' AND password='' OR ''=''
    //Cela permet à n'importe qui de s'identifier sans mot de passe correct.
    
  • htmlentities : tu as raison, elle est quasiment identique. La seul différence est que tous les caractères qui ont des équivalents en entités HTML seront remplacés. Bref, c'est selon tes besoins.
[..]
P.S : Dans une requête SQL, vaut-il mieux concaténer les variables ou les placer directement entre guillemets dans la requête ?
Je ne vois aucune différence. Fais comme bon te semble. Je pense que c'est du pareil au même ;)

Bonne jounée ;)