SQL Injection y Webmatrix

Image 19

Una de las principales caracteristicas de las que escuchamos cuando nos hablan acerca de Webmatrix es su sencillez, lo cual permite a programadores novatos empezar pronto en el campo del desarrollo web, ahora bien, esto no quiere decir que sea una herramienta basica y no permita a un programador experimentado hacer uso de este para desempeñar su trabajo, al contrario, webmatrix despliega tres campos que todo programador debe tocar en algun momento poco o mucho cuando esta diseñando para web. Estos son el manejo del servidor, la programación como tal y el SEO. Ahora bien, este articulo no trata precisamente sobre las bondades en general sino de una muy especifica que quizas se pasa por alto en los tutoriales que se encuentran haciendo una pequeña busqueda,  y es que RAZOR el lenguaje que se utiliza principalmente para el manejo de vistas en ASP.NET MVC3 tiene incluida protección contra SQL INJECTION de forma nativa.

Vamos a ver un poco a que me refiero, normalmente en un tutorial encontraras un código sencillo para hacer un formulario que envie información a nuestra base de datos, pero no notas la protección que se tiene, por lo que si no has usado el lenguaje con anterioridad a primera vista podrías pensar en una vulnerabilidad, es algo así:

@{if(IsPost){ 
var title = Request["titulo"]; 
var intro = Request["tema"];
var author = Request["autor"]; 
var db = Database.Open("MisPeliculas"); 
var sql = "INSERT INTO Articles (titulo, tema, autor) VALUES (@0, @1, @2 )"db.Execute(sql, titulo, tema, autor); } 
<!DOCTYPE html<html lang="en"> 
<head> <meta charset="utf-8" /> <title></title> </head<body> <form method="post" action=""> 
<div>Title</div<div>@Html.TextBox("titulo")</div>
<div>Intro</div<div>@Html.TextArea("tema", new{cols="40", rows="4"})</div> 
<div>Author</div>
<div>@Html.TextBox("autor")</div>
<input type="submit" name="action" value="Submit" /> 
</form</body</html>

Cuando Database.Execute() es llamado el primer argumento es la cadena de consulta, y luego vienen los parametros de la cadena, cada uno separado por coma y en orden de como se agregaron a la consulta SQL. Vale la pena aclarar que la posición es importante pues el ira remplazando cada uno de estos parametros por las @ de la cadena de consulta. Ahora, ¿como se proteje esta cadena de SQL INJECTION si lo parametros se estan pasando directamente en la consulta? simple, todos los parametros pasados son considerados cadena literales si el campo de destino dentro de la base de datos es un campo basado en texto, así pues cualquier comilla doble es automaticamente -escapada- y todos los parametros quedan correctamente delimitados segun el provedoor de base de datos. Esto tambien se aplica para los tipos númericos, una vez que el nuestra proveedor de la conexión  a la base de datos identifica que la base espera algun tipo númerico solo aceptará en el parametro un número, de lo contrario tendremos un error. Es seguro y muy simple!

 

 

 

 

 

 

 

 

 

 

 

Share and Enjoy:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • Add to favorites
  • Live

Tags: , ,

One Response to “SQL Injection y Webmatrix”

  1. Ovidio Rafael dice:

    No entendí muy bien lo de la comilla -escapada-. Si pudiera ampliarlo con datos de ejemplo se lo agradecería mucho.

    Por lo demás, gracias por hacer notar este dato muy importante.

Leave a Reply