elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Evitar Inyeccion en MySQL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Evitar Inyeccion en MySQL  (Leído 9,302 veces)
ZharkD

Desconectado Desconectado

Mensajes: 112


Ver Perfil WWW
Evitar Inyeccion en MySQL
« en: 13 Mayo 2010, 21:12 pm »

Hola,

Pues hace unos dias me pase a leer unos temas que encontre por el foro ( http://foro.elhacker.net/desarrollo_web/evitar_inyeccion_de_sql_en_php-t32862.0.html ), sin embargo, estuve viendo que si una inscrutccion se envia, existe la posibilidad de que se ejecute ANTES de que los campos enviados sean validados, lo cual es preocupante.

Cita de: ESQUEMA
- Se carga la web
- Se llena el formulario
- Se envia
- Se procesan las instrucciones del formulario (instrucciones para "inyectar" base de datos)
- Entran las instrucciones para validar el formulario (aunque esten incluidas antes de <html>), o al menos eso creo.
- Se carga la web.

Una idea "tonta y simple" que me paso por la mente es "limitar los campos de texto" es decir, ajustarlos a un maximo de 20 caracteres cuando mucho. Eso podria evitar inyecciones sql?

Ademas, encontre algo que supuestamente (no lo eh comprobado por que aun estoy tratando de descifrar cada cosa que se hace) valida campos de un formulario desde el lado del cliente, lo que no se es si lo hace antes o despues de enviar el formulario:
http://web.ontuts.com/tutoriales/como-validar-un-formulario-con-php-y-javascript-jquery/

La parte de php es muy similar a la que yo utilizo, valido los campos de una manera muy similar desde el lado del servidor, sin embargo como les comento, tengo el temor de que las instrucciones puedan ser enviadas ANTES de que entre la validacion. Sera posible evitarlo limitando los campos de texto a un maximo de caracteres?

Gracias por su atencion y paciencia.


« Última modificación: 13 Mayo 2010, 21:17 pm por ZharkD » En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: Evitar Inyeccion en MySQL
« Respuesta #1 en: 13 Mayo 2010, 22:06 pm »

Una idea "tonta y simple" que me paso por la mente es "limitar los campos de texto" es decir, ajustarlos a un maximo de 20 caracteres cuando mucho. Eso podria evitar inyecciones sql?
La iSQL, se caracteriza por tener una comilla simple para escapar la consulta inicial y modificarla por la iSQL. Así que limitar el numero de caracteres ingresados dentro de los textbox, no va a cumplir con tus necesidades, además dependiendo del metodo que uses, se puede bypassear el maxlength. Por ejemplo:
index.php En este ejemplos el limite de caracteres es de 5, pero modificando la peticion GET o POST, podemos agregar más valores.
Código
  1. <html>
  2. <head><title>PoC</title></head>
  3. <body>
  4. <form action='index.php' method='POST'>
  5. <input type="text" name="txtPoC" maxlength="5"><br>
  6. <button name="btnEnviar" value="Enviar" type="submit"></button>
  7. </form>
  8. <?PHP
  9. echo $_POST['txtPoC'];
  10. ?>
  11. </body>
  12. </html>

Código:
txtPoC=123456789....&btnEnviar=Enviar


En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
luiggy2


Desconectado Desconectado

Mensajes: 439


¡ Hello word ! XD


Ver Perfil
Re: Evitar Inyeccion en MySQL
« Respuesta #2 en: 13 Mayo 2010, 22:09 pm »

La verdad es que validarlo del lado del cliente es una tontería (si pones limitación de caracteres se modifica el formulario y punto, y si lo haces mediante javascript siempre se podrá bloquear).

Por consiguiente lo mejor es validarlo del lado del servidor. Si lo haces en php, mirate esto: http://es2.php.net/manual/es/function.mysql-real-escape-string.php.

Código

La duda que plantes de que si se va a ejecutar antes o no se que, la verdad es que no me he enterado mucho, pero espero que con esto te sirva, si no, pregunta que para eso estamos.



Saludos!
En línea

" Las grandes ideas suelen salir la mayoría de veces de grandes estupideces "
ZharkD

Desconectado Desconectado

Mensajes: 112


Ver Perfil WWW
Re: Evitar Inyeccion en MySQL
« Respuesta #3 en: 13 Mayo 2010, 23:37 pm »

@Alex@ShellRoot
Wow... esa no me la sabia :S

@luiggy2
He revisado el link que me proporcionas de php.net y no entiendo muy bien "la finalidad" de la funcion, en el ejemplo #3, mencionan usar otra mas (stripslashes()), sin embargo mencionan que es requerido (o asi entiendo)  el "magic_quotes_gpc" y cuando visito la referencia de esa opcion me dice que ya esta obsoleta. Segun entiendo la finalidad de la funcion (stripslashes()) es remover las barras invertidas.

Para validar lo que estoy haciendo es comparar la cadena que genera el campo de texto, que solo acepte valor alfanumerico, de tal manera que las comillas, diagonales y demas regresan un error en el campo de texto e interfaz con el usuario "caracter invalido". Pero como menciono, si alguien escribe por ejemplo " '; mysql_query(...)" en el campo de texto, creo que pasara a ejecutarse antes de la validacion (o al menos eso creo), ya que la pagina "MANDA" mediante el POST los valores del campo de texto (los cuales segun mi analizis, se ejecutan) y despues verifica si son o no validos (aunque esten en la misma pagina/script).

Se me ocurrio algo aunque obio se vuelve mas tedioso pero creo que es mas seguro, y si cierro la conexion con la base de datos cada, digamos, "cierre de pagina" (una vez que se carga el script) y la abro despues de un if()?, de esta manera, garantizo que antes de if() podre validar los campos de texto y NO se podran realizar consultas anteriormente ya que no hay "conexion establecida", es fiable?
« Última modificación: 13 Mayo 2010, 23:44 pm por ZharkD » En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: Evitar Inyeccion en MySQL
« Respuesta #4 en: 13 Mayo 2010, 23:39 pm »

Se me olvidaba, dentro del siguiente enlace http://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_9510-t244090.0.html, buscad el apartado de PREVENCIÓN
En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
BHK

Desconectado Desconectado

Mensajes: 14


The Hacktivism is not a crime


Ver Perfil WWW
Re: Evitar Inyeccion en MySQL
« Respuesta #5 en: 14 Mayo 2010, 00:51 am »

si limitas a 20 carácteres puedo hacerte un infile y llamar a un archivo sql de instrucciones externas y hacer cualquier inyección que yo quiera, además estarias restringiendo a tus usuarios solamente no al atacante.
En línea

ZharkD

Desconectado Desconectado

Mensajes: 112


Ver Perfil WWW
Re: Evitar Inyeccion en MySQL
« Respuesta #6 en: 14 Mayo 2010, 01:08 am »

si limitas a 20 carácteres puedo hacerte un infile y llamar a un archivo sql de instrucciones externas y hacer cualquier inyección que yo quiera, además estarias restringiendo a tus usuarios solamente no al atacante.
wtf...!
ok ok mala idea y que tal lo de mi post anterior?

Gracias a todos por su cooperacion.
En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: Evitar Inyeccion en MySQL
« Respuesta #7 en: 14 Mayo 2010, 02:43 am »

Se me ocurrio algo aunque obio se vuelve mas tedioso pero creo que es mas seguro, y si cierro la conexion con la base de datos cada, digamos, "cierre de pagina" (una vez que se carga el script) y la abro despues de un if()?, de esta manera, garantizo que antes de if() podre validar los campos de texto y NO se podran realizar consultas anteriormente ya que no hay "conexion establecida", es fiable?
No le veo funcionamiento a eso, de igual manera la iSQL se realiza dentro del formulario de la pagina, que obviamente si la estamos visualizando, está establecida la conexión a la base de datos. Tal vez valdría en el caso de que la iSQL se realizará sin estar en el formulario de la pagina. De igual forma, no es la mejor forma de evitar una iSQL. Mirad el LINK que te deje en POST anteriores.
En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
ZharkD

Desconectado Desconectado

Mensajes: 112


Ver Perfil WWW
Re: Evitar Inyeccion en MySQL
« Respuesta #8 en: 14 Mayo 2010, 04:46 am »

Aver si entiendo bien,

Me pase a leer algunos manuales en linea para comprender mejor los links que me dejaron arriba y esta es mi deduccion, por favor corrijanme si estoy mal:
"Una inyeccion se puede prevenir si se realiza la validacion DESPUES del $_POST pero ANTES de realizar mis consultas en las bases de datos."
A mayores palabras, un ejemplo:
Digamos que yo tengo un campo de texto (como dueño, script). Entonces proporciono ese campo a un visitante, el cual curiosamente ingresa " '); mysql_query(....); " entonces presiona enviar. Hasta ahora solo se ha asignado el valor de " '); mysql_query(....); " a la variable $_POST['ejemplo'] como contenido "textual" unicamente. Ahora bien, apra evitar que se genere la consulta que el visitante realizo, debo validar esa variable con algunas funciones como stripslashes(), mysql_real_escape_string() y otras mas. Se procede con una condicion, la cual establecera si la variable enviada es valida, en caso que lo sea generara mi consulta (mi script), en caso contrario, regresara un error en la webform y de esta manera evitara la inyeccion.

En resumen, una inyeccion NO procede hasta que el mismo script propio del dueño le da acceso tras generar una consulta del script, dando paso de esta manera a que la variable que solo era texto, se convierta en una instruccion para afectarnos.

Es correcta mi deduccion?
« Última modificación: 14 Mayo 2010, 04:49 am por ZharkD » En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: Evitar Inyeccion en MySQL
« Respuesta #9 en: 14 Mayo 2010, 04:49 am »

xD, la verdad, no entendí un fuck!  :rolleyes:
En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Inyeccion SQL en mysql 3.X
Nivel Web
Cleantesdeasso 0 2,154 Último mensaje 8 Diciembre 2011, 10:21 am
por Cleantesdeasso
Como evitar una inyección sql?
Nivel Web
andvilla07 1 2,112 Último mensaje 26 Noviembre 2012, 15:46 pm
por Shell Root
Cómo evitar inyección SQL?
PHP
exelovin 6 3,768 Último mensaje 13 Abril 2013, 12:33 pm
por exelovin
Se puede evitar inyección DLL ?
Análisis y Diseño de Malware
Vaagish 4 3,443 Último mensaje 29 Noviembre 2013, 22:45 pm
por Vaagish
Evitar inyeccion y burp suite java
Seguridad
kkshihack 0 1,874 Último mensaje 11 Febrero 2016, 18:57 pm
por kkshihack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines