Tutorial: Modo correcto de evitar inyección SQL en consultas

  • Autor Usuario eliminado 44716
  • Fecha de inicio
U

Usuario eliminado 44716

Hola a todos, como últimamente he visto que esto lo preguntan mucho y no he visto una respuesta del todo acertada por el foro he decidido colocar este post para que vean cual es la forma mejor de hacer esto para evitar inyecciones SQL a nuestra base de datos.

Con las inyecciones de SQL pueden modificar una consulta a nuestra base de datos introduciendo, una serie de comillas, puntos y coma y demás según nuestro código y la configuración de nuestro php.ini

Muchos creen que con agregar la función mysqli_real_scape_string() ya está todo hecho, pero hay algunos casos en los que no. También he visto gente que agrega addlashes() sin saber bien lo que hace, ni tampoco conociendo que hay casos en las que no se debe usar esta función.

Debemos saber que addlashes escapa un string con barras invertidas y que si en nuestro servidor están activadas las magic_quotes se escapará dos veces la cadena, por lo cual antes de usar esta función debemos comprobar cual es el estado de este parámetro en nuestro servidor, para eso PHP tiene su propia función.

Aquí pongo el código explicado por pasos:

PHP:
<?php

//Si las magic_quotes están desactivadas procedemos nosotros mismos a escapar la cadena, pero si ya están activadas, no tendremos que hacerlo

if (!get_magic_quotes_gpc()) {
    $consulta = addslashes($_POST['consulta']);
}
else {
    $consulta = $_POST['consulta'];
}

//Una vez hemos hecho esto si estamos usando SQL nos valemos de la función mysqli_real_escape_string que también se encarga de convertir la cadena en legal para SQL

    $consulta = mysqli_real_escape_string($login,$consulta);

?>

Espero que les sirva y saludos :encouragement:
 
Última edición por un moderador:

quimbox

1
Iota
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Suscripción a IA
Desde
22 Mar 2012
Mensajes
2.346
Gracias por el aporte amigo. :encouragement:
 

Alan98

Beta
Social Media
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
12 Dic 2012
Mensajes
118
Unas observaciones que hice :ghost:
Con mysqli_real_escape_string ya basta, no hace falta el addslashes ya que mysqli_real_escape_string se encargará de escapar los ', ", etc.

Otra cosa, el estilo por procedimientos de mysqli_real_escape_string no es el mismo que se utiliza en mysql_real_escape_string. El modo correcto de utilizar aquella función es añadir el link identificador de la conexión a MySQLi, quedando, por ejemplo, si el link es $db:
PHP:
$consulta = mysqli_real_escape_string($db, $consulta);

No es exactamente igual el estilo de MySQLi al de MySQL.

Saludos.
 
U

Usuario eliminado 44716

Unas observaciones que hice :ghost:
Con mysqli_real_escape_string ya basta, no hace falta el addslashes ya que mysqli_real_escape_string se encargará de escapar los ', ", etc.

Otra cosa, el estilo por procedimientos de mysqli_real_escape_string no es el mismo que se utiliza en mysql_real_escape_string. El modo correcto de utilizar aquella función es añadir el link identificador de la conexión a MySQLi, quedando, por ejemplo, si el link es $db:
PHP:
$consulta = mysqli_real_escape_string($db, $consulta);

No es exactamente igual el estilo de MySQLi al de MySQL.

Saludos.

Según leí en sitios hay algunas cosas que se necesitan escapar con la función addlashes porque a veces mysqli_real_escape_string no lo hace. Yo prefiero poner las dos por sí acaso.

En cuanto a la forma que comentas tienes razón la tomé de la página de php y le añadí la i pero se me olvidó ver los parámetros que se le pasan, ya está corregido.
 

jhearvis

Gamma
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
7 May 2012
Mensajes
167
Gracias por el aporte, yo evito las inyecciones con otras funciones :encouragement:
 
Arriba