Latest web development tutorials

inyección de SQLite

Si su sitio web permite a los usuarios a la entrada, y se introduce en la base de datos SQLite, esta vez se enfrenta con un problema de seguridad que se conoce como inyección de SQL. Este capítulo le mostrará cómo evitar que esto suceda, y para asegurar las declaraciones de SQLite de secuencia de comandos de seguridad.

Inyección por lo general ocurre cuando se solicita la entrada del usuario, como usuario debe introducir el nombre, pero el usuario ha entrado en un estado de SQLite, y esta declaración se llevará a cabo en la base de datos de forma inconsciente.

Nunca los datos suministrados por el usuario de confianza, de la informática por lo que sólo validado, la regla se hace por coincidencia de patrones. En el siguiente ejemplo, el nombre de usuario nombre de usuario se limita a caracteres alfanuméricos o guiones, la longitud debe estar entre 8-20 caracteres - según la necesidad de modificar estas reglas.

si (preg_match ( "/ ^ \ w {8,20} $ /", $ _GET [ 'nombre de usuario'], $ partidos)) {
   $ Db = new SQLiteDatabase ( 'nombre');
   $ Result = @ $ db-> query ( "SELECT * FROM usuarios WHERE nombre de usuario = $ coincidencias [0]");
} Else {
   echo "nombre de usuario no aceptado";
}

Para demostrar este problema, tenga en cuenta este extracto hipótesis: Para demostrar el problema, tenga en cuenta este extracto:

$ Name = "Qadir '; CANCELACIÓN de los usuarios;";
@ $ Db-> query ( "SELECT * FROM usuarios WHERE nombre = '{$ nombre}'");

llamada de función para recuperar el nombre de la columna especificada por el nombre de usuario coincide con el registro de la tabla de usuario. Encircunstancias normales, $ nombre contiene sólo caracteres alfanuméricos y espacios, como Ilia cadena.Pero aquí, a nombre de $ añadió una nueva consulta, las llamadas a la base de datos provocarán problemas catastróficos: inyectada consulta de eliminación para eliminar todos los registros de usuarios.

A pesar de que no está permitido para ejecutar la interfaz de consulta o base de datos apilar varias consultas en una sola llamada de función, si se intenta apilar la consulta, a continuación, la llamada falla, pero SQLite y PostgreSQL todavía se apilan en la consulta, que proporciona la ejecución de una serie Todas las consultas, que puede causar graves problemas de seguridad.

Evitar la inyección de SQL

En lenguajes de programación como Perl y PHP, puede hábilmente manejar todo el carácter de escape. PHP provee programación cadena de lenguaje funcionessqlite_escape_string () para SQLite se utiliza para escapar de entrada de caracteres especiales.

si (get_magic_quotes_gpc ()) 
{
  $ Nombre = sqlite_escape_string ($ name);
}
$ Result = @ $ db-> query ( "SELECT * FROM usuarios WHERE nombre = '{$ nombre}'");

Aunque los datos se codifican de manera que la pieza de inserción hace seguro, pero hará que la comparación de texto simple, en la consulta, la columna contienedatos binarios, LIKE cláusula no está disponible.

Atención: addslashes () no deben reseñarse en la cadena de consulta SQLite, que dará lugar a resultados extraños cuando se recuperan datos.