Foros del Web » Programando para Internet » Javascript »

¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

Estas en el tema de ¿Como validar que el usuario NO ingrese codigo SQL en un formulario? en el foro de Javascript en Foros del Web. Hola a todos... Estoy haciendo una aplicacion web en la cual se crea un registro, pero para seguridad se pide que no sea posible la ...
  #1 (permalink)  
Antiguo 06/07/2012, 10:09
Avatar de info4  
Fecha de Ingreso: marzo-2008
Mensajes: 55
Antigüedad: 16 años, 9 meses
Puntos: 2
¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

Hola a todos...
Estoy haciendo una aplicacion web en la cual se crea un registro, pero para seguridad se pide que no sea posible la insercion de codigo SQL en el formulario, ¿Como puedo validar e impedir que esto suceda?

Gracias por sus respuestas y su amable ayuda
__________________
"Pulvis es et in pulverum reverteris"
  #2 (permalink)  
Antiguo 06/07/2012, 10:18
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: ¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

usa técnicas de filtrado de SQL inyection, pero éso solo se hace en el servidor, JS no tiene nada que ver
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 06/07/2012, 14:13
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 7 meses
Puntos: 528
Respuesta: ¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

Bueno, no es que js no tenga nada que ver...

Podrías eliminar palabras clave de sql, mediante una lista, si estás seguro que esas palabras no deberían ingresar en tu formulario.

Desde luego, siempre es necesario filtrar los recibido del lado del servidor, por si javascript no estaba activo o si intencionalmente se enviaron datos tipo sql.
  #4 (permalink)  
Antiguo 06/07/2012, 14:57
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: ¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

exacto, solo dije que js no va al caso porque siempre se debe validar en el server, @info4 recuerda que validar en JS es opcional
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 06/07/2012, 18:56
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: ¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

Cita:
Iniciado por info4 Ver Mensaje
Hola a todos...
Estoy haciendo una aplicacion web en la cual se crea un registro, pero para seguridad se pide que no sea posible la insercion de codigo SQL en el formulario, ¿Como puedo validar e impedir que esto suceda?

Gracias por sus respuestas y su amable ayuda
si es tan solo para el sql, mysql_real_escape_string(), te debería bastar.
Ahora que para el resto
filter de php
strip_tags()
htmlspecialchars()
expresiones regulares
etc.

