|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : janvier 2006 Messages : 23 ![]() |
Bonjour à tous,
J'aimerai soliciter l'avis de professionels sur le sujet pour me donner un avis sur la façon dont je protége mes données venant d'un formulaire par méthode $_POST avant de les insérer dans une base de donnée MySql (pour une interface d'inscription et de connexion à un espace sécurisé) Voici donc comment je protège les données avant l'insertion : Code :
De plus, j'aimerai vous demandez si il était nécessaire que je protège les données que je récupère de la bdd si je les protège avant de les insérer de la manière décrite ci-dessus ? Merci par avance pour vos réponses |
||
|
|
00
|
|
|
#2 | ||
|
Membre chevronné
![]() Inscription : mars 2005 Messages : 583 ![]() |
hello,
avis perso sur la question : pour ce qui est du $pseudo : oui mais... pour ce qui est de la logique, mysql_real_escape_string (mres pour la suite car je suis fainéant) prépare les données pour l'insertion, trim les transforme. pour moi il est plus logique de transformer les données avant de préparer l'insertion. donc : Code :
par contre on dirait que tu accepte un peu n'importe quoi dans les pseudo, peut etre faut il penser à filtrer un peu plus et n'autoriser que les caracteres les plus "logiques"... car là par exemple tu acceptes les tags HTML par exemple... est ce voulu ? pour ce qui est des mots de passe : md5 dans tous les cas transforme les données en une chaine hexadécimale inoffensive pour la base de données. donc mres n'est pas obligatoire (mais ça reste une bonne habitude) pour le trim, si tu vires les espaces à l'insertion, n'oublie surtout pas de les virer aussi à la vérification car là tu as dénaturé le mot de passe ( md5('toto') != md5(' toto ') ) ces espaces étaient peut-etre intentionnels qui sait ? en résumé, j'ai peut-etre blablaté pour rien, la principale chose à vérifier je pense, c'est les caracteres autorisés dans les pseudos, et pourquoi pas les mots de passe, avec un petit preg_match par exemple. bon courage ! |
||
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé
![]() Développeur informatique Inscription : février 2005 Messages : 2 982 ![]() |
J'ajouterais un avis concernant le mot de passe.
Pour éviter de dénaturer un mot de passe ou la réussite (il faut qu'il soit fort) de détourner la fonction mysql_real_escape_string par l'injection SQL. je proposerais plutôt l'expression réguliere et dire que seul les caractères suivant sont accepté a-z,A-Z,1-9, .... et je rajouterais ceci. Code :
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
||
|
|
00
|
|
|
#4 | ||||||||
|
Invité régulier
![]() Inscription : janvier 2006 Messages : 23 ![]() |
Tout d'abord, merci pour vos réponses
Petitbidon >>> Citation:
Citation:
Code :
Si quelqu'un aurait une idée Code :
berceker united >>> En effet, cela peut être une idée à développé, mais comme je le disais plus haut, j'ai abandonné l'idée d'utilisé trim() sur le mot de passe. Sinon, je vous avez encore demandé une petite chose dans le premier post, peut être ne l'avez vous pas vu Est il nécessaire que je protège les données que je récupère de la bdd si je les protège avant de les insérer de la manière décrite ci-dessus ? Merci beaucoup ! |
||||||||
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() Inscription : mars 2005 Messages : 583 ![]() |
re,
pour la premiere question, mres est fait pour ca, donc pour la sécurité contre les injections sql, c'est nickel normalement pour ce qui est de ta derniere question, si j'ai bien compris, si tu fais un truc du genre SELECT machin FROM truc WHERE bidule=$chose il faut bien évidemment protéger $chose. pour résumer il faut protéger toutes les variables que tu envoie à ta base de données que ce soit en écriture lors des INSERT/UPDATE, qu'en lecture, dans les clauses WHERE. sinon a priori tu n'as pas a te soucier plus, les données issues de la BDD sont sensées être propres quand tu les insere, donc il en va de meme lorsque tu les relis. sinon pour les espaces dans ton expression, essaye [:space:] mais je garantis rien. enfin pour finir, vu que tu protege intelligemment tes données, tu pourrais aussi autoriser les apostrophes pour les pseudos (penser qu'il y a plein de noms qui en contiennent). enfin ça apres... moi ce que j'en dis hein ! |
|
|
00
|
|
|
#6 | ||||
|
Invité régulier
![]() Inscription : janvier 2006 Messages : 23 ![]() |
Re
Citation:
Citation:
Citation:
Citation:
Par contre, ne m'y connaissant pas du tout dans les expressions régulières, je ne vois pas du tout coment m'y prendre Sinon, une dernière question me passait par la tête : Lorsque qu'un membre se connecte, une session est alors créee si le couple pseudo/mot de passe correspond dans la bdd. Dois-je protéger également les variables qui passent par la session ? Par exemple : Code :
$_SESSION['pseudo'] = htmlspecialchars(trim($_POST['pseudo'])); |
||||
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() Inscription : mars 2005 Messages : 583 ![]() |
non, puisque le pseudo pour etre validé doit être "clean", pas de raisons de le transformer pour le passer en session.
pour ce qui est des apostrophes, essaye simplement de rajouter ' dans ton motif |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : janvier 2006 Messages : 23 ![]() |
Ok, et bien je te remercie beaucoup pour toutes les indications que tu m'a apportées
Par contre, pour les apostrophes, j'ai tenté de rajouté un ' dans le motif, mais cela n'a pas fonctionné Je vais donc faire quelques recherches supplémentaires Merci encore, sujet clos. |
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Inscription : avril 2004 Messages : 236 ![]() |
Salut à tous,
J'ai lu avec intérêt toutes les infos dans ce post et la FAQ PHP. Toutefois, une question me taraude toujours. Comment éviter que les utilisateurs entrent des tags HTML dans les champs texte du formulaire ? Les fonctions htmlentities ou htmlspecialchars servent uniquement lors de l'affichage de champs texte je crois. Merci |
|
|
00
|
|
|
#10 | ||||
|
Membre chevronné
![]() |
Pour éviter les injections SQL du type OR 1='1', tu peux faire comme ceci:
Code :
Code :
|
||||
|
|
00
|
|
|
#11 | |||||
|
Expert Confirmé
![]() Développeur informatique Inscription : février 2005 Messages : 2 982 ![]() |
Citation:
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|||||
|
|
00
|
|
|
#12 | |
|
Membre émérite
![]() Inscription : août 2003 Messages : 878 ![]() |
Citation:
Une remarque en passant : MD5 seul, c'est un peu faible. Pour vous en convaincre, téléchargez/installez un outil comme John the Ripper (avec le patch "Raw MD5" [1]) et faites un "benchmark" :. Le (raw) MD5 devrait apparaître comme le plus rapide à casser ("cracker")... Comparez avec "blowfish"... Faites un tour sur la page "Portable PHP password hashing framework", cela peut aider. Cordialement, DS. [1] - il vous faudra le compiler vous-même, le "Raw MD5" n'est pas inclus par défaut (et il ne faut pas le confondre avec le "FreeBSD MD5").
__________________
Un problème bien exposé est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles. |
|
|
|
00
|
|
|
#13 | ||
|
Membre régulier
![]() Inscription : avril 2004 Messages : 236 ![]() |
Pour lutter contr les failles XSS, il suffit de faire préparer les affichages avec la fonction htmlentities non ?
Par exemple: Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com