Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Gambinoh

#581
PHP / Funcionamiento de mysql_real_escape_string()
30 Diciembre 2010, 18:55 PM
Hola a todos. Tengo algunas dudas a cerca de la función de PHP mysql_real_escape_string.

Se el funcionamiento y he leído su descripción en php.net pero no comprendo del todo porqué evita una inyección sql.

Por ejemplo si  mysql_real_escape_string() escapa caracteres tipo ", ', *,/, etc. quiere decir que los interpreta no como comillas que contienen un string sino como parte del texto (según yo tengo entendido). Entonces si yo tengo este query:
Citar
$sql = "SELECT * FROM tabla WHERE campo = '$id' ORDER BY id ASC  LIMIT $inicio, $fin";

$query = mysql_query($sql);

La inyección sql debería de querer atacar reemplazando la variable $id por código que sería interpretado como una instrucción sql que en el peor de los casos directamente modificaría mi tabla o daría un error del que el "maleante xD" obtendría información.

Entonces el atacante escribiría algo como:

Citarpagina.php?"codigomalicioso"=$id

Luego yo al usar en la recepción $_GET['id'], si lo coloco de esta manera estaría filtrando su comentario malicioso:

Citar$id = mysql_real_escape_string($_GET['id']);

¿Entonces mysql_real_escape_string lo que haría es hacer que se vean todas las ",',*,/,etc. del códico o cómo?

Si estoy suponiendo alguna barbaridad decírmelo xD, sólo quiero enterarme de que falla en mi razonamiento.

Por otro lado parece que el peligro de la inyección sql en principio estaría en la recepción $_GET y $_POST de números, letras y operadores intruducidos vía URL.

Veo que hay gente que coloca entre dos puntos la $id tal que así:

Citar... FROM tabla WHERE campo = '.$id.' ....

¿Explicación a esos dos puntos?

¿Alguien me explica la lógica de usar esto ( ' or '1'='1) como contraseña?  Or quiere decir True si alguna de las dos posibilidades es verdadera. La segunda está claro que lo es. ¿Las comillas son para simular espacios entre los operadores y los números?

Pero ¿en que afectaría usar ahí mysql_real_escape_string?

Que en lugar de or 1 = 1 se leería ' or '1'='1?

¿En que partes de mi código a parte de en aquellas en las que un valor es intruducido por URL y captado por GET o POST es necesario usar mysql_real_escape_string?