Prevenir inyecciones SQL en ASP
2 seguidores
Buenas,
Pues yo normalmente trabajo con PHP y para prevenir inyecciones SQL sigo los consejos de este artículo.
Para ASP he encontrado algunas cosillas lo que hacen básicamente es escapar caracteres:
http://www.maestrosdelweb.com/editorial/inyecsql/
¿Alguien me puede recomendar algún método mejor? ¿No hay en ASP algo similar a mysql_real_escape_string()?
Cenks!
deeleman
orange
¿Alguien me puede recomendar algún método mejor? ¿No hay en ASP algo similar a mysql_real_escape_string()?
Cenks!
No, no lo hay, por lo menos ASP clásico. En ASP.NET hay muchas cosas, pero eso es otra historia. Buscando por la web es probable que encuentres alguna función ya realizada que se encargue de devovler la cadena SQL limpita de carateres chungos.
En cualquier caso, lo más recomendable es emplear Procedimientos Almacenados, y así te evitas todos esos problemas y creas una capa adicional de abstracción en la aplicación que ayuda a organizar mejor su lógica de negocio.
P.D.: ¿El naranjo trabajando en ASP? Cosas veredes...
orange
Al naranjo le ha caido de rebote y de soslayo, asi que imagínate qué contento estoy...
Lo de los procedimientos almacenados me parece complejo de implementar en este proyecto.
deeleman
Lo de los procedimientos almacenados apenas requiere unos conocimientos mínimos de T-SQL, y una vez que empiezas ya no puedes parar: Dejas a tu novia, tus amigos, tus hijos y tu casa y te entregas en cuerpo y alma a ellos, cediéndoles todo tu dinero y posesiones a cambio del Karma de la felicidad...
... Pero como tu eres muy conservador, creo que esto te servirá:
<code>Function sql_real_escape_string(sqlString)
Dim re
Set re = new RegExp
With re
.Global = True
.IgnoreCase = True
.Pattern = "[^a-zA-Z0-9.,-s?]"
End With
sql_real_escape_string = re.Replace(sqlString,"")
End Function
</code>
Si deseas afinar más, puedes cambiar tu mismo la cadena de expresión regular [^a-zA-Z0-9.,-s?] por la que estimes más oportuno.
orange
Mooooolas
Para invocarla algo así?
<code>sql_real_escape_string(variableDelFormulario)</code>
deeleman
Bueno, más bien está pensada para parsear una cadena SQL entera, pero también puede servir.
Pongamos por caso una instancia de Comando/Recordset cualquiera:
<code>
Dim rs, recordset
Set rsCom = Server.CreateObject("ADODB.Command")
rsCom.ActiveConnection = vdvConn
rsCom.CommandText = sql_real_escape_string(sentencia_sql)
Set recordset = rsCom.Execute
</code>
Pero como digo, también la puedes emplear para limpiar variables del formulario una a una.
orange
Bueno, para lo que lo quiero es más sencillo limpiar una sentencia que 3 variables.
Te debo unas cañitas!!