Un "error" muy común de los programadores web en cuanto a la seguridad de sus aplicaciones, es acceder directamente a las variables enviadas desde las solicitudes recibidas desde la colección genéricas Request, como la clase "Request" en ASP o la variable $_REQUEST en PHP:
En ASP:
String nombre = Request["name"];
En PHP:
$nombre = $_REQUEST['name'];
Si bien esta forma de hacerlo es "correcta" lingüisticamente hablando, es bueno recordar que las variables de input tradicionales de una solicitud web suelen llegar por tres diferentes vías: por el método GET, el método POST o a través de cookies. Cuando usamos la clase Request o la variable $_REQUEST según el caso del lenguaje (ASP o PHP) estamos solicitando información en una colección genérica que agrupa las tres opciones (y otras más), y si bien es mucho más fácil y limpio de usar, este método infiere en el error por omisión, de admitir que un dato específico llegue a nuestras páginas por cualquiera de los tres métodos.
El hacker entonces podría perfectamente modificar el valor de un cookie introduciéndolo desde el URL, podría también modificar valores de un formulario que viaja por POST atacándolo desde un simple enlace enviado por e-mail. Esto se debe a que nuestra aplicación al solicitar los datos no diferencia por cual de los tres métodos están siendo enviados. Las implicaciones de poder infectar los cookies del navegador del usuario a través de un URL pueden ser enormes, pero no vamos a detallar esa práctica en este artículo.
Es imperativo, utilizar el método determinado según el acceso por el que debemos recibir los datos y evitar usar el método genérico Request. Ejemplo:
En ASP:
String nombre = Request.QueryString["name"]; // para el método GET
String nombre = Request.Form["name"]; // para el método POST
String nombre = Request.Cookies["name"]; //
En PHP:
$nombre = $_GET['name'];
$nombre = $_POST['name'];
$nombre = $_COOKIE['name'];
En el lenguaje JSP (Java Server Pages) el problema es aún más grave debido a que el lenguaje no diferencia con el método Request.getParameter("name") si la solicitud es recibida por POST, GET o es un Cookie. En este caso se recomiendan o bien utilizar el método Request.getMethod(), que nos aclara por donde han llegado los datos, simplemente utilizar la tecnología de servlets que si diferencia entre ambos métodos con doGet(request, response) y doPost(request, response).
Redactado por Mauro Maulini R.
Este blog está dirigido a todos los programadores y desarrolladores en general, en él encontrarán consejos útiles en las respectivas áreas del desarrollo de aplicaciones, especialmente de Aplicaciones y Soluciones Web sobre diferentes entornos y plataformas móviles como Windows Phone y Android.
Suscribirse a:
Comentarios de la entrada (Atom)
Entradas populares
-
Es imposible pensar que Google podía faltar a la cita que tiene con todos los programadores a nivel mundial en lo referente a publicar algún...
-
Es importante cuando se habla de amenazas en aplicaciones web y otras, establecer un sistema de cálculo estándar que permita a los interesad...
-
Volvemos a mencionar en este artículo la importancia del OWASP (Open Web Application Security Project) y en especial esta vez mencionaremos...
-
Una de las amenazas más peligrosas del primer tipo de los OWASP top 10 de 2010, es decir de las amenazas que se refieren a inyecciones de có...
-
Estuve probando la herramienta que desarrolló Google con el fin de realizar escaneos de seguridad a nuestras aplicaciones web. Su nombre es ...
-
Uno de los errores más comunes de seguridad de los programadores de Asp.NET que utilizan "web forms" en sus aplicaciones, es cree...
-
¿Que te parecería cargar solamente código javascript en una página para aquellas funciones que un usuario decida realizar y no para todas la...
-
Recientemente llegó a mis manos un libro muy interesante llamado " Beginnig ASP.NET Security " de la serie de libros de WROX P...
-
Si bien las inyecciones LDAP no son muy comunes, pueden ser una de las más peligrosas vulnerabilidades en la web. Para empezar necesitamos...
-
Anteriormente hemos mencionado la importancia de la desinfección de parámetros como herramienta fundamental en el combate de las vulnerabi...
3 comentarios:
Publicar un comentario