Controles de Validación – ¿Son Realmente Seguros?

Antes de empezar, se que este post puede ser vetado, por muchos motivos, solo quiero esperar que lo tomen de por el lado amable…, aqu铆 muestro mis ideas y mi percepci贸n al respecto, agradecer铆a me dieran sus comentarios sobre esto, ni intento atacar a alguna persona en especial , la raz贸n de este post es  poder ayudar a las personas a que  utilicen algo mas de seguridad en sus sistemas.


Este post se a vuelto una respuesta a un post puesto por un empleado de Microsoft, y en general a la imagen que da Microsoft y algunos expositores http://blogs.msdn.com/hackers/archive/2008/01/06/first-line-of-defense-for-web-applications-conclusion.aspx


ACLARACION :   “Este post no demuestra ninguna buena practica…, sino que  mas bien demuestra como “No deben de programar”; es la forma en la que muchos programan equivocadamente. Segundo, el ASP.NET SI hace una validacion del lado del servidor, aunque esta es una validacion  que  en este caso  es muy facil de saltarse, ya que no se ingresa codigo malicioso ( XSS, Sql Injection, etc ).    Y una cosa mas  sobre lo de “Page.IsValid esta omitido de  forma premeditada, para que el ejemplo sea mas facil de entender, pero aun asi,  si lo hubiera puesto… el resultado es el mismo, ya que  eso solo valida que no ingrese codigo malicioso :), esto a pedido de Misael 馃檪


En los tiempos actuales se habla mucho sobre seguridad, 驴 pero esta realmente se aplica?


soy una persona que  utiliza diariamente las tecnolog铆as de Microsoft, pero en mi trabajo como consultor en seguridad e visto muchos  vicios de programaci贸n, que han sido originados por una incorrecta forma ( a mi parecer ) de mostrar las cualidades de ASP.NET.


驴A que me refiero en especifico?  me refiero a los controles de validaci贸n, si , seguro habr谩n escuchados de ellos, el de campo requerido, el de  expresi贸n regular, etc.


Eh Escuchado en M煤ltiples conferencias de Microsoft y en otras de algunos colegas expositores y  algunos ex colegas MVP’s ( si,  si..  yo fui el que dejo de serlo je je ) ,   sobre la idea de que “Los controles de Validaci贸n”, hacen que una aplicaci贸n sea segura, hace unos minutos estaba debatiendo esto con mi amigo Guino, sobre la Seguridad, y el me dec铆a que la seguridad se implementa en varias capas, que no se puede implementar en una sola capa, con lo cual concuerdo, pero algo que le replique es sobre  que pasa si le das una imagen err贸nea a las personas sobre la seguridad, ya sea como Microsoft o  como Expositores, influenciamos a los desarrolladores, y esto influye en muchos aspectos de como programan…. 驴 si.. pero cual es mi punto ?


Mi punto es el siguiente:



Los Controles de Validaci贸n sirven para 2 cosas,



  • Para que el usuario com煤n y silvestre… (si de esos que andan rondando libremente por all铆… sin domesticar..) , puedan ingresar datos correctos en una determinada aplicaci贸n de una forma mas r谩pida, ya que antiguamente hab铆a el problema de los muchos postback  que eran molestos,  y como una gu铆a para que ellos ( que nunca hacen las cosas como se debe ) puedan hacer un trabajo correctamente.

  • Para Evitar evitar demasiados postback ( si si ya lo hab铆a puesto )  ya que estos hacen que la aplicaci贸n sea mas lenta,  el trabajo para ese usuario com煤n  y silvestre que no sabe  ni poner su apellido correctamente …. tenga que ir rellenando todo de nuevo por que escribi贸 mal algo, y as铆 liberamos algo de carga al servidor en cuesti贸n.

Para que No Sirve :



  • No sirve para Implementar seguridad real, como dije antes esto sirve solo para que el usuario com煤n y silvestre ingrese la informaci贸n correcta, o quiz谩 pueda contra un simple y diminuto “Lamer” , pero sobre seguridad real no ayuda en nada, como me dijo Guino “驴驴que c贸digo JavaScript es seguro..??” el c贸digo JavaScript, en su mayor铆a tiene como finalidad darle una mejor experiencia al usuario, es c贸digo muerto que no corre bajo el CRL, eso si puede ser generado…

En muchas literaturas, se habla sobre c贸digo seguro y e ellas se dice ( algo en lo que estoy de acuerdo)  “que se tiene que validar todas las entradas de usuario, una y otra vez, que no hay que confiar en nada que venga del usuario” en conclusi贸n el usuario es un ser  en el cual no se puede confiar…  hasta all铆 todo muy bien y correcto…. pero ahora viene lo malo…. 驴como?


Muchas personas interpretan eso ( sobre validar las entradas del usuario)  con validar usando controles de validaci贸n..  y que con eso su aplicaci贸n ya es segura y recibir谩 siempre los datos correctos , cosa que no es cierto… lamentablemente las personas no acostumbran desarrollar c贸digo seguro, y se conf铆an de que el CRL del ASP.NET les ayudara en todo.


hace un tiempo sali贸 una vulnerabilidad que demostr贸 que el “Validate Request” del ASP.Net no es “invulnerable” http://www.buayacorp.com/archivos/validaterequest-no-es-suficiente-para-protegernos-de-ataques-xss/ , y en este otro post se muestra la m铆nima validaci贸n que hace el “validate request” http://www.buayacorp.com/archivos/seguridad-en-aspnet-xss/ ,  asi que por eso no podemos confiar en que eso ayudara en la seguridad, quiz谩 si filtrara muchos de los intentos, pero.. no podemos confiar en que eso har谩 nuestras aplicaciones seguras.


