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);
$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:
Citar
pagina.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?