{"id":258,"date":"2014-11-27T13:48:49","date_gmt":"2014-11-27T13:51:38","guid":{"rendered":"https:\/\/9e6935-tips-seguridad-webbizarro-inside_1413904557000_alarge.jpg"},"modified":"2015-07-16T15:27:29","modified_gmt":"2015-07-16T21:27:29","slug":"6-consejos-para-mejorar-la-seguridad-de-tus-formularios-web","status":"publish","type":"post","link":"https:\/\/emanuelpaxtian.com\/blog\/6-consejos-para-mejorar-la-seguridad-de-tus-formularios-web\/","title":{"rendered":"6 consejos para mejorar la seguridad de tus formularios web"},"content":{"rendered":"<p>Una de las principales consideraciones al momento de crear un sitio web es la s<strong>eguridad de los formularios<\/strong>. Estos pueden convertirse en puntos de entrada sensibles hacia el sistema. Un formulario inseguro puede desde sobrecargar un servidor hasta acceder y modificar informaci\u00f3n almacenada en una base de datos. Ac\u00e1 listamos 6 pasos sencillos para asegurar que los formularios de un proyecto web est\u00e1n protegidos.<\/p>\n<p><strong>1. POST<\/strong><\/p>\n<p>Cualquier formulario debe siempre enviar la informaci\u00f3n de su contenido usando el m\u00e9todo POST. Con POST los valores del formulario viajan ocultos hacia el script de destino. Si un formulario utiliza el m\u00e9todo GET, toda la informaci\u00f3n del mismo ser\u00e1 desplegada en la barra de direcciones del browser.<\/p>\n<p><strong>2. Token<\/strong><\/p>\n<p>Es necesario que el script que va a procesar la informaci\u00f3n del formulario tenga alg\u00fan modo de reconocer que efectivamente la informaci\u00f3n proviene de el formulario para el cu\u00e1l fue dise\u00f1ado.\u00a0 Para ello, normalmente se utiliza un token o c\u00f3digo encriptado que se env\u00eda como un campo oculto en el formulario y que el script puede desencriptar para validar si procesa o rechaza el formulario.<\/p>\n<p>La mayor\u00eda de los frameworks para desarrollo web, como\u00a0<a href=\"http:\/\/www.intergraphicdesigns.com.php54-1.ord1-1.websitetestlink.com\/blog\/2012\/02\/19\/cakephp-un-framework-para-que-desarrollar-en-php-sea-un-queque\/\" target=\"_blank\">CakePHP<\/a>, ya integran el token como una validaci\u00f3n autom\u00e1tica en sus formularios.<\/p>\n<p><strong>3. Protecci\u00f3n CSRF<\/strong><\/p>\n<p>CSRF significa Cross Site Request Forgery o Falsificaci\u00f3n de Petici\u00f3n en Sitios Cruzados en espa\u00f1ol. Este tipo de vulnerabilidad trata de enviar datos de un formulario a un script ubicado en un sitio web distinto. Para evitar este ataque se debe chequear el sitio web del que proviene el formulario. Por ejemplo, en PHP se puede usar la variable $_SERVER[&#8220;<var>HTTP_REFERER<\/var>&#8220;] para validar desde d\u00f3nde viene la informaci\u00f3n. No obstante, esta variable puede ser modificable o no provista, por lo cual una manera m\u00e1s confiable de validar que el formulario haya sido enviado desde el dominio correspondiente es utilizando Cookies.<\/p>\n<p><strong>4. Validaciones Javascript<\/strong><\/p>\n<p>Validar que los campos requeridos de un formulario se hayan completado y que tengan un formato y extensi\u00f3n apropiados mejora grandemente la experiencia del usuario y dificulta los posibles ataques. Se debe verificar que los campos del formulario permitan una cantidad razonable de caracteres y que respeten el formato pedido. Por ejemplo, usando Javascript, se puede limitar un campo para que solamente admita n\u00fameros.<\/p>\n<p>Existen much\u00edsimas librer\u00edas para javascript que permiten facilitar la validaci\u00f3n de un formulario antes de su env\u00edo. Por ejemplo\u00a0<a title=\"Jquery Validate\" href=\"http:\/\/bassistance.de\/jquery-plugins\/jquery-plugin-validation\/\" target=\"_blank\">Jquery Validate<\/a>\u00a0es un plugin de la librer\u00eda Jquery que permite realizar validaciones de campos num\u00e9ricos e emails con un formato muy sencillo. Similarmente,\u00a0<a title=\"Masked Input\" href=\"http:\/\/digitalbush.com\/projects\/masked-input-plugin\/\" target=\"_blank\">Masket Input<\/a>\u00a0es otro plugin de Jquery que no solo restringe el tipo y n\u00famero de caracteres admitidos en un input, si no que tambi\u00e9n les da formato conforme el usuario escribe.<\/p>\n<p><strong>5. Validaciones Internas<\/strong><\/p>\n<p>De cualquier forma, los navegadores permiten desactivar el Javascript, raz\u00f3n por la cu\u00e1l se hace necesaria la validaci\u00f3n de los campos y de su formato desde el script final. Esto es importante ya que los ataques maliciosos podr\u00edan intentar enviar c\u00f3digo por un formulario, que al ser le\u00eddo o desplegado podr\u00eda ejecutarse y causar serios problemas. Este tipo de ataque es conocido como XSS o Cross Site Scripting. En PHP, por ejemplo, una simple l\u00ednea de c\u00f3digo permitir\u00eda filtar una entrada dependiendo de si queremos recibir texto o c\u00f3digo html:<\/p>\n<pre class=\"wp-code-highlight prettyprint\">\/\/suponiendo que $entrada guarda el valor enviado por el formulario \/\/$entrada_txt almacenar\u00e1 una cadena de texto segura $entrada_txt = htmlentities(trim(strip_tags(stripslashes($entrada))), ENT_NOQUOTES, \"UTF-8\"); \/\/en este caso $entrada_html almacenar\u00e1 una cadena con html $entrada_html = strip_tags(htmlentities(trim(stripslashes($entrada))), ENT_NOQUOTES, \"UTF-8\");<\/pre>\n<p><strong>6. Captcha<\/strong><br \/>\n<img loading=\"lazy\" decoding=\"async\" title=\"Ejemplo Captcha\" src=\"http:\/\/www.captcha.net\/images\/recaptcha-example.gif\" alt=\"Ejemplo Captcha\" width=\"220\" height=\"88\" border=\"0\" \/><\/p>\n<p>Un captcha es una imagen distorcionada que contiene un c\u00f3digo que el usuario debe leer e ingresar en un campo del formulario. La idea es que el hecho de ser una imagen y de que est\u00e9 distorcionada evitar\u00e1 que c\u00f3digos maliciosos puedan enviar ataques en el formulario.<\/p>\n<p>Son pasos sencillos, validaciones simples que pueden llegar a ahorrarle dinero y muchos dolores de cabeza.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una de las principales consideraciones al momento de crear un sitio web es la seguridad de los formularios. Estos pueden convertirse en puntos de entrada sensibles hacia el sistema. Un&hellip;<\/p>\n","protected":false},"author":1,"featured_media":430,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-258","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seguridad"],"_links":{"self":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts\/258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/comments?post=258"}],"version-history":[{"count":0,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts\/258\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/media\/430"}],"wp:attachment":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/media?parent=258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/categories?post=258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/tags?post=258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}