Si reconozco que en seguridad ASP.NET a dado un gran salto, ya que por ejemplo en aplicaciones PHP  hay que hacer a mano muchas de las validaciones, pero aun as铆 tenemos que seguir programando pensando en seguridad… pero en seguridad real.


Seguro pensaran…  este mucho habla y poco demuestra…o este es un charlat谩n…. pero calma, ya viene lo bueno…. pero adelanto.. que no dir茅 exactamente el como lo hago pero si mostrare im谩genes que de por si ya mostraran.


empecemos!. para el ejemplo siguiente crearemos una simple pagina ASP.NET Con un simple bot贸n, una caja de texto y le agregaremos un control de validaci贸n….  haber podr铆a ser cualquiera, para este caso pongamos el de “Regular Expression Validator”, y  como expresi贸n a validar pongamos la de “email”,  como muestra la imagen:



el 煤nico c贸digo que le aplicaremos en este caso, ser谩 el siguiente:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Response.Write(TextBox1.Text)

End Sub


como ven   simplemente escribe  lo que recibe de la caja de texto… l贸gicamente el evento clic no se ejecuta si es que no sea cumplido  la condici贸n del control de validaci贸n… por si no creen aqu铆 les dejo otras im谩genes… en la primera lo que pasa si no pongo la condici贸n correcta ( un email )



y si se cumple se muestra algo asi:



all铆 se escribi贸 el email


Bueno luego prendemos el Paros ( v茅ase el anterior post que  puse Previo a un Post Importante, Herramienta impresincible ) , para la configuraci贸n de ese soft pueden ver en la ayuda…  de su programa… si .. deben de leer.., bueno para poder atrapar el trafico habilitamos en la pesta帽a trap, la opci贸n de “trap response” y “trap request” y llamamos a la pagina, l贸gico que se  detendr谩 y no avanzara hasta que  en el paros le demos en “Continue” varias veces. hasta que se carga la pagina y en el paros ya no se ve nada…,


luego simplemente escribimos un email ( 贸sea un valor que cumple la condici贸n 贸sea algo@algo.com )   y damos clic en el bot贸n, l贸gico que paros capturara el evento. y veremos algo as铆….



se dan cuenta… quiz谩 en este momento seria buena idea para cambiar el valor puesto originalmente por el que realmente querremos poner… en este caso pondr茅 “datocambiado” y ponemos “continue” el siguiente clic mostrar铆a el HTML que se procesara.. ( 贸sea el que validara…)  y si buscamos en el c贸digo podr铆amos ver algo asi :



ven algo conocido?… algo parecido a una expresi贸n regular..?.. que pasaria si modifico lo que esta entre las comillas y por ejemplo dejo solo : \\w+([-+.\’]\\w+)*…  y luego doy en continue…   seran como 4 clic en continue y luego ya de hacer todo eso podremos ver en el navegador :



ven? aparecio el dato que modificamos..


como quiz谩 digan, “pero no te metiste a la DB  o no hiciste cosas complicadas… ” … y les responder铆a… justo es lo que quer铆a hacer… demostrar lo simple que es saltarse los controles de validaci贸n,    y en que casos nos puede afectar esto?  es simple…


en el mundo actualmente existen muchas personas ( lo e comprobado ) que equivocadamente piensan que lo que en los libros de c贸digo seguro dice  “valida la entrada” significa usar controles de validaci贸n… y eso significa que no tenemos que meternos dentro de la app, robar sesiones ni cosas asi para poder hacer destrozos…  ejemplos..? ya depende de cada uno….,


Esto es un bug?  personalmente creo que NO, pero eso es por que yo desde un principio considere a los controles de validaci贸n como algo para ayudar a los usuarios  a ingresar bien los datos, pero no como algo para seguridad…,  lo que si creo que es un Error o Bug, es a las personas  que ense帽an y  dan a entender que esto hace que la aplicaci贸n sea segura, lo cual es falso, quiz谩 podr铆amos decir “esto  seria uno de los puntos en los cuales puedes  ayudar a que tu aplicaci贸n sea segura”,pero siempre aclarando expl铆citamente que el fin de esto no es la seguridad, sino que mejora la experiencia del usuario.


creo personalmente que Microsoft deber铆a  de cambiar su forma de mostrar este tipo de controles, ya que esta haciendo que las personas tengan una perspectiva equivocada  de esto, aunque l贸gico si me hacen caso o no ya no depende de mi .


y Bueno luego de este rollo.. que podemos hacer?  la respuesta es simple “Validaci贸n en el lado del Servidor”, ojo que no digo que “no hagan validaci贸n del lado del cliente” , lo que digo es que hagan doble validaci贸n, bueno al menos en este aspecto.


quiero agradecer a Nazul por haberme proporcionado el link donde se habla de los controles de validaci贸n…..


Bueno espero  no haber ofendido a nadie con este post, ni tampoco quiero atacar a Microsoft,tan solo doy mi punto de vista con respecto a ese post y en general a los controles de validaci贸n.


Si no Es Vetado este post, podr铆a poner otros tips de seguridad, ya sea en .net o en servidores Windows… .. mas informaci贸n?  : http://www.google.com


Hasta la proxima!


Salu2


Ddaz ( El Dacito )


馃檪 Publicacion cruzada desde Geeks.ms 馃檪 http://geeks.ms/blogs/ddaz

Leave a Reply

Your email address will not be published. Required fields are marked *