"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Es suficiente usar `mysql_real_escape_string()` y `mysql_escape_string()` para proteger su aplicación?

¿Es suficiente usar `mysql_real_escape_string()` y `mysql_escape_string()` para proteger su aplicación?

Publicado el 2024-12-22
Navegar:485

Is Using `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure Your Application?

¿Son mysql_real_escape_string() y mysql_escape_string() suficientes para la seguridad de aplicaciones?

Si bien estas funciones pueden proporcionar cierta protección contra la inyección de SQL y otros ataques , no abordan ciertas vulnerabilidades.

SQL Inyección

Mysql_real_escape_string() aún puede exponer su aplicación a inyección SQL si maneja incorrectamente las variables PHP dentro de las consultas. Considere el siguiente ejemplo:

$sql = "SELECT number FROM PhoneNumbers WHERE " . 
        mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  

Esta consulta puede ser manipulada por un atacante para ejecutar sentencias SQL no autorizadas, ya que mysql_real_escape_string() no está diseñado para proteger nombres de tablas, nombres de columnas o campos LIMIT.

Ataques similares

Mysql_real_escape_string() es insuficiente para evitar exploits LIKE. Un atacante podría ingresar un valor malicioso como "%%" para devolver todos los registros, lo que podría comprometer información confidencial.

Explosiones de Charset

Ciertos navegadores pueden ser vulnerables a charset exploits, lo que permite a los atacantes inyectar caracteres maliciosos que evitan los mecanismos de escape y ejecutan comandos SQL arbitrarios.

Declaraciones preparadas: una versión completa Solución

Para proteger eficazmente su aplicación, se recomienda utilizar declaraciones preparadas en lugar de mysql_real_escape_string(). Las declaraciones preparadas ejecutan consultas SQL con valores proporcionados por el usuario vinculándolos como parámetros. Esto elimina la necesidad de escape manual y garantiza que solo se ejecute SQL autorizado.

Aquí hay un ejemplo del uso de una declaración preparada en PHP:

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.example.com/';
$limit = 1;

// Validate the search parameter column.
$validColumns = array('url', 'last_fetched');
if (!in_array($column, $validColumns)) { $column = 'id'; }

$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));
while (($data = $statement->fetch())) { }

Las declaraciones preparadas ofrecen un mecanismo de defensa proactivo al aprovechar las características de seguridad del servidor de base de datos subyacente. Son inherentemente resistentes a ataques conocidos y desconocidos, lo que garantiza la integridad de sus datos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3