Foros del Web » Programando para Internet » ASPX (.net) »

Caracteres permitidos para evitar la inyección SQL

Estas en el tema de Caracteres permitidos para evitar la inyección SQL en el foro de ASPX (.net) en Foros del Web. Buenas. Tras varios ataques de inyección SQL hay que tomar las riendas. ¿Con el filtro siguiente puedo prevenirlos en lo que se refiere a formularios? ...
  #1 (permalink)  
Antiguo 15/07/2008, 04:56
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Caracteres permitidos para evitar la inyección SQL

Buenas. Tras varios ataques de inyección SQL hay que tomar las riendas. ¿Con el filtro siguiente puedo prevenirlos en lo que se refiere a formularios?

Código PHP:
If Regex.Match(Me.txtCuadroTexto.Text"([^a-zA-Z0-9\s\.ºª\/,']+)").Success Then
  Response
.Write("Caracteres no permitidos")
  Exit 
Sub
End 
If
Dim textoFiltrado As String
textoFiltrado 
Me.txtCuadroTexto.Text.Replace("'","''"
Necesito que se puedan guardar en la base de datos los caracteres alfanuméricos, puntos, comas, espacios, "º", "ª", barra (no invertida) y comilla simple.

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 15/07/2008, 10:17
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 18 años, 9 meses
Puntos: 50
Respuesta: Caracteres permitidos para evitar la inyección SQL

Que hay Bravenap

Esta muy bien definido tu filtro contra el SQL inject, pero recuerda que también existe la comparación 1=1 lo cual le da en la torre a todo lo que intentemos ponerle como seguridad.

Si quieres utilizar los caracteres que mencionas entonces deberías de considerar el utilizar una función (desarrollada por ti) que suprima o identifique las palabras reservadas de SQL: Insert, Select, Delete, Drop, etc. y así permitirías a los usuarios poder utilizar esos caracteres.

Ahora bien, si los caracteres tu los insertas por código, es decir, que a tu cadena le adhieras los símbolos, no caería mal que compares esos signos antes de que los insertes tu, aquí ya es tu decisión.
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.
  #3 (permalink)  
Antiguo 15/07/2008, 12:15
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: Caracteres permitidos para evitar la inyección SQL

Tienes que utilizar consultas parametrizadas para evitar este tipo de problemas de seguridad, el uso de funciones como las que muestras usualmente no sirven de mucho y causan más problemas de los que "solucionan".

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #4 (permalink)  
Antiguo 16/07/2008, 01:19
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: Caracteres permitidos para evitar la inyección SQL

Gracias a los dos por las respuestas.

En cuanto a las consultas parametrizadas, ¿bastaría con utilizar procedimientos almacenados? Utilizo un clase propia para todas las consultas a las bases de datos:

Código:
Dim con As New ConexionesBD.datosSQL
con.EjecutaNonQuery("PA_MiProcedimiento @id = " & id & ", @valor = '" & valor & "'")
Sobre lo de identificar las palabras reservadas de SQL, he visto ejemplos de inclusión de código con cadenas que no tenían ni una sola palabra, eran todo caracteres numéricos o signos de puntuación. Además tendría que depurar mucha la expresión regular para que no me filtre palabras como SELECTivo, INSERTar o incluso si se escriben textos directamente en inglés que contengan las palabras reservadas.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #5 (permalink)  
Antiguo 16/07/2008, 09:21
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
Respuesta: Caracteres permitidos para evitar la inyección SQL

Cita:
Iniciado por Bravenap Ver Mensaje
Gracias a los dos por las respuestas.

En cuanto a las consultas parametrizadas, ¿bastaría con utilizar procedimientos almacenados? Utilizo un clase propia para todas las consultas a las bases de datos:

Código:
Dim con As New ConexionesBD.datosSQL
con.EjecutaNonQuery("PA_MiProcedimiento @id = " & id & ", @valor = '" & valor & "'")
Los procedimientos almacenados no aseguran nada, todo depende como esté implementada tu clase (y naturalmente también los procedimientos a los que invocas), pero si en el ejemplo que muestras haces una llamada como muestro abajo, entonces, ahí no hay ningún tipo de seguridad:
Código:
EXEC PA_MiProcedimiento @id = " & id & ", @valor = '" & valor & "'
Te sugiero leer un poco más http://msdn.microsoft.com/en-us/library/ms998271.aspx.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
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




La zona horaria es GMT -6. Ahora son las 12:53.