Aller au contenu

[PHP] Les failles de sécurité courantes.


Messages recommandés

  • 9 mois après...
  • 1 an après...

Filtrer la page c'est bien, filtrer tous les paramètres c'est mieux!

Perso j'utilise un tableau d'expressions régulières qui définit, pour chaque paramètre, la ou les valeurs qu'il peut prendre.

$filters = array(   "pageName" => "/^main|editAccount|accountCreated|doDisconnect|newIdea|ideaCreated|showIdeasList|showIdea$/",   "langCode" => "/^[A-Z]{2}$/",   "country" =>  "/^[0-9]+$/",   "userName" => "/^[\\w-.]{5,16}$/",// don't check for password... and never put it in session   "password" => null,//"/^[^\"\'\\\]{5,16}$/",   "oldPassword" => null,//"/^[^\"\'\\\]{5,16}$/",   "confirmPassword" => null,//"/^[^\"\'\\\]{5,16}$/",   "email" =>    "/^[\\w][\\w-.]*@[\\w][\\w-.]*\\.[a-zA-Z]{2,9}$/",   "comment" => "/^[0-9]+$/",   "commentText" => "/^.+$/s",   "action" => "/^add|remove$/",   "userId" => "/^[0-9]{1,7}$/",   "activationKey" => "/^[\\w]+$/",   "sortMode" => "/^byTitle|byAuthor|byPop$/",   "page" => "/^[0-9]+$/");function filterParametersArray($arr) {global $filters;foreach ($arr as $key => $value) { if (isset($_SESSION[$key])) {  unset($_SESSION[$key]); } $regexp = $filters[$key]; if ($regexp && preg_match($regexp, $value) > 0) {  $_SESSION[$key] = $value; }}}function filterParameters() {// Filter GET parametersfilterParametersArray($_GET);// Filter POST parametersfilterParametersArray($_POST);//...}
Lien vers le commentaire
Partager sur d’autres sites

Un autre réflexe à avoir : lorsqu'on écrit dans une base de donnée une chaîne de caractère de provenance non contrôlée (texte utilisateur par exemple) on peut utiliser mysql_real_escape_string pour se protéger des tentatives d'injection.

Corollaire de ce qui a été dit plus haut à propos de ne jamais faire confiance à ce qui vient du client : lorsqu'on contrôle la validité des données transmises, par exemple en javascript, provenant d'un formulaire : toujours faire le contrôle également côté serveur, en PHP.

Quand on hash un mot de passe, quel que soit l'algorithme utilisé, ne pas négliger de "salter" l'algo. Autrement, le pirate pourra deviner les mots de passes à l'aide de rainbow tables. Et puis, d'accord avec flaidy, le MD5 ça fait un peu faiblard de nos jours...

Lien vers le commentaire
Partager sur d’autres sites

  • 3 ans après...

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...