incluso desde el .htaccess de apache, podés hacer cosas como esta
Código Apache:
Ver original
  1. RewriteEngine On
  2. #Prevenir leechers, bots y otras porquerias
  3. RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
  4. RewriteCond %{HTTP_USER_AGENT} ^(-|\.|') [OR]
  5. RewriteCond %{HTTP_USER_AGENT} ^(.*)(<|>|%3C|%3E)(.*) [NC,OR]
  6. RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget)(.*) [NC,OR]
  7. RewriteCond %{HTTP_USER_AGENT} ^(.*)(libwww-perl|libwwwperl|snoopy|curl|wget|winhttp|python|nikto|scan|clshttp|archiver|loader|email|harvest|fetch|extract|grab|miner|suck|reaper|leach)(.*) [NC,OR]
  8.  
  9. #Prevenir inyección SQL, XSS, GET
  10. RewriteCond %{REQUEST_URI} ^(/,|/;|/<|/>|/'|/`|/%2C|/%3C|/%3E|/%27|/////) [NC,OR]
  11. RewriteCond %{HTTP_REFERER} ^(.*)(%00|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|<|>|'|%3C|%3E|%26%23|%27|%60)(.*) [NC,OR]
  12. RewriteCond %{QUERY_STRING} ^(.*)(%00|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|%3C|%3E|%27|%26%23|%60)(.*) [NC,OR]
  13. RewriteCond %{QUERY_STRING} ^(.*)('|-|<|>|,|/|\\|\.a|\.c|\.t|\.d|\.p|\.i|\.e|\.j)(.*) [NC,OR]
  14. RewriteCond %{HTTP_COOKIE} ^(.*)(<|>|'|%3C|%3E|%27)(.*) [NC]
  15.  
  16. RewriteRule ^(.*)$ /error.shtml [NC,L]

Y si pensás en validación, olvidate de que existe javascript, asi de simple.
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #6 (permalink)  
Antiguo 06/07/2012, 21:43
 
Fecha de Ingreso: noviembre-2010
Mensajes: 42
Antigüedad: 14 años
Puntos: 2
Respuesta: ¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

Validar del lado del cliente no evita las injecciones SQL, aunque para responderte a tu pregunta puedes utilizar expresiones regulares y alli indicar que caracteres quieres aceptar. e aqui un ejemplo basico.

Código Javascript:
Ver original
  1. <script>
  2. function validar(e,expresion_regular){
  3.     return expresion_regular.test(String.fromCharCode(e.which));
  4.     }
  5. </script>
  6. <input type="text" onkeypress="return validar(event,/[a-z]/)" />

Lo unico que tienes que cambiar es la expresion regular /[a-z]/ en cada campo de texto.

Con respecto a mysql_real_escape_string(), esa funcion esta descontinuada.
Yo personalmente utilizo FILTER_SANITIZE_SPECIAL_CHARS, asi el usuario escribe lo que sea y queda libre de injeccion sql.
Tambien puedes utilizar MySQLi o PDO_MySQL.

Última edición por leonardo308; 06/07/2012 a las 21:51
  #7 (permalink)  
Antiguo 06/07/2012, 22:18
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: ¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

Cita:
Iniciado por leonardo308 Ver Mensaje
Validar del lado del cliente no evita las injecciones SQL, aunque para responderte a tu pregunta puedes utilizar expresiones regulares y alli indicar que caracteres quieres aceptar. e aqui un ejemplo basico.

Código Javascript:
Ver original
  1. <script>
  2. function validar(e,expresion_regular){
  3.     return expresion_regular.test(String.fromCharCode(e.which));
  4.     }
  5. </script>
  6. <input type="text" onkeypress="return validar(event,/[a-z]/)" />

Lo unico que tienes que cambiar es la expresion regular /[a-z]/ en cada campo de texto.

Con respecto a mysql_real_escape_string(), esa funcion esta descontinuada.
Yo personalmente utilizo FILTER_SANITIZE_SPECIAL_CHARS, asi el usuario escribe lo que sea y queda libre de injeccion sql.
Tambien puedes utilizar MySQLi o PDO_MySQL.
Esta desaconsejado no discontinuada (como puede ser el caso de eregi()), lo que no es lo mismo.
Ya mencioné la extensión filter, pero lamentablemente muchos servidores no la tienen habilitada, además de que en muchos otros casos utilizan versiones viejas de php.
Asi que como alternativa todavía es válida.
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #8 (permalink)  
Antiguo 10/07/2012, 10:13
Avatar de info4  
Fecha de Ingreso: marzo-2008
Mensajes: 55
Antigüedad: 16 años, 9 meses
Puntos: 2
Respuesta: ¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

Hola que tal.
Antes que nada gracias por sus respuestas.

Bueno, lo de validar en el servidor me parece muy bien, sin embargo dudo mucho que yo como desarrollador tenga acceso al servidor, ya que es de otra compañia para la cual se hace la aplicacion, por ello he pedido que sea validado el formulario desde JS y pueda "evitarse" la inyeccion SQL, aunque como me comentan si es mejor hacerlo al servidor.
__________________
"Pulvis es et in pulverum reverteris"
  #9 (permalink)  
Antiguo 10/07/2012, 10:39
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: ¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

Cita:
Iniciado por info4 Ver Mensaje
Hola que tal.
Antes que nada gracias por sus respuestas.

Bueno, lo de validar en el servidor me parece muy bien, sin embargo dudo mucho que yo como desarrollador tenga acceso al servidor, ya que es de otra compañia para la cual se hace la aplicacion, por ello he pedido que sea validado el formulario desde JS y pueda "evitarse" la inyeccion SQL, aunque como me comentan si es mejor hacerlo al servidor.
@info4
Cuando en programación web se habla de validar del lado del servidor se habla de validar en un lenguaje que se ejecute del lado del servidor. (php por ejemplo)
Si tu código de validación está escrito en php, estás "validando en el servidor", y no es responsabilidad tuya si un tercero al cual le proporcionás la aplicación decide no usar y/o alterar dicho código.
Existen otros métodos que consisten en la habilitación ó instalación de herramientas por parte del Administrador del Server (hosting), como podría ser la de mod_security en Apache, obviamente en ese caso vos estás excluido de esa decisión.

En conclusión, vos, como "desarrollador" podés validar perfectamente del lado del servidor, si es que sabés php, por supuesto.

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #10 (permalink)  
Antiguo 25/07/2012, 09:54
Avatar de info4  
Fecha de Ingreso: marzo-2008
Mensajes: 55
Antigüedad: 16 años, 9 meses
Puntos: 2
Respuesta: ¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

Cita:
Iniciado por emprear Ver Mensaje
@info4
Cuando en programación web se habla de validar del lado del servidor se habla de validar en un lenguaje que se ejecute del lado del servidor. (php por ejemplo)
Si tu código de validación está escrito en php, estás "validando en el servidor", y no es responsabilidad tuya si un tercero al cual le proporcionás la aplicación decide no usar y/o alterar dicho código.
Existen otros métodos que consisten en la habilitación ó instalación de herramientas por parte del Administrador del Server (hosting), como podría ser la de mod_security en Apache, obviamente en ese caso vos estás excluido de esa decisión.

En conclusión, vos, como "desarrollador" podés validar perfectamente del lado del servidor, si es que sabés php, por supuesto.

Saludos
Que tal
Pues a decir verdad, recién me he introducido en la parte de programación web debido al proyecto que estoy realizando, por ello no entiendo muchas cosas, por ende estoy aprendiendo php y javascript, dado mi poco conocimiento creí que podia ser validado con javascript, pero entonces el impedir la inyección de SQL lo puedo hacer con PHP, ¿Es correcto esto?
Saludos
__________________
"Pulvis es et in pulverum reverteris"
  #11 (permalink)  
Antiguo 25/07/2012, 09:56
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: ¿Como validar que el usuario NO ingrese codigo SQL en un formulario?

@info4: exactamente, es en el servidor donde debes evitarlo (sea PHP, JSP, ASP u otro), ya que usar sólo javascript es un riesgo, el usuario lo puede saltar o desactivar, lo puedes usar, pero sin dejar del lado la protección en el servidor.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: formulario, sql, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:21.