Latest web development tutorials

injection SQLite

Si votre site Web permet aux utilisateurs d'entrée, et l'entrée dans la base de données SQLite, cette fois, vous êtes confronté à un problème de sécurité est connu comme l'injection SQL. Ce chapitre vous montrera comment empêcher que cela se produise, et d'assurer les déclarations de SQLite de script de sécurité.

Injection se produit généralement lors de la demande d'entrée de l'utilisateur, telles que l'utilisateur doit entrer le nom, mais l'utilisateur a entré une instruction SQLite, et cette déclaration sera exécuté sur la base de données inconsciemment.

Jamais les données fournies par l'utilisateur la confiance, le traitement des données afin que validé, la règle se fait par correspondance de motif. Dans l'exemple suivant, le nom d'utilisateur le nom d'utilisateur est limité à caractères alphanumériques ou de soulignement, la longueur doit être comprise entre 8-20 caractères - selon le besoin de modifier ces règles.

if (preg_match ( "/ ^ \ w {8,20} $ /", $ _GET [ 'username'], $ correspond)) {
   $ Db = new SQLiteDatabase ( 'filename');
   $ Résultat = @ $ db-> query ( "SELECT * FROM utilisateurs WHERE nom d'utilisateur = $ matches [0]");
} Else {
   echo "username pas accepté";
}

Pour illustrer ce problème, considérer cette hypothèse extrait: Pour illustrer le problème, considérez cet extrait:

$ Name = "Qadir '; DELETE FROM utilisateurs;";
@ $ Db-> query ( "SELECT * FROM utilisateurs WHERE nom d'utilisateur = '{$ name}'");

Appel de fonction pour récupérer le nom de la colonne spécifiée par le nom d'utilisateur correspond à l'enregistrement de la table utilisateur. Dans descirconstances normales, $ name ne contient que des caractères alphanumériques et des espaces, tels que illa à cordes.Mais ici, pour $ name a ajouté une nouvelle requête, les appels à la base de données peut causer des problèmes catastrophiques: injecté requête DELETE pour supprimer tous les enregistrements d'utilisateurs.

Bien qu'il n'y est pas autorisé à exécuter l'interface de requête ou base de données d'empilage de plusieurs requêtes en un seul appel de fonction, si vous essayez d'empiler la requête, puis l'appel échoue, mais SQLite et PostgreSQL sont encore empilés dans la requête, ce qui permet une exécution dans une chaîne Toutes les requêtes, ce qui peut causer des problèmes de sécurité graves.

injection Prevent SQL

Dans les langages de script tels que PERL et PHP, vous pouvez habilement gérer tout le caractère d'échappement. PHP offre une programmation chaîne de langue fonctionssqlite_escape_string () pour SQLite est utilisé pour échapper à la saisie des caractères spéciaux.

if (get_magic_quotes_gpc ()) 
{
  $ Name = sqlite_escape_string ($ name);
}
$ Résultat = @ $ db-> query ( "SELECT * FROM utilisateurs WHERE nom d'utilisateur = '{$ name}'");

Bien que les données sont codées de telle sorte que l'insert fait sûr, mais il va rendre la comparaison de texte simple, dans la requête, la colonne contient desdonnées binaires, LIKE clause ne sont pas disponibles.

S'il vous plaît noter, addslashes () ne doivent pas être référencés dans la chaîne de requête SQLite, cela conduira à des résultats étranges lors de la récupération des données.