Latest web development tutorials

injection MySQL et SQL

Si vous obtenez les données saisies par l'utilisateur via le web et l'insérer dans une base de données MySQL, il est des problèmes de sécurité d'injection possible SQL.

Cette section vous indiquera comment empêcher l'injection de SQL, et pour filtrer les caractères d'injection SQL dans un script.

L'injection dite SQL, est à travers la commande SQL dans le formulaire Web soumettre ou entrez le nom de domaine ou demande de page chaîne de requête, et finalement tromper le serveur pour exécuter des commandes SQL malveillantes.

Nous entrée utilisateur jamais confiance, nous devons identifier les données saisies par l'utilisateur ne sont pas sûrs, nous avons tous besoin pour le processus de filtrage des données d'entrée d'utilisateur.

L'exemple suivant, le nom d'utilisateur saisi doit être une combinaison de lettres, chiffres et caractères de soulignement, et la longueur du nom d'utilisateur est entre 8-20 caractères:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysql_query("SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

Regardons la situation dans laquelle il n'y a pas de filtre SQL caractères spéciaux apparaissent:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Au-dessus de la déclaration d'injection, nous ne disposons pas de filtrer le nom de la variable $, $ name on n'a pas besoin d'insérer l'instruction SQL supprime toutes les données des utilisateurs de table.

mysql_query en PHP () ne peut pas exécuter plusieurs instructions SQL, mais dans SQLite et PostgreSQL peut exécuter plusieurs instructions SQL simultanément, de sorte que les utilisateurs de ces données nous avons besoin de vérification stricte.

Empêcher l'injection SQL, nous devons prêter attention aux points suivants:

  • 1. entrée utilisateur Jamais confiance. Vérification de l'entrée de l'utilisateur, vous pouvez utiliser des expressions régulières, ou de limiter la longueur; des guillemets simples et doubles "-" dans la conversion.
  • 2. Ne jamais utiliser sql dynamique de l'assemblage, vous pouvez utiliser les paramètres de l'utilisation directe de sql ou des procédures stockées pour un accès de requête de données.
  • 3. Ne jamais utiliser les privilèges connexion à la base de l'administrateur, utilisez les autorisations individuelles limitées pour chaque connexion de base de données de l'application.
  • 4. Ne pas stocker des informations confidentielles directement, le cryptage ou hachage des mots de passe et des informations sensibles.
  • 5. Les informations d'exception d'application devrait être donnée quelques invites, il est préférable d'utiliser un message d'erreur personnalisé Message d'erreur emballage d'origine
  • Détection 6.sql site d'injection en plate-forme logicielle générale ou de support pour détecter, le logiciel couramment utilisé des outils de détection d'injection sql jsky, site de site Internet milliards pensée il y a des outils de détection de la plate-forme de sécurité. MDCSOFT SCAN aime. Utilisation de MDCSOFT-IPS peut être injection SQL de défense efficace, les attaques XSS.

injection Prevent SQL

Dans les langages de script tels que Perl et PHP, vous pouvez échapper les données saisies par l'utilisateur afin d'éviter l'injection SQL.

l'extension PHP MySQL fournit la fonction mysql_real_escape_string () pour échapper les caractères d'entrée spéciaux.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Comme l'injection de déclaration

comme la requête, si l'utilisateur entre une valeur de "_" et "%", alors ce qui se passe: L'utilisateur essayait juste requête "abcd_", les résultats là-bas "abcd _", "abcde", "ABCDF" etc; utilisateur d'interroger le «30%» (note: trente pour cent) auront des problèmes.

Dans le script PHP, nous pouvons utiliser addcslashes () pour traiter le cas ci-dessus, les exemples suivants:

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes () fonction avant spécifiés avec une barre oblique inverse.

Syntaxe:

addcslashes(string,characters)
Paramètres description
string Obligatoire. Pour vérifier la chaîne spécifiée.
caractères Optionnel. Prévue par addcslashes () affectent des caractères ou des chaînes de caractères.

Vous pouvez afficher l'application spécifique: les addcslashes PHP () fonction