2011-06-01 5 views
2

J'ai un script de suggestion de recherche PHP qui utilise MySQL comme back-end. Je suis conscient qu'il y a beaucoup de vulnérabilités dans mon code, je me demandais juste ce que je pouvais faire pour le rendre plus sûr.Sécurisation du code PHP MySQL

Voici mon code:

<?php 
$database=new mysqli('localhost','username','password','database'); 
if(isset($_POST['query'])){ 
    $query=$database->real_escape_string($_POST['query']); 
    if(strlen($query)>0){ 
     $suggestions=$database->query(
      "SELECT * FROM search WHERE name LIKE '%" . $query . 
      "%' ORDER BY value DESC LIMIT 5"); 
     if($suggestions){ 
      while($result=$suggestions->fetch_object()){ 
       echo '<a>'.$result->name.'</a>';      
      } 
     } 
    } 
} 
?> 
+0

Dans quel sens voulez-vous le rendre plus sûr? Puisque vous échappez déjà à la chaîne de recherche, que cherchez-vous à sécuriser? –

Répondre

4

En fait, il n'y a pas, vous échappez la seule valeur externe dans le SQL

Quoi qu'il en soit, je vous suggère de considérer d'utiliser PDO::prepare pour les requêtes. Rendez-vous ici pour plus d'infos

http://it.php.net/manual/en/pdo.prepare.php

Exemple:

$sth = $dbh->prepare('SELECT * FROM article WHERE id = ?'); 
$sth->execute(array(1)); 
$red = $sth->fetchAll(); 
+0

@callum: lol arrêtez de supprimer tous vos commentaires XD – dynamic

3

Quelques conseils de moi:

  • utilisation AOP,
  • ne concaténer pas les paramètres de requête, utilisez les instructions préparées dans PDO,
  • ne pas mettre "*" dans l'instruction SELECT, ge t seules les colonnes dont vous avez besoin,
  • utilisez fetchAll() dans PDO, ne récupérez pas les enregistrements dans la boucle while().
+0

Pourquoi downvote? Downvoter, pourriez-vous expliquer? –

+0

Je ne suis pas le downvoter Mais je pourrais essayer d'expliquer pourquoi ils ont downvoted: l'OP ne demandait pas de pourboires mais s'il y avait des vulriatibiles. il n'a pas demandé PDO fetchAll ni pour l'optimisation SQL avec SELECT *. Peut-être que c'est pour ça – dynamic