Latest web development tutorials

inyección de MySQL y SQL

Si se obtienen los datos introducidos por el usuario a través de la web y la inserta en una base de datos MySQL, entonces es posible problemas de seguridad de inyección SQL.

Esta sección le dirá cómo evitar la inyección de SQL, y para filtrar los caracteres de inyección SQL en un script.

El llamado de inyección SQL, es a través del comando SQL en el formulario Web someter o entrar en el nombre de dominio o la solicitud de página cadena de consulta, y en última instancia engañar servidor para ejecutar comandos SQL maliciosos.

Nos entrada de usuario nunca la confianza, debemos identificar los datos introducidos por el usuario son inseguros, que todos necesitamos para la entrada del usuario proceso de filtrado de datos.

En el siguiente ejemplo, el nombre de usuario introducido debe ser una combinación de letras, números y guiones bajos, y la longitud del nombre de usuario es entre 8-20 caracteres:

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

Veamos la situación cuando no hay un filtro SQL aparecen caracteres especiales:

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

Por encima de la declaración de la inyección, no tenemos para filtrar la variable $ name, $ nombre que no es necesario insertar la instrucción SQL, se eliminarán todos los datos de los usuarios de la tabla.

mysql_query en PHP () no se le permite ejecutar múltiples sentencias SQL, pero en SQLite y PostgreSQL puede ejecutar varias instrucciones SQL al mismo tiempo, por lo que los usuarios de estos datos que necesitan una verificación estricta.

Evitar la inyección de SQL, tenemos que prestar atención a los siguientes puntos:

  • 1. Nunca entrada del usuario de confianza. La verificación de la entrada del usuario, puede utilizar expresiones regulares, o limitar la longitud; marcas individuales y dobles comillas "-" en la conversión.
  • 2. Nunca utilice SQL ensamblaje dinámico, puede utilizar los parámetros de la utilización directa de SQL o procedimientos almacenados para acceso de consulta de datos.
  • 3. Nunca utilizar el Administrador de conexión de base de privilegios, uso limitado de permisos individuales para cada conexión de base de datos de aplicación.
  • 4. No almacene información confidencial directamente, cifrado o hash a cabo contraseñas e información sensible.
  • 5. La información de excepción de aplicación se debe dar el menor número de indicaciones, lo mejor es utilizar un mensaje embalaje original mensaje de error personalizado de error
  • Detección lugar de la inyección 6.sql en general o plataforma de soporte de software para detectar, el software utilizado sql herramientas de detección de inyección jsky, página web sitio de Internet millones de pensamiento que hay herramientas de detección de plataforma de seguridad. MDCSOFT SCAN gusta. Usando MDCSOFT-IPS puede ser la inyección efectiva defensa de SQL, ataques XSS.

Evitar la inyección de SQL

En lenguajes de programación como Perl y PHP se puede escapar de los datos introducidos por el usuario con el fin de evitar la inyección de SQL.

extensión PHP MySQL proporciona la función mysql_real_escape_string () para escapar caracteres especiales de entrada.

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

Al igual que la inyección comunicado

como la consulta, si el usuario introduce un valor de "_" y "%", entonces esto sucede: El usuario sólo estaba tratando de consulta "abcd_", resultado de la consulta allí "abcd _", "ABCDE", "ABCDF" etc; usuario consultar el "30%" (Nota: el treinta por ciento) van a tener problemas.

En el script PHP, podemos utilizar addcslashes () para manejar el caso anterior, los siguientes ejemplos:

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

addcslashes () las funciones antes de especificar con una barra invertida.

sintaxis:

addcslashes(string,characters)
parámetros descripción
cadena Requerido. Para comprobar la cadena especificada.
caracteres Opcional. Prescrito por addcslashes () afectan a caracteres específicos o grupos de caracteres.

Puede ver la aplicación específica: los addcslashes () de PHP