Aunque muchas fuentes citan el htmlspecialchars función con ENT_QUOTES a ser no suficiente para evitar la inyección SQL, ninguno de ellos proporcionan una prueba del concepto. No puedo pensar en alguna posibilidad mí mismo.

Consideremos el siguiente ejemplo:

$username = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
$sql = "SELECT * from user WHERE name='$username'";
mysql_query($sql,...);

Puede proporcionar un ejemplo, distintos de los cubiertos por el caso cuando La inyección de SQL recibe alrededor de mysql_real_escape_string()?

¿por qué lo preguntas?
sólo usar mysqli
lo mysql_real_escape_string hacer?
PHP htmlspecialchars función es para escapar de caracteres que tienen un significado especial a un navegador, tales como soportes de ángulo, para hacerlos aparecer como caracteres normales en lugar de ser interpretado como código HTML. Tiene nada para hacer con SQL o la prevención de la inyección de SQL.

OriginalEl autor crenate | 2014-03-01

2 Comentarios

  1. 11

    El personaje que htmlspecialchars no puede codificar el carácter crítico \0 (byte NULL), \b (retroceso), así como la \ carácter.

    Con el fin de aprovechar esto, usted necesita una declaración con múltiples puntos de inyección. Con esto se puede escapar el delimitador de cierre de una cadena literal y así ampliar hasta el próximo delimitador de inicio de la siguiente literal de cadena. Tres literales de cadena, cada uno con un punto de inyección puede transformarse en dos literales de cadena.

    Por ejemplo:

    SELECT * from user WHERE (name='$login' OR email='$login') AND password='$password'

    Ahora, con los siguientes valores:

    login:    ) OR 1=1 /*\
    password: */--

    La expresión resultante se parece a esto:

    SELECT * from user WHERE (name=') OR 1=1 /*\' OR email=') OR 1=1 /*\') AND password='*/--'

    Que es equivalente a:

    SELECT * from user WHERE (name=') OR 1=1 /*\' OR email=') OR 1=1

    OriginalEl autor Gumbo

  2. 1

    Cadenas no son la única cosa SQL interactúa.

    $result = "SELECT * FROM user WHERE id = " . htmlspecialchars($_GET['id']);

    Aquí es donde consultas con parámetros vienen en muy práctico.

    Ni mysql_real_escape_string ayuda aquí. Así que esto no es un argumento de por qué htmlspecialchars es inseguro en esta comparación.
    Sí, que es por qué usted debe utilizar consultas parametrizadas en MySQLi o PDO. mysql_real_escape_string está en desuso junto con el resto de mysql_ funciones. Me proporcionó un ejemplo por su pregunta – una situación en la que htmlspecialchars de la entrada del usuario no realiza el procesamiento de la consulta SQL seguro. La pregunta no mencionar mysql_real_escape_string a todos.
    Yo creo que él está a la espera de lo que de entrada de $_GET[‘id’] puede conducir a la Inyección de SQL, si htmlspecialchars se utiliza con ENT_QUOTES
    En este ejemplo, $_GET['id'] ser 1 OR 1=1 funcionaría como la inyección, y htmlspecialchars no afectan en absoluto.

    OriginalEl autor ceejayoz

Dejar respuesta

Please enter your comment!
Please enter your name here