Sécurité des ba...LOGIN

Sécurité des bases de données pour les débutants en PHP

1.Empêcher l'injection SQL

La soi-disant injection SQL consiste à insérer des commandes SQL dans des formulaires Web pour soumettre ou saisir des noms de domaine ou des chaînes de requête pour requêtes de page. , et finalement inciter le serveur à exécuter des commandes SQL malveillantes.

Nous ne devons jamais faire confiance aux entrées de l'utilisateur. Nous devons supposer que les données saisies par l'utilisateur ne sont pas sécurisées. Nous devons tous filtrer les données saisies par l'utilisateur

Par exemple, pour s'inscrire, l'utilisateur doit renseigner son nom d'utilisateur, son mot de passe, etc.

Lorsque nous recevrons ces données, nous les jugerons en premier. La première est la page frontale. Nous pouvons utiliser js pour juger si ce n'est pas le cas. légal au premier plan, nous devons y revenir une fois que tout est rempli et légal, les informations que nous recevons, telles que le nom d'utilisateur, ont été enregistrées. Nous devons interroger la base de données et la juger en fonction de la. informations sur le nom d'utilisateur soumises dans le formulaire. S'il existe, l'enregistrement n'est pas autorisé. Nous pouvons également utiliser des expressions régulières pour contrôler son format. Par exemple, il ne peut être que du chinois ou de l'anglais et il ne peut pas dépasser quelques caractères. Attendez

Nous pouvons également filtrer les données soumises par le formulaire

Pour éviter l'injection SQL, nous devons faire attention aux points suivants :

· 1. Ne faites jamais confiance aux entrées de l'utilisateur. Pour vérifier la saisie de l'utilisateur, vous pouvez utiliser des expressions régulières ou limiter la longueur ; convertir des guillemets simples et des "-" doubles, etc.

· 2. N'utilisez jamais d'assemblage dynamique de SQL. Vous pouvez utiliser SQL paramétré ou utiliser directement des procédures stockées pour la requête et l'accès aux données.

· 3. N'utilisez jamais une connexion à une base de données avec des privilèges d'administrateur. Utilisez une connexion à une base de données distincte avec des privilèges limités pour chaque application.

· 4. Ne stockez pas directement les informations confidentielles, ne cryptez pas ou ne hachez pas les mots de passe et les informations sensibles.

· 5. Les informations d'exception de l'application doivent donner le moins d'indices possible. Il est préférable d'utiliser des informations d'erreur personnalisées pour envelopper le message d'erreur d'origine

· 6. Méthode de détection d'injection SQL Généralement, des logiciels auxiliaires ou des plates-formes de sites Web sont utilisés pour la détection. Le logiciel utilise généralement l'outil de détection d'injection SQL jsky, et la plate-forme de site Web dispose de l'outil de détection de plate-forme de sécurité de site Web Yisi. NUMÉRISATION MDCSOFT, etc. L'utilisation de MDCSOFT-IPS peut se défendre efficacement contre l'injection SQL, les attaques XSS, etc.

Empêcher l'injection SQL

Dans les langages de script, tels que Perl et PHP, vous pouvez modifier les données saisies par l'utilisateur Escape pour empêcher l'injection SQL.

L'extension MySQL de PHP fournit la fonction mysql_real_escape_string() pour échapper aux caractères d'entrée spéciaux

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

Injection dans une instruction Like

like query , si les valeurs ​​saisis par l'utilisateur incluent "_" et "%", cette situation se produira : l'utilisateur voulait à l'origine uniquement interroger "abcd_", mais les résultats de la requête incluent "abcd_", "abcde", "abcdf", etc. ; Des problèmes surviendront également lorsque les utilisateurs souhaitent interroger « 30 % » (remarque : trente pour cent).

Dans les scripts PHP, nous pouvons utiliser la fonction addcslashes() pour gérer la situation ci-dessus, comme le montre l'exemple suivant :

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


<?php echo "hello world"; ?>
soumettreRéinitialiser le code
chapitredidacticiel