<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-913771790122904203</id><updated>2026-10-13T05:56:08.874-04:00</updated><category term="seguridad web"/><category term="vulnerabilidades"/><category term="amenazas y riesgos"/><category term="programación"/><category term="OWASP"/><category term="seguridad en línea"/><category term="desarrollo seguro"/><category term="protección de la clave"/><category term="phishing"/><category term="seguridad de aplicaciones web"/><category term="Riesgos"/><category term="SQL Inyection"/><category term="pen-testing"/><category term="XSS"/><category term="diseño web"/><category term="métodos de defensa"/><category term="técnicas de suplantación"/><category term="banca en línea"/><category term="criptografía"/><category term="javascript"/><category term="web móvil"/><category term="DoS"/><category term="Educación"/><category term="Navegadores"/><category term="WASC"/><category term="XHTML MP"/><category term="análisis de vulnerabilidades"/><category term="redes sociales"/><category term="ASP.NET"/><category term="Ajax"/><category term="Apache"/><category term="IIS"/><category term="SEO"/><category term="Seguridad aplicaciones móviles"/><category term="código seguro"/><category term="e-banking"/><category term="escaneo"/><category term="formularios de acceso"/><category term="herramientas de pen-testing"/><category term="integer overflow"/><category term="mailing"/><category term="toyanos bancarios"/><category term="troyanos"/><category term="usabilidad"/><category term="web"/><category term="CSRF"/><category term="Ecuador"/><category term="GHDB"/><category term="Guayaquil"/><category term="HTML"/><category term="HTML5"/><category term="Internet básica"/><category term="OTP"/><category term="QWASP"/><category term="Quito"/><category term="XSRF"/><category term="bases de datos"/><category term="cursos"/><category term="e-mail"/><category term="inyección de código"/><category term="penetración"/><category term="pharming"/><category term="presupuesto en seguridad"/><category term="publicidad web"/><title type='text'>Desarrollo y Seguridad de Aplicaciones Web y Móviles</title><subtitle type='html'>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.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>113</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-1098026350066027849</id><published>2019-09-25T19:32:00.000-04:00</published><updated>2019-09-25T10:17:30.705-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas y riesgos"/><category scheme="http://www.blogger.com/atom/ns#" term="Seguridad aplicaciones móviles"/><title type='text'>No utilizar el número IMEI como identificador de usuario en aplicaciones móviles</title><content type='html'>Es una indudable ventaja el hecho de poder obtener el número IMEI de un dispositivo móvil desde una aplicación para cualquiera de las plataformas móviles de la actualidad, sin embargo utilizarlo como identificador único para acceder a un servicio web puede ser un error bastante costoso.&lt;br /&gt;
&lt;br /&gt;
La realidad es que si bien el Numero IMEI (&lt;span style=&quot;background-color: white; color: #222222; white-space: nowrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;International Mobile Equipment Identity&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: &amp;quot;arial&amp;quot; , sans-serif; white-space: nowrap;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
es un número único e irrepetible pregrabado en todos los equipos GSM que lo identifica a nivel mundial, es muy tentador asociar ese número a un usuario determinado, por lo que empieza a ser una práctica convencional.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, el paso de este número específico como parámetro de identificación a un servicio web o rutina, inclusive a través de una conexión por socket sin utilizar cifrado es una práctica muy riesgosa, por una parte debido a que dicho número es de fácil obtención por parte de cualquier persona con acceso al dispositivo, y por otra porque la intercepción de dicho número por parte del atacante puede implicar serios riesgos en sistemas de identificación que lo usen.&lt;br /&gt;
&lt;br /&gt;
Empecemos con un simple ejemplo que funciona en absolutamente todos los teléfonos GSM. Simplemente pulsemos la secuencia de caracteres&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot;; font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;*#06#&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;calibri&amp;quot;; font-size: 20pt; font-weight: bold;&quot;&gt;&amp;nbsp;&lt;/span&gt;en el teclado de un dispositivo e inmediatamente obtendremos una ventana en la que aparece nuestro número IMEI.&lt;br /&gt;
&lt;br /&gt;
Pero eso no es todo, el número IMEI además en su composición guarda información específica acerca del dispositivo, que al cotejarse en una base de datos puede revelar demasiados datos acerca de nuestro teléfono. Para comprobarlo, obtengan su número IMEI mediante la secuencia de teclado que explicamos en el párrafo anterior e introduzca el mismo en este sitio:&amp;nbsp;&lt;a href=&quot;http://www.imei.info/&quot;&gt;http://www.imei.info/&lt;/a&gt;&amp;nbsp;. Obtentrán una pantalla informativa impresionante como la que les muestro a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEideX-NjUMvuttF-lvHRys5h6EYL-Lp0RDI7yKgsRtwP2B9MhkXI6jbyOZVAcv9l3Hbx4q0asLwO3RRECK66dmsv2aq2kfYzW3tND1Fdj-bDzfUTLmOGF7aWmsrxyqYYb8rpwRXPRR4ZF3h/s1600/imei.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;916&quot; data-original-width=&quot;1408&quot; height=&quot;416&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEideX-NjUMvuttF-lvHRys5h6EYL-Lp0RDI7yKgsRtwP2B9MhkXI6jbyOZVAcv9l3Hbx4q0asLwO3RRECK66dmsv2aq2kfYzW3tND1Fdj-bDzfUTLmOGF7aWmsrxyqYYb8rpwRXPRR4ZF3h/s640/imei.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Definitivamente asociar un usuario a un teléfono móvil puede ser extremadamente útil en aplicaciones de seguridad de todo tipo entre ellas aplicaciones para realizar transacciones desde el teléfono o para obtener acceso. La mayoría de los sistemas operativos móviles permiten acceder a números únicos de identificación del dispositivo derivados del IMEI o de algún otro número como por ejemplo la identificación del dispositivo de red wireless. Si aún así decides usar el IMEI, entonces no lo pases jamás como parámetro sin combinar y cifrar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/1098026350066027849/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/1098026350066027849' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/1098026350066027849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/1098026350066027849'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2013/08/no-utilizar-el-numero-imei-como.html' title='No utilizar el número IMEI como identificador de usuario en aplicaciones móviles'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEideX-NjUMvuttF-lvHRys5h6EYL-Lp0RDI7yKgsRtwP2B9MhkXI6jbyOZVAcv9l3Hbx4q0asLwO3RRECK66dmsv2aq2kfYzW3tND1Fdj-bDzfUTLmOGF7aWmsrxyqYYb8rpwRXPRR4ZF3h/s72-c/imei.jpg" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-4853949933277921086</id><published>2019-09-25T16:43:00.000-04:00</published><updated>2019-09-25T16:49:04.046-04:00</updated><title type='text'>OWASP TOP 10 2017</title><content type='html'>Nuevamente OWASP nos hace llegar la lista de las más importantes vulnerabilidades en lo referente a desarrollo web en su lista del 2017 Top 10.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;fontstyle0&quot;&gt;&lt;b&gt;OWASP Top 10 2017&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h4&gt;
&lt;span class=&quot;fontstyle0&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Riesgos en Seguridad de Aplicaciones&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h3&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;fontstyle3&quot;&gt;A1:2017&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;fontstyle3&quot;&gt;Inyección&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;Las fallas de inyección, como SQL, NoSQL, OS o LDAP ocurren cuando se envían datos no&lt;br /&gt;confiables a un intérprete, como parte de un comando o consulta. Los datos dañinos del atacante&lt;br /&gt;pueden engañar al intérprete para que ejecute comandos involuntarios o acceda a los datos sin&lt;br /&gt;la debida autorización.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;fontstyle3&quot;&gt;&lt;b&gt;&lt;span class=&quot;fontstyle3&quot;&gt;A2:2017&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;fontstyle3&quot;&gt;Pérdida de&amp;nbsp;Autenticación&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;fontstyle3&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;fontstyle2&quot;&gt;Las funciones de la aplicación relacionadas a autenticación y gestión de sesiones son&lt;br /&gt;implementadas incorrectamente, permitiendo a los atacantes comprometer usuarios y&lt;br /&gt;contraseñas, token de sesiones, o explotar otras fallas de implementación para asumir la&lt;br /&gt;identidad de otros usuarios (temporal o permanentemente).&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;A3:2017 Exposición de&amp;nbsp;datos sensible&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;Muchas aplicaciones web y APIs no protegen adecuadamente datos sensibles, tales como&lt;br /&gt;información financiera, de salud o Información Personalmente Identificable (PII). Los atacantes&lt;br /&gt;pueden robar o modificar estos datos protegidos inadecuadamente para llevar a cabo fraudes&lt;br /&gt;con tarjetas de crédito, robos de identidad u otros delitos. Los datos sensibles requieren métodos&lt;br /&gt;de protección adicionales, como el cifrado en almacenamiento y tránsito.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;fontstyle3&quot; style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span class=&quot;fontstyle3&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;fontstyle3&quot;&gt;A4:2017&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;fontstyle3&quot;&gt;Entidades Externas&amp;nbsp;XML (XXE)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;Muchos procesadores XML antiguos o mal configurados evalúan referencias a entidades&lt;br /&gt;externas en documentos XML. Las entidades externas pueden utilizarse para revelar archivos&lt;br /&gt;internos mediante la URI o archivos internos en servidores no actualizados, escanear puertos de&lt;br /&gt;la LAN, ejecutar código de forma remota y realizar ataques de denegación de servicio (DoS).&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;fontstyle3&quot; style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span class=&quot;fontstyle3&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;fontstyle3&quot;&gt;A5:2017&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;fontstyle3&quot;&gt;Pérdida de Control&amp;nbsp;de Acceso&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;Las restricciones sobre lo que los usuarios autenticados pueden hacer no se aplican&lt;br /&gt;correctamente. Los atacantes pueden explotar estos defectos para acceder, de forma no&lt;br /&gt;autorizada, a funcionalidades y/o datos, cuentas de otros usuarios, ver archivos sensibles,&lt;br /&gt;modificar datos, cambiar derechos de acceso y permisos, etc.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;fontstyle3&quot; style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span class=&quot;fontstyle3&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;fontstyle3&quot;&gt;A6:2017&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;fontstyle3&quot;&gt;Configuración de&amp;nbsp;Seguridad&amp;nbsp;Incorrecta&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;La configuración de seguridad incorrecta es un problema muy común y se debe en parte a&lt;br /&gt;establecer la configuración de forma manual, &lt;/span&gt;&lt;span class=&quot;fontstyle4&quot;&gt;ad hoc &lt;/span&gt;&lt;span class=&quot;fontstyle2&quot;&gt;o por omisión &lt;/span&gt;&lt;span class=&quot;fontstyle4&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;fontstyle2&quot;&gt;o directamente por la falta de&lt;br /&gt;configuración). Son ejemplos: &lt;/span&gt;&lt;span class=&quot;fontstyle4&quot;&gt;S3 buckets &lt;/span&gt;&lt;span class=&quot;fontstyle2&quot;&gt;abiertos, cabeceras HTTP mal configuradas, mensajes&lt;br /&gt;de error con contenido sensible, falta de parches y actualizaciones, &lt;/span&gt;&lt;span class=&quot;fontstyle4&quot;&gt;frameworks, &lt;/span&gt;&lt;span class=&quot;fontstyle2&quot;&gt;dependencias y&lt;br /&gt;componentes desactualizados, etc.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span class=&quot;fontstyle3&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;fontstyle3&quot;&gt;A7:2017&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;fontstyle3&quot;&gt;Secuencia de&amp;nbsp;Comandos en Sitios&amp;nbsp;Cruzados (XSS)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;Los XSS ocurren cuando una aplicación toma datos no confiables y los envía al navegador web&lt;br /&gt;sin una validación y codificación apropiada; o actualiza una página web existente con datos&lt;br /&gt;suministrados por el usuario utilizando una API que ejecuta &lt;/span&gt;&lt;span class=&quot;fontstyle4&quot;&gt;JavaScript &lt;/span&gt;&lt;span class=&quot;fontstyle2&quot;&gt;en el navegador. Permiten&lt;br /&gt;ejecutar comandos en el navegador de la víctima y el atacante puede secuestrar una sesión,&lt;br /&gt;modificar (&lt;/span&gt;&lt;span class=&quot;fontstyle4&quot;&gt;defacement&lt;/span&gt;&lt;span class=&quot;fontstyle2&quot;&gt;) los sitios web, o redireccionar al usuario hacia un sitio malicioso.&lt;/span&gt;&lt;span class=&quot;fontstyle3&quot; style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;span class=&quot;fontstyle3&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;fontstyle3&quot;&gt;A8:2017&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;fontstyle3&quot;&gt;Deserialización&amp;nbsp;Insegura&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;Estos defectos ocurren cuando una aplicación recibe objetos serializados dañinos y estos objetos&lt;br /&gt;pueden ser manipulados o borrados por el atacante para realizar ataques de repetición,&lt;br /&gt;inyecciones o elevar sus privilegios de ejecución. En el peor de los casos, la deserialización&lt;br /&gt;insegura puede conducir a la ejecución remota de código en el servidor.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;fontstyle3&quot; style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span class=&quot;fontstyle3&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;fontstyle3&quot;&gt;A9:2017&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;fontstyle3&quot;&gt;Componentes con&amp;nbsp;vulnerabilidades&amp;nbsp;conocidas&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;Los componentes como bibliotecas, &lt;/span&gt;&lt;span class=&quot;fontstyle4&quot;&gt;frameworks &lt;/span&gt;&lt;span class=&quot;fontstyle2&quot;&gt;y otros módulos se ejecutan con los mismos&lt;br /&gt;privilegios que la aplicación. Si se explota un componente vulnerable, el ataque puede provocar&lt;br /&gt;una pérdida de datos o tomar el control del servidor. Las aplicaciones y API que utilizan&lt;br /&gt;componentes con vulnerabilidades conocidas pueden debilitar las defensas de las aplicaciones y&lt;br /&gt;permitir diversos ataques e impactos.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;fontstyle3&quot; style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span class=&quot;fontstyle3&quot; style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;fontstyle3&quot;&gt;A10:2017&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;fontstyle3&quot;&gt;Registro y&amp;nbsp;Monitoreo&amp;nbsp;Insuficientes&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;El registro y monitoreo insuficiente, junto a la falta de respuesta ante incidentes permiten a los&lt;br /&gt;atacantes mantener el ataque en el tiempo, pivotear a otros sistemas y manipular, extraer o&lt;br /&gt;destruir datos. Los estudios muestran que el tiempo de detección de una brecha de seguridad es&lt;br /&gt;mayor a 200 días, siendo típicamente detectado por terceros en lugar de por procesos internos.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;fontstyle2&quot;&gt;Para obtener mayor información acerca de cada una de estas vulnerabilidades pueden bajar el documento impreso de las mismas en castellano en&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.owasp.org/images/5/5e/OWASP-Top-10-2017-es.pdf&quot;&gt;https://www.owasp.org/images/5/5e/OWASP-Top-10-2017-es.pdf&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Espero les sea útil.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Redactado por Mauro Maulini R.</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/4853949933277921086/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/4853949933277921086' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/4853949933277921086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/4853949933277921086'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2019/09/owasp-top-10-2017.html' title='OWASP TOP 10 2017'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-4164790469963672818</id><published>2019-09-20T20:54:00.000-04:00</published><updated>2019-09-25T09:57:11.261-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="código seguro"/><category scheme="http://www.blogger.com/atom/ns#" term="métodos de defensa"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad de aplicaciones web"/><title type='text'>¿Por qué utilizar Cookies &quot;Seguros&quot;?</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
Uno de los problemas que presentamos los desarrolladores es el control de los Cookies usados en transacciones seguras. El primer inconveniente que se presenta cuando usamos cookies bajo protocolo SSL o TSL (el conocido HTTPS con la S al final de &quot;secure&quot;) es que estos cookies si no tomamos las debidas precauciones en el manejo de los mismos, persisten si el usuario deja la transacción segura para continuar visitando otras áreas de nuestro sitio, lo que convierte su contenido en interceptable.&lt;br /&gt;
&lt;br /&gt;
Otro de los casos que permite revelar las cookies que pasan a través de una conexión segura y que además es muy común, es aquel en el que en una misma página solicitada por HTTPS, solicitamos recursos por simple HTTP, como por ejemplo una imagen en una cabecera que se usa indistintamente en páginas seguras y no seguras. En la cabecera HTTP de la solicitud de dicha imagen el servidor envía todos los cookies del dominio que hace la solicitud en los cuales por supuesto incluye aquellos que se usan para el control de sesión y otras variables de la aplicación &quot;ya no tan segura&quot;.&lt;br /&gt;
&lt;br /&gt;
Es importante recordar que el protocolo HTTP es &quot;stateless&quot; o en otras palabras, no maneja estado de sesión, por lo que cada conexión se realiza como si fuera la primera. Precisamente para poder emular un estado de sesión es que las diferentes plataformas de desarrollo utilizan el concepto de un identificador de sesión (session ID), que no es más que un cookie que funciona como identificador de sesión y al cual se asocia un área de memoria en el servidor en la cual se guardan las variables de sesión.&lt;br /&gt;
&lt;br /&gt;
En fin, como ya habrán podido captar, es necesario para la seguridad de la aplicación proteger los cookies, y para ello el protocolo HTTP 1.1 soporta un parámetro para cada cookie conocido como &quot;secure flag&quot; que al ser activado no permite que los cookies con dicho atributos sean transmitidos en conexiones HTTP simple o inseguras.&lt;br /&gt;
&lt;br /&gt;
Este atributo se puede agregar por cada cookie o en general, y cada plataforma conocida lo soporta. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
En PHP&lt;br /&gt;
Coloque en true el parámetro httponly:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;setcookie( name, value, expire, path, domain, secure,&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394;&quot;&gt; httponly&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En el php.ini:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;session.&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394;&quot;&gt;cookie_secure&lt;/span&gt; = on&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En JSP /Java Server Pages:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Cookie holaCookie = new Cookie(&quot;&quot;,text);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;holaCookie.&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394;&quot;&gt;setSecure&lt;/span&gt;(true);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En ASP.NET&lt;br /&gt;
Coloque en el web.config la siguiente línea:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;lt;httpCookies &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394;&quot;&gt;requireSSL&lt;/span&gt;=&quot;true&quot; /&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Para hacerlo de forma explícita por cada cookie:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;HttpCookie cookie = new HttpCookie(&quot;nombre&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;cookie.&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #0b5394;&quot;&gt;Secure&lt;/span&gt; = True;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;cookie.Value = &quot;José&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/4164790469963672818/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/4164790469963672818' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/4164790469963672818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/4164790469963672818'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/07/porque-utilizar-cookies-seguros.html' title='¿Por qué utilizar Cookies &quot;Seguros&quot;?'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-4604975030320562295</id><published>2019-09-08T23:47:00.000-04:00</published><updated>2020-03-11T11:15:43.721-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="código seguro"/><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo seguro"/><category scheme="http://www.blogger.com/atom/ns#" term="formularios de acceso"/><category scheme="http://www.blogger.com/atom/ns#" term="métodos de defensa"/><title type='text'>Leer correctamente los datos provenientes del Request</title><content type='html'>Un &quot;error&quot; 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 &quot;Request&quot; en ASP o la variable $_REQUEST en PHP:&lt;br /&gt;
&lt;br /&gt;
En ASP:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String nombre = Request[&quot;name&quot;];&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En PHP:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$nombre = $_REQUEST[&#39;name&#39;];&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Si bien esta forma de hacerlo es &quot;correcta&quot; 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.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLZFbCGmfg-0uGjdiPkz6zX7vqG30UaV6Xceqr-JuCvmztPgJ5UsA_2_qhbdtj4wt3cWHZJiTPkz_PODtnGiJ38jLUJ_4LPCx51bw9jU6j7wvW4nOpkSPRrgcrcS7rmxrwxjN_hECbIYJq/s1600/request.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;272&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLZFbCGmfg-0uGjdiPkz6zX7vqG30UaV6Xceqr-JuCvmztPgJ5UsA_2_qhbdtj4wt3cWHZJiTPkz_PODtnGiJ38jLUJ_4LPCx51bw9jU6j7wvW4nOpkSPRrgcrcS7rmxrwxjN_hECbIYJq/s1600/request.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
En ASP:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String nombre = Request.QueryString[&quot;name&quot;]; // para el método GET&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String nombre = Request.Form[&quot;name&quot;]; // para el método POST&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;String nombre = Request.Cookies[&quot;name&quot;]; //&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En PHP:&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$nombre = $_GET[&#39;name&#39;];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$nombre = $_POST[&#39;name&#39;];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$nombre = $_COOKIE[&#39;name&#39;];&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
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(&quot;name&quot;) 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).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Redactado por Mauro Maulini R.</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/4604975030320562295/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/4604975030320562295' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/4604975030320562295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/4604975030320562295'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2014/10/un-error-muy-comun-de-los-programadores.html' title='Leer correctamente los datos provenientes del Request'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLZFbCGmfg-0uGjdiPkz6zX7vqG30UaV6Xceqr-JuCvmztPgJ5UsA_2_qhbdtj4wt3cWHZJiTPkz_PODtnGiJ38jLUJ_4LPCx51bw9jU6j7wvW4nOpkSPRrgcrcS7rmxrwxjN_hECbIYJq/s72-c/request.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-338112125202515601</id><published>2019-09-04T04:00:00.000-04:00</published><updated>2019-09-25T09:59:37.578-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas y riesgos"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET"/><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo seguro"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad de aplicaciones web"/><title type='text'>Confiar en que el viewState de una página en Asp.NET está cifrado: ¡Error!</title><content type='html'>&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
Uno de los errores más comunes de seguridad de los programadores de Asp.NET que utilizan &quot;web forms&quot; en sus aplicaciones, es creer que el &quot;viewState&quot; (ese campo oculto que se puede ver en todas las páginas desarrolladas con &quot;web forms&quot; que contiene un cantidad apreciable de caracteres ilegible) está cifrado.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
El viewState es un repositorio de información en el que se apoyan los &quot;web forms&quot; para guardar los datos de los diferentes componentes o áreas de una página entre llamada y llamada al servidor. Incluso es accesible desde el código y podemos guardar información allí para usarla en de forma eficiente en nuestras páginas por ejemplo:&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot;;&quot;&gt;ViewState[&quot;password&quot;] = thepassword;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
Pero no es una buena práctica colocar información sensible como un password en dicho repositorio, debido a que la creencia de que el viewState está cifrado es completamente errónea. El viewState no es cifrado entre viaje y viaje al servidor sino codificado. Si usted conoce algo de criptografía entenderá que la diferencia entre cifrar y codificar es muy obvia, caso contrario permítame explicarle de forma muy resumida un importante detalle a la hora de proteger sus datos: para descodificar solo es necesario conocer el algoritmo en el cual el texto fue codificado, mientras que pare descifrar es necesario conocer una clave de cifrado además del algoritmo y esta no viaja junto al texto cifrado.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px;&quot;&gt;
Por lo anterior entenderá que si sabemos el algoritmo con el que el viewState es codificado, solo tenemos que usarlo en reversa para decodificarlo. Y bien ese algoritmo es el conocido Base64.&amp;nbsp;&lt;span style=&quot;letter-spacing: -0.01em;&quot;&gt;Compruébelo usted mismo introduciendo el viewState de una página Asp.NET en este decodificador de viewState gratuito en línea:&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://ignatu.co.uk/ViewStateDecoder.aspx&quot; style=&quot;color: #004040; letter-spacing: -0.01em;&quot; target=&quot;_blank&quot;&gt;http://ignatu.co.uk/ViewStateDecoder.aspx&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
Ante este problema tenemos dos soluciones:&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; text-align: justify;&quot;&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: -0.01em;&quot;&gt;No colocar nunca información delicada en el viewState&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: -0.01em;&quot;&gt;Cifrar el viewState o cifrar la información que coloquemos en él.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
La primera opción no necesita explicación, la segunda si amerita de algo de información adicional.&amp;nbsp;&lt;span style=&quot;letter-spacing: -0.01em;&quot;&gt;El viewState, desde la versión de Asp.NET 2.0 en adelante también puede ser cifrado. Usted puede decidir hacerlo en absolutamente todo el sitio web colocando el siguiente atributo en la sección &amp;lt;pages&amp;gt; del archivo web.config:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot;;&quot;&gt;&amp;lt;pages viewStateEncryptionMode=&quot;Always&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
Sin embargo hay que tomar en cuenta que el cifrado puede reducir la velocidad de respuesta sobretodo si estamos en un sitio de alto consumo, por lo que podemos también utilizar el cifrado del viewState a nivel de cada página colocando el siguiente atributo en la cabecera &amp;lt;% @ Page &amp;gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot;;&quot;&gt;&amp;lt;% @ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeBehind=&quot;login1.aspx.cs&quot; ViewStateEncryptionMode=&quot;Always&quot; %&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
Espero que este truco e información sean de utilidad para los desarrolladores en Asp.NET.&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: Arial; font-size: 15px; text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/338112125202515601/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/338112125202515601' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/338112125202515601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/338112125202515601'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2014/10/confiar-en-que-el-viewstate-de-una.html' title='Confiar en que el viewState de una página en Asp.NET está cifrado: ¡Error!'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-6675323264626993057</id><published>2017-07-06T18:44:00.000-04:00</published><updated>2018-05-24T11:15:08.728-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="phishing"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad de aplicaciones web"/><title type='text'>¿Qué es la autentificación bidireccional y para qué sirve?</title><content type='html'>No se trata de explicar en este artículo lo mal que la han pasado desde hace ya más de dos o tres años, una innumerable cantidad de&amp;nbsp;instituciones de todo tipo, debido a la proliferación de tipos de ataques &quot;client side&quot; como el Phishing, XSS, Pharming, y otros que no vamos a mencionar por lo largo de la lista, dirigidos específicamente a sus clientes y usuarios. Pero quizás no es tan obvio como lo primero entender que todos estos ataques pudieron haber sido reducidos en un alto porcentaje si se hubieran implementado a tiempo &lt;b&gt;soluciones de autentificación bidireccionales.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
¿De qué trata este nuevo&amp;nbsp;término? La idea es muy simple:&lt;br /&gt;
No se trata solo de que la aplicación web autentifique y valide que el usuario es quien dice ser, se trata además de que el usuario pueda de igual forma validar y autentificar que la aplicación web sea la que aparentemente es.&lt;br /&gt;
&lt;br /&gt;
Lo extraño de esto es que a pesar de ser una idea básica y muy simple, ha sido implementada en muy pocas aplicaciones y el sufrimiento del usuario ante las técnicas de robo de información y usurpación de atributos de uso y acceso continúa&amp;nbsp;tan vivo como siempre.&lt;br /&gt;
&lt;br /&gt;
Pues bien, para que vean que no es tan compleja la idea y menos su aplicación voy a dar un ejemplo.&lt;br /&gt;
&lt;br /&gt;
Para empezar el banco o institución A, en el proceso de registro de sus usuarios, agrega una simple rutina mediante la cual cada uno de ellos seleccione de una librería de imágenes simples y fáciles de recordar, aquella que más se identifique con él. No quiero complicar esto en este momento, pero el usuario podría inclusive modificar algunos aspectos de la interfaz de la aplicación, &quot;personalizándola&quot;, y asociar por ejemplo a la imagen &quot;una frase célebre&quot;.&lt;br /&gt;
&lt;br /&gt;
Luego de este proceso el usuario para ingresar a la interfaz privada de la aplicación debe pasar por un sistema de ingreso algo diferente a lo convencional que podemos denominar &quot;doble capa de acceso&quot;. Este proceso no significa más que proporcionar los pasos de acceso en dos fases:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;En la primera fase el usuario insertará su identificador de usuario (login) y algún otro detalle a&amp;nbsp;discreción&amp;nbsp;del banco A, como por ejemplo el número o nombre de la agencia en la que abrió su primera cuenta.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Mediante los datos proporcionados en la primera fase por el usuario, el sistema pasa a una segunda fase en la que le muestra a este los cambios realizados a la interfaz y la imagen seleccionada por él en el proceso de registro. Solo si los anteriores corresponden entonces el usuario debe procede a colocar la pieza más crítica de sus datos: su clave de acceso.&lt;/li&gt;
&lt;/ol&gt;
Por tanto si no aparecen correctamente la interfaz y la imagen que el usuario seleccionó, seguramente estará ante la presencia de una página falsa y no procederá a insertar el resto de los datos de acceso. Un par de buenos mensajes como: &quot;Si usted no puede ver su imagen de identificación o si nota algún cambio en su interfaz, no coloque su clave de usuario bajo ningún pretexto&quot;, son suficientes para que el usuario sepa que hacer en caso de un intento de phishing.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;¿Es este proceso demasiado complejo de implementar?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Una de las principales razones que se esgrimen para no hacerlo, es que el proceso de ingreso debe ser realizado en dos etapas o dos páginas, con lo que se hace algo más lento. Esta es en realidad una excusa muy burda, ya que el usuario agradece y con creces este proceso que ya ha sido implementado en algunas instituciones y lo agradece de forma radical, es decir utilizando esas aplicaciones mucho más que otras quizás de mayor funcionalidad pero no tan seguras (al menos en apariencia).&lt;br /&gt;
&lt;br /&gt;
Otro punto a favor de la idea y en contra de la anterior excusa es que este doble proceso puede ser simplificado radicalmente con&amp;nbsp;técnicas&amp;nbsp;actuales como AJAX, que además le ponen el proceso de emulación del sitio al atacante algo más cuesta arriba. No es tan sencillo hacer phishing de un sitio que cambia según lo que agregamos en él y mucho menos si esperamos ver cambios que solo la aplicación y nosotros conocemos.&lt;br /&gt;
&lt;br /&gt;
Además el hecho de que el campo de introducción de la clave aparezca en una segunda fase y solo si los primeros datos coinciden, reduce drásticamente la superficie de ataque hacia los campos más sensibles de una segunda etapa.&lt;br /&gt;
&lt;br /&gt;
Es así de sencillo, pero a pesar de ello las estructuras mentales de los que toman este tipo de decisiones siguen prefiriendo pelear semi-desnudos contra el el phishing y otros flagelos. No me gustaría tener que darle la razón a los hackers cuando mencionan como un hecho que &quot;los &lt;a href=&quot;http://www.webster-dictionary.org/definition/code%20grinder&quot;&gt;code grinders&lt;/a&gt; tienen la creatividad de una rana&quot;.&lt;br /&gt;
&lt;br /&gt;
Hasta la próxima!</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/6675323264626993057/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/6675323264626993057' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/6675323264626993057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/6675323264626993057'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/04/que-es-la-autentificacion-bidireccional.html' title='¿Qué es la autentificación bidireccional y para qué sirve?'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-6683852209991287986</id><published>2016-02-08T23:01:00.000-04:30</published><updated>2018-05-24T11:15:54.066-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas y riesgos"/><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo seguro"/><category scheme="http://www.blogger.com/atom/ns#" term="métodos de defensa"/><category scheme="http://www.blogger.com/atom/ns#" term="OWASP"/><category scheme="http://www.blogger.com/atom/ns#" term="pen-testing"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad web"/><title type='text'>OWASP Dirbuster - Escaneando directorios y archivos ocultos de una aplicación web</title><content type='html'>Uno de los problemas más comunes a la hora de programar es la creencia de que una página o directorio al que no lleva ningún enlace, jamás serán vistos. Pues si esto fuera cierto, lo sería solo en parte, y esa parte dependería de la facultad del programador de escoger nombres complejos y difíciles de adivinar por los expertos en seguridad y por supuesto los atacantes.&lt;br /&gt;
&lt;br /&gt;
La idea de este artículo, es la de encarar al programador con herramientas capacitadas para descubrir la mayor parte del árbol de directorios de nuestra aplicación así como muchas de las rutinas y páginas de esta, por el simple motivo de que todos los programadores usamos casi las mismas herramientas, venimos de una misma corriente de pensamiento o leemos los mismos artículos y vemos las mismas películas y libros. En pocas palabras que debido a que usamos Macromedia Dreamweaver o Visual Studio, nombramos los directorios y archivos de una forma específica.&lt;br /&gt;
&lt;br /&gt;
Este tipo de herramientas trabajan con diccionarios de nombres de archivos y directorios (en varios idiomas) los cuales se prueban solos o con extensiones comunes. Por ejemplo, este tipo de aplicaciones no tardaría prácticamente nada en descubrir un archivo cuyo nombre fuera &quot;admin.zip&quot; en donde un programador incauto podría haber dejado copia de respaldo de todas las rutinas del backoffice de su aplicación. Ejemplos como este hay muchos y algunos espeluznantes, ya que los aciertos no necesariamente son tan sencillos de imaginar como el anterior.&lt;br /&gt;
&lt;br /&gt;
En fin, la intención es que ustedes mismos puedan descubrir cuan vulnerables son esas rutinas administrativas que damos por ocultas o inalcanzables desde la web, y para ello no hay mejor maestro que la experiencia. Y&amp;nbsp;precisamente para que podamos experimentar con nuestras aplicaciones web,&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.owasp.org/&quot;&gt;OWASP&lt;/a&gt; (quien más podría ser) ha puesto uno de sus proyectos &amp;nbsp;de seguridad al alcance de todos, y en este caso se trata específicamente del Proyecto &quot;&lt;a href=&quot;http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project&quot;&gt;Dirbuster&lt;/a&gt;&quot;. Disbuster (según palabras de sus creadores) es una aplicación Java multi hilo diseñada para obtener por fuerza bruta los nombres de directorios y archivos en servidores de aplicaciones web.&lt;br /&gt;
&lt;br /&gt;
Puede descargarla en formato comprimido zip &lt;a href=&quot;http://downloads.sourceforge.net/dirbuster/DirBuster-0.9.12.zip?use_mirror=osdn&quot;&gt;en este enlace&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Recuerde,&amp;nbsp;&lt;a href=&quot;http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project&quot;&gt;Dirbuster&lt;/a&gt;&amp;nbsp;no es más que una aplicación eficiente que nos muestra las posibles fallas de seguridad en la forma en que nombramos nuestras rutinas y directorios, pero cualquier herramienta de análisis de vulnerabilidades seria cuenta con rutinas para el mismo fin y algunas veces suelen ser muy superiores a esta.&lt;br /&gt;
&lt;br /&gt;
Ejecute&amp;nbsp;&lt;a href=&quot;http://www.owasp.org/index.php/Category:OWASP_DirBuster_Project&quot;&gt;Dirbuster&lt;/a&gt;&amp;nbsp;sobre su aplicación web de forma local, para evitar demoras por problemas de ancho de banda o bloqueo de firewalls, y verá como su forma de nombrar sus archivos y directorios cambiará para siempre.&lt;br /&gt;
&lt;br /&gt;
Hasta la próxima...</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/6683852209991287986/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/6683852209991287986' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/6683852209991287986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/6683852209991287986'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/02/uno-de-los-problemas-mas-comunes-la.html' title='OWASP Dirbuster - Escaneando directorios y archivos ocultos de una aplicación web'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-2926620977361380979</id><published>2014-10-03T19:13:00.000-04:30</published><updated>2014-10-04T22:35:11.856-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="OWASP"/><category scheme="http://www.blogger.com/atom/ns#" term="Seguridad aplicaciones móviles"/><title type='text'>OWASP Top 10 Mobile Security Risks</title><content type='html'>&lt;div&gt;
Nuevamente &lt;a href=&quot;http://www.owasp.org/&quot;&gt;OWASP &lt;/a&gt;pone a disposición de los programadores interesados en desarrollar código seguro (debiéramos ser todos, pero tristemente no es así) un proyecto interesante, pero esta vez haciendo énfasis en la programación de aplicaciones móviles. Este proyecto no es más que el &lt;a href=&quot;https://www.owasp.org/index.php/OWASP_Mobile_Security_Project#tab=Project_Overview&quot; target=&quot;_blank&quot; title=&quot;OWASP Mobile Security Project&quot;&gt;OWASP Mobile Security Project,&lt;/a&gt; que al igual que el Web Application Security Proyect ofrece una serie de utilidades, consejos y material didáctico muy interesante.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Dentro de los recursos que ofrece sin fines de lucro este proyecto, no podía faltar la lista de los 10 riesgos más importantes a tomar en cuenta por los programadores al desarrollar aplicaciones para plataforma móviles.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Estos riesgos según OWASP son los siguientes:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;background-color: white; color: black; font-family: sans-serif; line-height: 19.1875px;&quot;&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;
        &lt;a class=&quot;mw-redirect&quot; href=&quot;https://www.owasp.org/index.php/Mobile_Top_10_2012-M1&quot; style=&quot;background-image: none; color: #0b0080; text-decoration: none;&quot; title=&quot;Mobile Top 10 2012-M1&quot;&gt;M1: Insecure Data Storage&lt;/a&gt;&amp;nbsp;- Almacenamiento de datos inseguro&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;
        &lt;a href=&quot;https://www.owasp.org/index.php/Mobile_Top_10_2012-M2&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Mobile Top 10 2012-M2&quot;&gt;M2: Weak Server Side Controls&lt;/a&gt;&amp;nbsp;- Controles del lado del servidor débiles&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;
        &lt;a class=&quot;mw-redirect&quot; href=&quot;https://www.owasp.org/index.php/Mobile_Top_10_2012-M3&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Mobile Top 10 2012-M3&quot;&gt;M3: Insufficient Transport Layer Protection&lt;/a&gt;&amp;nbsp;- Insuficiente Protección en la Capa de Transporte&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;
        &lt;a class=&quot;mw-redirect&quot; href=&quot;https://www.owasp.org/index.php/Mobile_Top_10_2012-M4&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Mobile Top 10 2012-M4&quot;&gt;M4: Client Side Injection&lt;/a&gt;&amp;nbsp;- Inyección del lado cliente&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;
        &lt;a href=&quot;https://www.owasp.org/index.php/Mobile_Top_10_2012-M5&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Mobile Top 10 2012-M5&quot;&gt;M5: Poor Authorization and Authentication&lt;/a&gt;&amp;nbsp;- Autorización y Autentificación Pobres&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;
        &lt;a href=&quot;https://www.owasp.org/index.php/Mobile_Top_10_2012-M6&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Mobile Top 10 2012-M6&quot;&gt;M6: Improper Session Handling&lt;/a&gt;&amp;nbsp;- Manejo indebido de sesión&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;
        &lt;a href=&quot;https://www.owasp.org/index.php/Mobile_Top_10_2012-M7&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Mobile Top 10 2012-M7&quot;&gt;M7: Security Decisions Via Untrusted Inputs&lt;/a&gt;&amp;nbsp;- Desiciones de seguridad a trávés de entradas no confiables&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;
        &lt;a href=&quot;https://www.owasp.org/index.php/Mobile_Top_10_2012-M8&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Mobile Top 10 2012-M8&quot;&gt;M8: Side Channel Data Leakage&lt;/a&gt;&amp;nbsp;- Pérdida de datos por canales laterales&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;
        &lt;a href=&quot;https://www.owasp.org/index.php/Mobile_Top_10_2012-M9&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Mobile Top 10 2012-M9&quot;&gt;M9: Broken Cryptography&lt;/a&gt;&amp;nbsp;- Criptografía Rota&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0.1em;&quot;&gt;
        &lt;a href=&quot;https://www.owasp.org/index.php/Mobile_Top_10_2012-M10&quot; style=&quot;background-image: none; color: #0b0080; text-decoration: none;&quot; title=&quot;Mobile Top 10 2012-M10&quot;&gt;M10: Sensitive Information Disclosure&lt;/a&gt;&amp;nbsp;- Divulgación de información confidencial&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;color: black; font-family: sans-serif; font-size: x-small;&quot;&gt;
        &lt;span style=&quot;line-height: 19.1875px;&quot;&gt;
          &lt;br /&gt;
        &lt;/span&gt;
      &lt;/span&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Georgia, Times New Roman, serif;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;
      &lt;span style=&quot;line-height: 19.1875px;&quot;&gt;Es una lista muy interesante que todo programador de aplicaciones móviles debiera conocer independientemente de a plataforma para la cual desarrolle.&lt;/span&gt;
    &lt;/span&gt;
    &lt;span style=&quot;color: black; letter-spacing: -0.01em; line-height: 19.1875px;&quot;&gt;La lista fue publicada en Junio 2013, y como es lógico todos estos puntos forman parte también del&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.blogger.com/interna.aspx?page=73&quot; style=&quot;letter-spacing: -0.01em; line-height: 19.1875px;&quot; title=&quot;Curso de Seguridad de Aplicaciones Web y Móviles&quot;&gt;curso de Seguridad de Aplicaciones Web y Móviles.&lt;/a&gt;&lt;/span&gt;
  &lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: black; font-family: sans-serif; font-size: x-small;&quot;&gt;
      &lt;br /&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: black; font-family: sans-serif; font-size: x-small;&quot;&gt;
      &lt;br /&gt;
    &lt;/span&gt;
  &lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/2926620977361380979/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/2926620977361380979' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/2926620977361380979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/2926620977361380979'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2013/08/owasp-top-10-mobile-security-risks.html' title='OWASP Top 10 Mobile Security Risks'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-4837129431664295448</id><published>2014-09-22T02:27:00.002-04:30</published><updated>2014-09-22T02:27:26.517-04:30</updated><title type='text'>Desarrollo de aplicaciones móviles con frameworks multiplataforma: lo bueno, lo malo, lo feo...</title><content type='html'>A lo largo de estos últimos dos años hemos visto como en el ámbito de desarrollo de aplicaciones móviles, las herramientas multiplataforma han jugado un papel interesante para muchos programadores abrumados por la cantidad de diferentes lenguajes, APIS y kits de desarrollo propuestos por las diferentes plataformas móviles, quienes queriendo quizás adoptar un estándard se encuentran con que el mismo aún no existe.&lt;br /&gt;
&lt;br /&gt;
Al querer abarcar mayor cantidad de público para sus aplicaciones, los desarrolladores se encuentran con por lo menos tres o cuatro diferentes plataformas, cada una con un sistema operativo, lenguaje de programación y un kit de desarrollo completamente diferente, por lo que en muchos casos en vez de dedicarse al desarrollo de aplicaciones nativas para cada sistema, optan por desarrollar con herramientas multi-plataforma como &lt;a href=&quot;http://phonegap.com/&quot; target=&quot;_blank&quot;&gt;Apache Cordova/PhoneGap&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.appcelerator.com/titanium/&quot; target=&quot;_blank&quot;&gt;Appcelerator&#39;s Titanium&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.sencha.com/products/touch/&quot; target=&quot;_blank&quot;&gt;Sencha Touch&lt;/a&gt;&amp;nbsp;y otras.&lt;br /&gt;
&lt;br /&gt;
Aún así no todo lo que brilla es oro, y existe una larga lista de asuntos pendientes por aprobación que hacen de las aplicaciones desarrolladas con esta técnica algo como una especie &quot;secundaria&quot;. Indudablemente la opción de desarrollar con esta técnica depende directamente del tipo de aplicación a desarrollar y del propósito específico de cada equipo de desarrollo.&lt;br /&gt;
&lt;br /&gt;
Los pros del desarrollo multi-plataforma de aplicaciones móviles pueden resumirse en los siguientes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Código reutilizable:&lt;/b&gt;Solo tienes que escribir el código una vez y aplicarlo en cada plataforma. Esto indudablemente significa una reducción drástica de tiempo y esfuerzo a la hora de calcular los costos de desarrollo.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Fácil acceso a Plug-ins:&lt;/b&gt;Los principales entornos de trabajo le permitirán utilizar extensiones y módulos para mejorar el alcance funcional de su aplicación.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Facilidad de trabajo en grupo:&lt;/b&gt;La gran mayoría de los entornos de trabajo multiplataforma utilizan Javascript, HTML5 y CSS3, haciendo más sencillo el proceso de aprendizaje y la comunicación entre desarrolladores ya que estos son estándares muy conocidos y ampliamente utilizados.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Reducción de costes:&lt;/b&gt;Aunque ya mencionamos esto de pasada en el primer punto, la razón primordial de este punto es la no dependencia de programadores específicos para cada ecosistema y por consiguiente el pago por separado por cada versión de la aplicación según sistema operativo.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Integración con la nube:&lt;/b&gt;Marcos de desarrollo como PhoneGap, Secha y Titanium ofrecen una fácil integración con los servicios de nube, lo que significa que una vez llevado a código el proceso, cualquier versión de la aplicación manejará esta integración casi transparentemente.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
Los contras del desarrollo multi-plataforma de aplicaciones móviles también deben tomarse en cuenta:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Su aplicación podría no soportar todas las características esperadas para cada sistema operativo:&lt;/b&gt;Este es un serio problema con las aplicaciones multi-plataforma, o bien se tienen que ajustar a la velocidad con la que el entorno multi-plataforma se adapte a los nuevos cambios en las versiones de los sistemas operativos, o simplemente hay opciones que no existen o no soporta un sistema operativo determinado. El típico problema de tener que escoger el mínimo común divisor, o decidir fragmentar el código en opciones diferentes para cada sistema operativo.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Restricciones de la herramienta:&lt;/b&gt;En algunos casos por ejemplo en el caso de adoptar librerías de terceros, sobretodo aquellas desarrolladas para lectores de tarjetas, impresoras y componentes externos hay serias limitaciones que en las aplicaciones nativas simplemente no existen.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Su código podría ser algo más lento:&lt;/b&gt;Generalmente el código generado en este tipo de herramientas se apoya en una &quot;traducción&quot; a código nativo, pero en ocasiones el intérprete debe trabajar en tiempo real, haciendo que exista una capa adicional de procesamiento y por ende el código ejecutado sea algo más lento.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Carecen de gráficos y soporte para 3D:&lt;/b&gt;Si piensa desarrollar algún tipo de juego 3D, definitivamente estas herramientas no son la mejor solución. También podría tener problemas si necesita utilizar funciones criptográficas avanzadas ya que cada sistema operativo y lenguaje poseen características que diferencian la parametrización de las líbrerías de cifrado aunque se usen los mismos algoritmos.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Alta dependencia del prooveedor:&lt;/b&gt;La mayoría de los entornos de desarrollo multi-plataforma usan su propio sub-conjunto JavaScript. Esto significa que si en un futuro deseara cambiar de herramienta le sería bastante difícil.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
En conclusión, queda claro que los entornos de desarrollo &quot;híbridos&quot; tienen aún muchos retos por delante, pero si dentro de las necesidades de su empresa no se afectan por los inconvenientes de este tipo de herramienta, pueden ser una buena opción si se necesita una solución rápida y económica.&lt;br /&gt;
&lt;br /&gt;
Redactado por Mauro Maulini R.</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/4837129431664295448/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/4837129431664295448' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/4837129431664295448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/4837129431664295448'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2014/09/desarrollo-de-aplicaciones-moviles-con.html' title='Desarrollo de aplicaciones móviles con frameworks multiplataforma: lo bueno, lo malo, lo feo...'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-7872294719227802549</id><published>2014-07-09T16:46:00.000-04:30</published><updated>2014-09-22T02:32:32.179-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="OWASP"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad de aplicaciones web"/><title type='text'>Cómo implementar el encabezado HTTP Strict Transport Security en código</title><content type='html'>&lt;span style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px;&quot;&gt;Si el video de OWASP del anterior post sobre HSTS (HTTP Strict Transport Security) los dejó con algo de espectativas acerca de la implementación del encabezado de HTTP para el uso estricto de HTTPS, entonces lo que viene a continuación les interesa.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
Si bien se puede implementar el encabezado a nivel de servicio web agregando en la configuración de las diferentes plataformas (Apache, IIS, nginx y otros) un &quot;header&quot;, a veces es mucho más práctico agregar la cabecera directamente a nivel de aplicación o en las rutinas específicamente sensibles.&lt;/div&gt;
&lt;div style=&quot;background-color: white; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
&lt;span style=&quot;font-family: sans-serif; font-size: x-small;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;Cómo el&amp;nbsp;vídeo&amp;nbsp;no nos muestra el código para ello a continuación algunos ejemplos en diferentes lenguajes y/o plataformas:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: sans-serif; font-size: x-small;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
Implementación en&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/PHP&quot; style=&quot;background-image: none; color: #0b0080; text-decoration: none;&quot; title=&quot;PHP&quot;&gt;PHP&lt;/a&gt;.&lt;/div&gt;
&lt;div class=&quot;mw-geshi mw-code mw-content-ltr&quot; dir=&quot;ltr&quot; style=&quot;background-color: #f9f9f9; border: 1px dashed rgb(47, 111, 171); direction: ltr; font-family: monospace, Courier; font-size: 13px; line-height: 1.1em; padding: 1em;&quot;&gt;
&lt;div class=&quot;php source-php&quot; style=&quot;font-family: monospace; line-height: normal;&quot;&gt;
&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-style: italic;&quot;&gt;// Usar HTTP Strict Transport Security para forzar al cliente a usar 
&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;// conex&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;iones seguras&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;re0&quot; style=&quot;color: #000088;&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;re0&quot; style=&quot;color: #000088;&quot;&gt;$use_sts&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw4&quot; style=&quot;color: #009900; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
 
&lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-style: italic;&quot;&gt;// iis sets HTTPS to &#39;off&#39; for non-SSL requests&lt;/span&gt;
&lt;span class=&quot;kw1&quot; style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot; style=&quot;color: #000088;&quot;&gt;$use_sts&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;kw3&quot; style=&quot;color: #990000;&quot;&gt;isset&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot; style=&quot;color: #000088;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;st_h&quot; style=&quot;color: blue;&quot;&gt;&#39;HTTPS&#39;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;re0&quot; style=&quot;color: #000088;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;st_h&quot; style=&quot;color: blue;&quot;&gt;&#39;HTTPS&#39;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;st_h&quot; style=&quot;color: blue;&quot;&gt;&#39;off&#39;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kw3&quot; style=&quot;color: #990000;&quot;&gt;header&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st_h&quot; style=&quot;color: blue;&quot;&gt;&#39;Strict-Transport-Security: max-age=31536000&#39;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;kw1&quot; style=&quot;color: #b1b100;&quot;&gt;elseif&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot; style=&quot;color: #000088;&quot;&gt;$use_sts&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kw3&quot; style=&quot;color: #990000;&quot;&gt;header&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st_h&quot; style=&quot;color: blue;&quot;&gt;&#39;Location: https://&#39;&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot; style=&quot;color: #000088;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;st_h&quot; style=&quot;color: blue;&quot;&gt;&#39;HTTP_HOST&#39;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot; style=&quot;color: #000088;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;st_h&quot; style=&quot;color: blue;&quot;&gt;&#39;REQUEST_URI&#39;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot; style=&quot;color: #009900; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot; style=&quot;color: #cc66cc;&quot;&gt;301&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-style: italic;&quot;&gt;// we are in cleartext at the moment, prevent further execution and output&lt;/span&gt;
    &lt;span class=&quot;kw3&quot; style=&quot;color: #990000;&quot;&gt;die&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
Implementación en&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Perl&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Perl&quot;&gt;Perl&lt;/a&gt;&amp;nbsp;CGI.&lt;/div&gt;
&lt;div class=&quot;mw-geshi mw-code mw-content-ltr&quot; dir=&quot;ltr&quot; style=&quot;background-color: #f9f9f9; border: 1px dashed rgb(47, 111, 171); direction: ltr; font-family: monospace, Courier; font-size: 13px; line-height: 1.1em; padding: 1em;&quot;&gt;
&lt;div class=&quot;perl source-perl&quot; style=&quot;font-family: monospace; line-height: normal;&quot;&gt;
&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-style: italic;&quot;&gt;# Usar HTTP Strict Transport Security para forzar al cliente a usar
&lt;/span&gt;&lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;conex&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;iones seguras&lt;/span&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;kw2&quot; style=&quot;font-weight: bold;&quot;&gt;use&lt;/span&gt; CGI&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw2&quot; style=&quot;font-weight: bold;&quot;&gt;use&lt;/span&gt; URI&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
 
&lt;span class=&quot;kw1&quot; style=&quot;color: #b1b100;&quot;&gt;my&lt;/span&gt; &lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$q&lt;/span&gt;   &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot; style=&quot;font-weight: bold;&quot;&gt;new&lt;/span&gt; CGI&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw1&quot; style=&quot;color: #b1b100;&quot;&gt;my&lt;/span&gt; &lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$url&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; URI&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;kw2&quot; style=&quot;font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$cgi&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: #006600;&quot;&gt;request_uri&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kw1&quot; style=&quot;color: #b1b100;&quot;&gt;my&lt;/span&gt; &lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$use_sts&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot; style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
 
&lt;span class=&quot;kw1&quot; style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$use_sts&lt;/span&gt; &lt;span class=&quot;kw1&quot; style=&quot;color: #b1b100;&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: #006600;&quot;&gt;scheme&lt;/span&gt; &lt;span class=&quot;kw1&quot; style=&quot;color: #b1b100;&quot;&gt;eq&lt;/span&gt; &lt;span class=&quot;st_h&quot; style=&quot;color: red;&quot;&gt;&#39;https&#39;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kw3&quot; style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$q&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: #006600;&quot;&gt;header&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st_h&quot; style=&quot;color: red;&quot;&gt;&#39;Strict-Transport-Security&#39;&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st_h&quot; style=&quot;color: red;&quot;&gt;&#39;max-age=31536000&#39;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;kw1&quot; style=&quot;color: #b1b100;&quot;&gt;elsif&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$use_sts&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: #006600;&quot;&gt;scheme&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st_h&quot; style=&quot;color: red;&quot;&gt;&#39;https&#39;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot; style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$q&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: #006600;&quot;&gt;redirect&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;status &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nu0&quot; style=&quot;color: #cc66cc;&quot;&gt;301&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; location &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;re0&quot; style=&quot;color: blue;&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
Implementación en&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ruby_on_Rails&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Ruby on Rails&quot;&gt;Ruby on Rails&lt;/a&gt;.&lt;/div&gt;
&lt;div class=&quot;mw-geshi mw-code mw-content-ltr&quot; dir=&quot;ltr&quot; style=&quot;background-color: #f9f9f9; border: 1px dashed rgb(47, 111, 171); direction: ltr; font-family: monospace, Courier; font-size: 13px; line-height: 1.1em; padding: 1em;&quot;&gt;
&lt;div class=&quot;rails source-rails&quot; style=&quot;font-family: monospace; line-height: normal;&quot;&gt;
&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;kw1&quot; style=&quot;color: #9966cc; font-weight: bold;&quot;&gt;class&lt;/span&gt; ApplicationController &lt;span class=&quot;sy0&quot; style=&quot;color: #006600; font-weight: bold;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;kw4&quot; style=&quot;color: #cc00ff; font-weight: bold;&quot;&gt;&lt;span class=&quot;re2&quot; style=&quot;color: #6666ff;&quot;&gt;ActionController::Base&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;kw5&quot; style=&quot;color: #5a0a0a; font-weight: bold;&quot;&gt;before_filter&lt;/span&gt; &lt;span class=&quot;re3&quot; style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:ensure_proper_protocol&lt;/span&gt;
 
private
  &lt;span class=&quot;kw1&quot; style=&quot;color: #9966cc; font-weight: bold;&quot;&gt;def&lt;/span&gt; ensure_proper_protocol
    &lt;span class=&quot;kw1&quot; style=&quot;color: #9966cc; font-weight: bold;&quot;&gt;if&lt;/span&gt; request.&lt;span class=&quot;me1&quot; style=&quot;color: #9900cc;&quot;&gt;ssl&lt;/span&gt;?
      response.&lt;span class=&quot;me1&quot; style=&quot;color: #9900cc;&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #006600; font-weight: bold;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: #996600;&quot;&gt;&#39;Strict-Transport-Security&#39;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #006600; font-weight: bold;&quot;&gt;]&lt;/span&gt; = &lt;span class=&quot;st0&quot; style=&quot;color: #996600;&quot;&gt;&#39;max-age=31536000&#39;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot; style=&quot;color: #9966cc; font-weight: bold;&quot;&gt;else&lt;/span&gt;
      &lt;span class=&quot;kw5&quot; style=&quot;color: #5a0a0a; font-weight: bold;&quot;&gt;redirect_to&lt;/span&gt; &lt;span class=&quot;st0&quot; style=&quot;color: #996600;&quot;&gt;&quot;https://&quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #006600; font-weight: bold;&quot;&gt;+&lt;/span&gt; request.&lt;span class=&quot;me1&quot; style=&quot;color: #9900cc;&quot;&gt;host&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #006600; font-weight: bold;&quot;&gt;+&lt;/span&gt; request.&lt;span class=&quot;me1&quot; style=&quot;color: #9900cc;&quot;&gt;request_uri&lt;/span&gt;, &lt;span class=&quot;re3&quot; style=&quot;color: #ff3333; font-weight: bold;&quot;&gt;:status&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #006600; font-weight: bold;&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nu0&quot; style=&quot;color: #006666;&quot;&gt;301&lt;/span&gt;
    &lt;span class=&quot;kw1&quot; style=&quot;color: #9966cc; font-weight: bold;&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;kw1&quot; style=&quot;color: #9966cc; font-weight: bold;&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;kw1&quot; style=&quot;color: #9966cc; font-weight: bold;&quot;&gt;end&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
Implementación en&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/C_Sharp_(programming_language)&quot; style=&quot;background-image: none; color: #0b0080; text-decoration: none;&quot; title=&quot;C Sharp (programming language)&quot;&gt;C#&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/ASP.NET&quot; style=&quot;background-image: none; color: #0b0080; text-decoration: none;&quot; title=&quot;ASP.NET&quot;&gt;ASP.NET&lt;/a&gt;. Código en archivo&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Global.asax&quot; style=&quot;background-image: none; color: #0b0080; text-decoration: none;&quot; title=&quot;Global.asax&quot;&gt;global.asax&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;mw-geshi mw-code mw-content-ltr&quot; dir=&quot;ltr&quot; style=&quot;background-color: #f9f9f9; border: 1px dashed rgb(47, 111, 171); direction: ltr; font-family: monospace, Courier; font-size: 13px; line-height: 1.1em; padding: 1em;&quot;&gt;
&lt;div class=&quot;csharp source-csharp&quot; style=&quot;font-family: monospace; line-height: normal;&quot;&gt;
&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-style: italic;&quot;&gt;// Usar HTTP Strict Transport Security para forzar al cliente a usar 
&lt;/span&gt;&lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;//&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;conex&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;iones seguras&lt;/span&gt;&lt;/pre&gt;
&lt;span class=&quot;kw1&quot; style=&quot;color: #0600ff; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;kw4&quot; style=&quot;color: #6666cc; font-weight: bold;&quot;&gt;void&lt;/span&gt; Application_BeginRequest&lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kw1&quot; style=&quot;color: #0600ff; font-weight: bold;&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;(&lt;/span&gt;Request&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: blue;&quot;&gt;Url&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: blue;&quot;&gt;Scheme&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kw1&quot; style=&quot;color: #0600ff; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;st0&quot; style=&quot;color: #666666;&quot;&gt;&quot;https&quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;:&lt;/span&gt;
            Response&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: blue;&quot;&gt;AddHeader&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: #666666;&quot;&gt;&quot;Strict-Transport-Security&quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot; style=&quot;color: #666666;&quot;&gt;&quot;max-age=31536000&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot; style=&quot;color: #0600ff; font-weight: bold;&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot; style=&quot;color: #0600ff; font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;st0&quot; style=&quot;color: #666666;&quot;&gt;&quot;http&quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;kw1&quot; style=&quot;color: #0600ff; font-weight: bold;&quot;&gt;var&lt;/span&gt; path &lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot; style=&quot;color: #666666;&quot;&gt;&quot;https://&quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;+&lt;/span&gt; Request&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: blue;&quot;&gt;Url&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: blue;&quot;&gt;Host&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;+&lt;/span&gt; Request&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: blue;&quot;&gt;Url&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: blue;&quot;&gt;PathAndQuery&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;;&lt;/span&gt;
            Response&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: blue;&quot;&gt;Status&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot; style=&quot;color: #666666;&quot;&gt;&quot;301 Moved Permanently&quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;;&lt;/span&gt;
            Response&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;me1&quot; style=&quot;color: blue;&quot;&gt;AddHeader&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: #666666;&quot;&gt;&quot;Location&quot;&lt;/span&gt;, path&lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;kw1&quot; style=&quot;color: #0600ff; font-weight: bold;&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: green;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;br0&quot; style=&quot;color: green;&quot;&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
Implementación en&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/ColdFusion_Markup_Language&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;ColdFusion Markup Language&quot;&gt;ColdFusion Markup Language&lt;/a&gt;&amp;nbsp;(CFML).&lt;/div&gt;
&lt;div class=&quot;mw-geshi mw-code mw-content-ltr&quot; dir=&quot;ltr&quot; style=&quot;background-color: #f9f9f9; border: 1px dashed rgb(47, 111, 171); direction: ltr; font-family: monospace, Courier; font-size: 13px; line-height: 1.1em; padding: 1em;&quot;&gt;
&lt;div class=&quot;cfm source-cfm&quot; style=&quot;font-family: monospace; line-height: normal;&quot;&gt;
&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;sc0&quot; style=&quot;color: grey; font-style: italic;&quot;&gt;&amp;lt;!---&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;Usar HTTP Strict Transport Security para forzar a&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;l cliente a usar
&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;conex&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;iones seguras&lt;/span&gt;&lt;span style=&quot;color: grey; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt; ---&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;sc5&quot; style=&quot;color: #333333;&quot;&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kw1&quot; style=&quot;color: #990000; font-weight: bold;&quot;&gt;cfset&lt;/span&gt; use_sts &lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;=&lt;/span&gt; true&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
 
&lt;span class=&quot;sc5&quot; style=&quot;color: #333333;&quot;&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kw1&quot; style=&quot;color: #990000; font-weight: bold;&quot;&gt;cfif&lt;/span&gt; use_sts &lt;span class=&quot;kw7&quot; style=&quot;color: blue;&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;st0&quot; style=&quot;color: #009900;&quot;&gt;&quot;True&quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc5&quot; style=&quot;color: #333333;&quot;&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kw1&quot; style=&quot;color: #990000; font-weight: bold;&quot;&gt;cfif&lt;/span&gt; cgi.https &lt;span class=&quot;kw7&quot; style=&quot;color: blue;&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;st0&quot; style=&quot;color: #009900;&quot;&gt;&quot;on&quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; 
        &lt;span class=&quot;sc5&quot; style=&quot;color: #333333;&quot;&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kw1&quot; style=&quot;color: #990000; font-weight: bold;&quot;&gt;cfheader&lt;/span&gt; &lt;span class=&quot;kw3&quot; style=&quot;color: blue;&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: #009900;&quot;&gt;&quot;Strict-Transport-Security&quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot; style=&quot;color: blue;&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: #009900;&quot;&gt;&quot;max-age=31536000&quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc5&quot; style=&quot;color: #333333;&quot;&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kw1&quot; style=&quot;color: #990000; font-weight: bold;&quot;&gt;cfelse&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; 
        &lt;span class=&quot;sc5&quot; style=&quot;color: #333333;&quot;&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kw1&quot; style=&quot;color: #990000; font-weight: bold;&quot;&gt;cfheader&lt;/span&gt; statuscode&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: #009900;&quot;&gt;&quot;301&quot;&lt;/span&gt; statustext&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: #009900;&quot;&gt;&quot;Moved permanently&quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;sc5&quot; style=&quot;color: #333333;&quot;&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kw1&quot; style=&quot;color: #990000; font-weight: bold;&quot;&gt;cfheader&lt;/span&gt; &lt;span class=&quot;kw3&quot; style=&quot;color: blue;&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: #009900;&quot;&gt;&quot;Location&quot;&lt;/span&gt; &lt;span class=&quot;kw3&quot; style=&quot;color: blue;&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: #009900;&quot;&gt;&quot;https://&quot;&lt;/span&gt; + CGI.SERVER_NAME + CGI.SCRIPT_NAME + CGI.QUERY_STRING&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;sc5&quot; style=&quot;color: #333333;&quot;&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;kw1&quot; style=&quot;color: #990000; font-weight: bold;&quot;&gt;cfif&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;sc5&quot; style=&quot;color: #333333;&quot;&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;kw1&quot; style=&quot;color: #990000; font-weight: bold;&quot;&gt;cfif&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: blue;&quot;&gt;&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; margin-bottom: 0.5em; margin-top: 0.4em;&quot;&gt;
Implementación en&amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/JavaServer_Pages&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;JavaServer Pages&quot;&gt;JavaServer Pages&lt;/a&gt;&amp;nbsp;(JSP) o Java Servlets.&lt;/div&gt;
&lt;div class=&quot;mw-geshi mw-code mw-content-ltr&quot; dir=&quot;ltr&quot; style=&quot;background-color: #f9f9f9; border: 1px dashed rgb(47, 111, 171); direction: ltr; font-family: monospace, Courier; font-size: 13px; line-height: 1.1em; padding: 1em;&quot;&gt;
&lt;div class=&quot;java source-java&quot; style=&quot;font-family: monospace; line-height: normal;&quot;&gt;
&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;pre class=&quot;de1&quot; style=&quot;background-image: none; border: 0px none white; font-size: 1em; line-height: 1.2em; padding: 0px; vertical-align: top;&quot;&gt;&lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-style: italic;&quot;&gt;// Usar HTTP Strict Transport Security para forzar al cliente a usar 
&lt;/span&gt;&lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;//&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;conex&lt;/span&gt;&lt;span style=&quot;color: #666666; font-size: 1em; font-style: italic; line-height: 1.2em;&quot;&gt;iones seguras&lt;/span&gt;&lt;/pre&gt;
&lt;span class=&quot;kw4&quot; style=&quot;color: #000066; font-weight: bold;&quot;&gt;boolean&lt;/span&gt; use_sts &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw2&quot; style=&quot;color: #000066; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
 
&lt;span class=&quot;kw1&quot; style=&quot;font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;use_sts&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kw1&quot; style=&quot;font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;request.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;getScheme&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;equals&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: blue;&quot;&gt;&quot;https&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-style: italic;&quot;&gt;// Send HSTS header&lt;/span&gt;
        response.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;setHeader&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: blue;&quot;&gt;&quot;Strict-Transport-Security&quot;&lt;/span&gt;, &lt;span class=&quot;st0&quot; style=&quot;color: blue;&quot;&gt;&quot;max-age=31536000; includeSubdomains&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;kw1&quot; style=&quot;font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;co1&quot; style=&quot;color: #666666; font-style: italic;&quot;&gt;// Redirect to HTTPS&lt;/span&gt;
        response.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;setStatus&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot; style=&quot;color: #cc66cc;&quot;&gt;301&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw3&quot; style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; url &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot; style=&quot;color: blue;&quot;&gt;&quot;https://&quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; request.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;getServerName&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot; style=&quot;font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;request.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;getPathInfo&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kw2&quot; style=&quot;color: #000066; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
            url &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; url &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;st0&quot; style=&quot;color: blue;&quot;&gt;&quot;/&quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; request.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;getPathInfo&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;kw1&quot; style=&quot;font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;request.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;getQueryString&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kw2&quot; style=&quot;color: #000066; font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; request.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;getQueryString&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nu0&quot; style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
            url &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; url &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;st0&quot; style=&quot;color: blue;&quot;&gt;&quot;?&quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; request.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;getQueryString&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
        response.&lt;span class=&quot;me1&quot; style=&quot;color: #006633;&quot;&gt;setHeader&lt;/span&gt;&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot; style=&quot;color: blue;&quot;&gt;&quot;Location&quot;&lt;/span&gt;, url&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot; style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;br0&quot; style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
Espero les sea suficientemente útil y como podrán apreciar no es nada complicado.</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/7872294719227802549/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/7872294719227802549' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/7872294719227802549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/7872294719227802549'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2012/10/como-implementar-el-encabezado-http.html' title='Cómo implementar el encabezado HTTP Strict Transport Security en código'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-7470631222548014979</id><published>2013-08-12T16:40:00.002-04:30</published><updated>2013-08-12T16:40:41.644-04:30</updated><title type='text'>Las aplicaciones móviles son fáciles de &quot;decomplilar&quot;</title><content type='html'>Todos los programadores sabemos a ciencia cierta que las aplicaciones son de una manera u otra &quot;decompilables&quot;, es decir podemos obtener con las herramientas adecuadas el código fuente de la aplicación para alterarlo y/o modificarlo (y si no lo sabemos es hora de despertar). Sin embargo cuando una aplicación se encuentra en formato binario el proceso de ingeniería de reverso es mucho más complejo, pero no es este el caso cuando hablamos de aplicaciones móviles desarrolladas en lenguajes como Java o .NET que en realidad no se encuentran en código binario sino en formato intermedio conocidas como &quot;bytecodes&quot; en el caso de Java e &quot;intermediate language (IL)&quot; en el caso de .NET&lt;br /&gt;
&lt;br /&gt;
En el caso de iOS, decompilar las aplicaciones es algo más complejo ya que son necesarios decompiladores costosos y conocimiento avanzado de las técnicas, sin embargo tampoco es un trabajo imposible de realizar.&lt;br /&gt;
&lt;br /&gt;
Si dudan de lo anterior, solo necesitan seguir este enlace &lt;a href=&quot;http://www.youtube.com/watch?v=3tioug10tuo&quot;&gt;http://www.youtube.com/watch?v=3tioug10tuo&lt;/a&gt; &amp;nbsp;que los llevará a un video de cómo decompilar aplicaciones para Android.&lt;br /&gt;
&lt;br /&gt;
Por lo tanto es muy importante entender que debemos ser más eficientes y cautos a la hora de hablar de seguridad en el caso de las aplicaciones móviles, ya que ponemos en riesgo nuestro trabajo (lo cual sería lo menos preocupante) así como la &quot;lógica de negocio&quot; de la empresa para la que desarrollamos la aplicación o lo que es peor aún los datos confidenciales de los usuarios que la utilicen.&lt;br /&gt;
&lt;br /&gt;
Hay una buena cantidad de consejos que deberemos tomar en cuenta mientras desarrollamos aplicaciones móviles, pero quizás el más importante de todos pudiera ser si vamos a desarrollar aplicaciones seguras,&lt;b&gt; no dejar jamás datos específicos &quot;hard coded&quot; dentro de la aplicación&lt;/b&gt;. Hablando en lenguaje más simple, no debemos jamás dejar una clave de cifrado, una cadena de conexión a un servidor o base de datos o un algoritmo de negocios en texto plano en nuestro código.&lt;br /&gt;
&lt;br /&gt;
Para evitar lo anterior, todo dato sensible debe ser cifrado y la clave de cifrado debe ser proporcionada por alguna constante del entorno del dispositivo que se mantenga permanentemente pero que sea diferente en otros dispositivos. Por tanto si un amigo de lo ajeno obtiene nuestro código, le será mucho más difícil obtener nuestros datos o lo de nuestros usuarios, ya que cada usuario tendrá una clave de cifrado única.&lt;br /&gt;
&lt;br /&gt;
Lo anterior haría más difícil la obtención de la clave pero no evitaría que el atacante la obtuviera, sin embargo debería repetir un procedimiento complejo para cada usuario o tener acceso directo al dispositivo de cada uno de ellos, lo que reduce drásticamente la superficie de ataque.&lt;br /&gt;
&lt;br /&gt;
Muchos otros son los consejos de seguridad para aplicaciones móviles, como por ejemplo obtener un buen ofuscador de código si realmente se considera de alta prioridad la seguridad, como en el caso de aplicaciones bancarias o de pago. En próximos artículos hablaremos más sobre esto...&lt;br /&gt;
&lt;br /&gt;
Hasta la próxima...</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/7470631222548014979/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/7470631222548014979' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/7470631222548014979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/7470631222548014979'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2013/08/las-aplicaciones-moviles-son-faciles-de.html' title='Las aplicaciones móviles son fáciles de &quot;decomplilar&quot;'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-6929321372971573454</id><published>2012-10-09T13:59:00.003-04:30</published><updated>2012-10-09T14:00:32.499-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="seguridad web"/><title type='text'>OWASP Appsec Tutorial Series - Episodio 4: Seguridad de Transporte Estricta</title><content type='html'>El siguiente episodio de la serie OWASP Tutorial Appsec describe la importancia de utilizar HTTPS para toda la comunicación sensible, y cómo el encabezado HTTP Strict Transport Security (estricta seguridad de transporte) se puede utilizar para garantizar una mayor seguridad, mediante la transformación de todos los enlaces HTTP a HTTPS automáticamente en el navegador.&lt;br /&gt;
&lt;br /&gt;
Espero les sea útil...&lt;br /&gt;
Hasta la Próxima.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;allowfullscreen&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/zEV3HOuM_Vw&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/6929321372971573454/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/6929321372971573454' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/6929321372971573454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/6929321372971573454'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2012/10/owasp-appsec-tutorial-series-episodio-4.html' title='OWASP Appsec Tutorial Series - Episodio 4: Seguridad de Transporte Estricta'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/zEV3HOuM_Vw/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-1786548511425139561</id><published>2012-10-08T23:50:00.000-04:30</published><updated>2012-10-09T16:14:43.646-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET"/><category scheme="http://www.blogger.com/atom/ns#" term="OWASP"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad web"/><title type='text'>Comenzando con Seguridad para ASP.NET</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://ecx.images-amazon.com/images/I/51t-IDyAHPL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://ecx.images-amazon.com/images/I/51t-IDyAHPL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Recientemente llegó a mis manos un libro muy interesante llamado &quot;&lt;b&gt;Beginnig ASP.NET Security&lt;/b&gt;&quot; de la serie de libros de WROX Programmer to Programmer, que no puedo dudar ni por un segundo en recomendarles en este artículo.&lt;br /&gt;
&lt;br /&gt;
A pesar de ser un libro para programadores, su lenguaje es bastante claro en los primeros capítulos para que cualquier programador de la excelente plataforma de desarrollo web de Microsoft, pueda entender sin inconvenientes todos los &quot;intrigulis&quot; de la seguridad web.&lt;br /&gt;
&lt;br /&gt;
En este libro encontrará, como proteger sus aplicaciones en ASP.NET basándose en el documento &lt;a href=&quot;http://tecnologiasweb.blogspot.com/2010/08/los-10-riesgos-mas-comunes-de-las.html&quot;&gt;OWASP TOP 10&lt;/a&gt;, que es el documento creado por la &lt;a href=&quot;http://www.owasp.org/&quot;&gt;Open Web Application Security Proyect&lt;/a&gt;&amp;nbsp;para&amp;nbsp;implantar&amp;nbsp;un estándar de referencia acerca de los 10&amp;nbsp;tipos&amp;nbsp;más comunes de vulnerabilidades detectadas en aplicaciones web. Por tanto el libro toca cada una de las anteriores y muestra las diferentes formas de proteger las aplicaciones, y además permite seguir paso a paso los métodos de cifrado mas eficientes utilizándolos desde la plataforma .NET para proteger los datos de nuestros usuarios.&lt;br /&gt;
&lt;br /&gt;
También maneja un amplio capítulo acerca de la seguridad en el &lt;b&gt;IIS&lt;/b&gt; (Internet Information Server) que es la plataforma de servicios con la que se ofrece lógicamente ASP.NET (entre otros).&amp;nbsp;Además uno de sus más extensos capítulos está dedicado a la seguridad de Web Services, bajo WCF (Windows Communication Foundation) a través de RIA, SOAP y otros protocolos de servicios web.&amp;nbsp;Por último ofrece todo un capítulo que explica como adaptar los procesos de seguridad básicos al ASP.NET MVC (Model View Controller).&lt;br /&gt;
&lt;br /&gt;
El libro está actualizado a la plataforma de ASP.NET 4, pero sus capítulos están adaptados para ser utilizados en versiones anteriores.&lt;br /&gt;
&lt;br /&gt;
Es mi recomendación que este libro se convierta en una referencia de seguridad obligada para todo proyecto en ASP.NET.&lt;br /&gt;
&lt;br /&gt;
Hasta al Próxima...</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/1786548511425139561/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/1786548511425139561' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/1786548511425139561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/1786548511425139561'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/01/comenzando-con-seguridad-para-aspnet.html' title='Comenzando con Seguridad para ASP.NET'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-2822778963507678369</id><published>2012-07-08T18:27:00.000-04:30</published><updated>2012-07-08T23:52:37.798-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="criptografía"/><category scheme="http://www.blogger.com/atom/ns#" term="protección de la clave"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad web"/><title type='text'>¿Cómo mejorar el &quot;hashing&quot; de las claves de acceso sin molestar al usuario?</title><content type='html'>Siempre hemos mencionado que definitivamente&lt;b&gt; &quot;No debemos guardar claves de acceso en nuestras bases de datos&lt;/b&gt;&quot;. Sin embargo la técnica intermedia de guardar el HASH de dichas claves hasta ahora ha sido una solución interesante. Aún así, ya tampoco es muy seguro utilizar esta técnica de forma simple debido a los &lt;a href=&quot;http://tecnologiasweb.blogspot.com/2010/08/ataques-por-diccionario-dictionary.html&quot;&gt;Ataques por Diccionarios&lt;/a&gt; de HASH y los&lt;a href=&quot;http://tecnologiasweb.blogspot.com/2010/10/ataques-por-diccionario-2-que-son-lo.html&quot;&gt; Raibow Tables&lt;/a&gt;.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
También es necesario acotar se ha demostrado que ciertos tipos de hash como el MD5 presentan conflictos de colisiones, por los cuales los certificados SSL que utilizaban este hash quedaron fuera de circulación debido a que podían ser emulados buscando una colisión específica cualquiera que aunque no representara el certificado original, permitiera emularlo.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Por lo tanto la anterior debilidad del MD5 no solo es válida para los certificados SSL sino para cualquier sistema que lo utilice y por consecuencia para cualquier proceso de validación de clave que se base en este algoritmo. Sin embargo las técnicas de &quot;salting&quot; basadas en agregar una cadena específica a la clave de acceso antes de calcular el hash todavía pueden &quot;salvarle el pellejo&quot; en caso de un ataque, ya que aunque el atacante pueda encontrar un texto que colisione con el md5, este no pasaría la validación ya que al agregarle el &quot;salt key&quot; y calcular el hash este cambiaría nuevamente.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Mi recomendación es que definitivamente no cuente con el md5 en sus desarrollos a futuro y trate de reemplazarlo en los existentes. Sin embargo cuando ya usted posee una gran cantidad de usuarios es difícil cambiar de algoritmo de hashing sin obligarlos a cambiar de clave. Usted no puede cambiar el algoritmo simplemente ya que no posee (al menos no debería) las claves originales sobre las que realizar el cálculo del nuevo hash.&lt;br /&gt;
&lt;br /&gt;
Para esto hay un remedio muy eficiente que se basa en utilizar la técnica de &quot;salting&quot; aplicándola al hash que ya posee y calculando un nuevo hash (preferiblemente no md5) sobre el resultado. &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ejemplo:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Imaginemos que el usuario utilizó una clave como por ejemplo:&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Hey@you123&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Usted no conoce dicha clave pero posee el hash MD5&amp;nbsp;de la misma que es lo que hasta ahora ha utilizado para validar el ingreso del usuario a su sistema:&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;27f97cb40faf0a16e09dde2a1c2b25b8&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Agréguele una palabra (salt key) a dicho hash como por ejemplo: &amp;nbsp;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;MySaltKey28&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;La cadena resultante sería en este caso: &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;27f97cb40faf0a16e09dde2a1c2b25b8&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;MySaltKey28&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Ahora calcule un hash nuevamente con el algoritmo que prefiera (en este caso por ejemplo hemos utilizado SHA1):&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 20px;&quot;&gt;4cd80c13b53a136f62732c6a1e3f88200192edbf&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Guarde el nuevo resultado en otro campo y deshágase de todo vestigio del viejo hash md5.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Recuerde que &lt;b&gt;cada vez que un usuario quiera validar usted deberá repetir el proceso empezando por calcular el MD5, agregar el &quot;salt key&quot; y calcular el SHA1&lt;/b&gt;, aunque esto no debiera ser nada complejo si usted prepara una rutina eficiente que siga los pasos requeridos.&lt;br /&gt;
&lt;br /&gt;
Usted&amp;nbsp;habrá&amp;nbsp;utilizado dos técnicas de hashing que juntas pueden garantizar la seguridad de sus usuarios: &amp;nbsp;&quot;&lt;b&gt;Hash Salting&lt;/b&gt;&quot; e &quot;&lt;b&gt;Interacción entre diferentes tipos de hash&lt;/b&gt;&quot;.&amp;nbsp;De esta forma si el nuevo hash cayera en manos indebidas ya no podría obtenerse una colisión ni utilizarse un ataque por diccionario.&lt;br /&gt;
&lt;br /&gt;
Usted puede además complicar este proceso tanto como lo desee agregando más interacciones o cálculos recursivos de hash, pero deberá pensar en el tiempo y recursos que podría tomar un cálculo demasiado complejo en relación a la cantidad de usuarios y cantidad de validaciones que requiera.&lt;br /&gt;
&lt;br /&gt;
Hasta la próxima...&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/2822778963507678369/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/2822778963507678369' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/2822778963507678369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/2822778963507678369'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2010/12/como-mejorar-el-hashing-de-las-claves.html' title='¿Cómo mejorar el &quot;hashing&quot; de las claves de acceso sin molestar al usuario?'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-1881355226520088132</id><published>2012-06-13T22:58:00.000-04:30</published><updated>2012-06-13T19:51:31.225-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="inyección de código"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad web"/><category scheme="http://www.blogger.com/atom/ns#" term="vulnerabilidades"/><title type='text'>¿Qué es una inyección LDAP?</title><content type='html'>Si bien las&lt;b&gt; inyecciones LDAP&lt;/b&gt; no son muy comunes, pueden ser una de las más peligrosas vulnerabilidades en la web.&amp;nbsp;Para empezar necesitamos aclarar para aquellos que no entienden el término que significa el acrónimo LDAP. &lt;b&gt;Lightweight Directory Access Protocol&lt;/b&gt; o traducido al español &lt;b&gt;Protoloco Ligero de Acceso a Directorio&lt;/b&gt; es el que se encarga del control de las listas de control de acceso de un dominio o red determinado. Para los amantes de Windows, quizás hayan escuchado hablar más de Active Directory que no es sino la versión de LDAP del entorno de Windows. Otros sitemas operativos utilizan versiones de OpenLDAP, Novell Directory Services, Apache Directory Service y otros.&lt;br /&gt;
&lt;br /&gt;
Por tanto una vez dicho lo anterior explicamos la forma en que se puede realizar una inyección LDAP. Aunque como dijimos al principio el ataque de inyección LDAP no es muy común, se parece de alguna forma a un &lt;a href=&quot;http://tecnologiasweb.blogspot.com/2008/07/sql-injection-el-enemigo-ms-peligroso.html&quot;&gt;ataque de inyección SQL&lt;/a&gt;, ya que para los efectos de una aplicación web, el acceso a LDAP es muy parecido al acceso a una base de datos, la diferencia estriba en que con los conocimientos necesarios, en vez de atacar a un servidor SQL el hacker ataca al sistema de validación de usuarios, para intentar así cambiar la permisología de estos y hasta crear usuarios con los cuales acceder luego a otros equipos o a zonas más sensibles del dominio.&lt;br /&gt;
&lt;br /&gt;
Uno de los preferidos vectores de acceso son los formularios de búsqueda de usuarios. Imaginesmos un simple formulario que solicite el &quot;login&quot; o identificador de usuario para mostrar algún dato de este.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;lt;input type=&quot;text&quot; size=20 name=&quot;nombre&quot;&amp;gt;Introduzca el nombre de usuario a buscar&amp;lt;/input&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Al igual que en el caso del SQL injection, el programador toma el contenido del campo nombre sin desinfectarlo y lo introduce en una consulta como:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;string nombre = Request.Querystring(&quot;nombre&quot;)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;String ldapSearchQuery = &amp;nbsp;&quot;(cn=&quot; + nombre +&quot;)&quot;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Si el usuario coloca el nombre &quot;alberto&quot; esto produciría la cadena de consulta &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&quot;(cn = alberto)&quot;&lt;/span&gt;. Pero que sucedería si el usuario insertara en el campo nombre la cadena &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&quot;alberto)(|(password=*)&quot;&lt;/span&gt; .En este caso se produciría la cadena resultante &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&quot;(cn=alberto)(|(password=*))&quot;&lt;/span&gt; que devolvería el password del usuario alberto.&lt;br /&gt;
&lt;br /&gt;
Como podrá intuir, otro de los &quot;dulces&quot; preferidos de los hackers son los formularios de entrada que validan a sus usuarios mediante LDAP. La que acabamos de mostrar no es más que una simple técnica de ejemplo. El atacante experimentado suele introducir rutinas completas en una vulnerabilidad como la que acabamos de mostrar.&lt;br /&gt;
&lt;br /&gt;
¿Cuál es el remedio? Validación estricta de los datos de entrada o lo que conocemos como &lt;a href=&quot;http://tecnologiasweb.blogspot.com/2010/07/la-importancia-de-la-desinfeccion-de.html&quot;&gt;desinfección de parámetros del lado del servidor&lt;/a&gt;. De nada sirve validar los datos con Javascript en estos casos, el atacante utiliza formularios forjados o simplemente deshabilita el javascript en su navegador.&lt;br /&gt;
&lt;br /&gt;
Pareciera repetitivo, pero existen muy buenas librerías de &lt;a href=&quot;http://tecnologiasweb.blogspot.com/2010/07/la-importancia-de-la-desinfeccion-de.html&quot;&gt;desinfección de parámetros&lt;/a&gt; para cada uno de los lenguajes de uso común actualmente. Usted también puede verificar las soluciones que ofrecen las extensiones PHPFilter para PHP, Microsoft Web Protection Library y los Proyectos AntiSami de OWASP entre muchas otras.</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/1881355226520088132/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/1881355226520088132' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/1881355226520088132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/1881355226520088132'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2010/12/que-es-una-inyeccion-ldap.html' title='¿Qué es una inyección LDAP?'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-3999373086196948488</id><published>2012-06-13T21:02:00.000-04:30</published><updated>2012-06-13T19:52:07.135-04:30</updated><title type='text'>¿Que es un ataque de DDoS?</title><content type='html'>Escribo este artículo precisamente para aclarar una serie de preguntas de las que he sido objeto en días en que se ha desatado la mayor guerra cibernética de la historia. Es estos últimos día debido al caso WikiLeaks, hemos escuchado y leido acerca del término &lt;b&gt;DDoS&amp;nbsp;&lt;/b&gt;en repetidas ocasiones, asociado a varios ataques realizados a sitios importantes de uno y de otro bando de la confrontación&amp;nbsp;y es necesario aclarar qué significa.&lt;br /&gt;
&lt;br /&gt;
Para empezar hablemos de &lt;b&gt;DoS&lt;/b&gt;, aunque parezcan las siglas de un viejo y recordado sistema operativo hay que notar que la &quot;o&quot; del medio en este acrónimo está en minúsculas intencionalmente, precisamente porque era una manera de diferenciar a este tipo de ataque conocido como &lt;b&gt;Denial of Service (Negación de Servicio)&lt;/b&gt; del viejo sistema operativo DOS.&lt;br /&gt;
&lt;br /&gt;
La técnica de &lt;b&gt;DoS&lt;/b&gt;&amp;nbsp;en palabras simples se basa en solicitar un recurso a un servidor web desde varias locaciones simultáneamente y una gran cantidad de veces de forma que el servidor no pueda atender a otras solicitudes.&lt;br /&gt;
&lt;br /&gt;
Tomemos el clásico el ejemplo del cantinero que puede atender a una serie de clientes en una barra de un bar y de repente se ve completamente&amp;nbsp;agobiado&amp;nbsp;ante las solicitudes de dos equipos completos de&amp;nbsp;fútbol&amp;nbsp;que han llegado a festejar a bar, dejando mal atendidos o desatendidos a los clientes habituales.&lt;br /&gt;
&lt;br /&gt;
En los casos del DoS tradicional la idea es solicitar un recurso muy &quot;pesado&quot; en cuanto a tamaño y potencia de CPU mediante un simple URL que no tiene prácticamente costo de ancho de banda. Sin embargo esta técnica ya no es efectiva ya que cualquier firewall o cortafuegos puede controlar la cantidad de ancho de banda utilizado en satisfacer a un solo cliente y si esta es excesiva bloquea automáticamente las solicitudes provenientes de dicho cliente.&lt;br /&gt;
&lt;br /&gt;
La técnica fue perfeccionándose y los ataque se basaron ya no en solicitar recursos complejos, sino en ubicar una deficiencia en la programación que indujera a errores no controlados (Exploits) para reproducirla la cantidad de veces necesaria para que el servidor quede sin recursos de memoria, espacio en disco u otro recurso necesario. Sin embargo al corregir la vulnerabilidad el método quedaba obsoleto y solo era efectivo en servidores que no hubieran corregido el problema, lo que reducía la efectividad con el tiempo.&lt;br /&gt;
&lt;br /&gt;
A veces la aplicación de la técnica podía ser tan sencilla como ejecutar un error en código tal cantidad de veces que el archivo de registro de sucesos de errores crecía tanto que ocupaba todo el espacio disponible en el equipo del servidor.&lt;br /&gt;
&lt;br /&gt;
Pero esos eran tiempos pasados, el problema ahora es otro aunque los métodos se basan en el mismo principio. Cuando hablamos de &lt;b&gt;DDoS&lt;/b&gt; (con una D más) nos referimos a &lt;b&gt;Distributed Denial of Service&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Para hablar de esta vertiente mucho más compleja del DoS original&amp;nbsp;es necesario explicar que es una &lt;b&gt;BotNet. &lt;/b&gt;El término proveniente de &quot;Ro&lt;b&gt;bots&lt;/b&gt; &lt;b&gt;Net&lt;/b&gt;&quot; o red de robots y se usa para denominar a una red de computadores que han sido infectados con un troyano (o rootkit) que permite al hacker utilizarlos como zombies para enviar SPAM, generar ataques de fuerza bruta para obtención de credenciales y otras &amp;nbsp;técnicas del lado oscuro, como por ejemplo el &lt;b&gt;DDos&lt;/b&gt;. Las BotNets usualmente &quot;pertenecen&quot; a un Hacker o grupo de hackers específico. Mientras más grande la BotNet más &quot;poderoso&quot; es el hacker.&lt;br /&gt;
&lt;br /&gt;
Efectivamente en suma el &lt;b&gt;DDoS&lt;/b&gt; no es más que un ataque de negación de servicio pero distribuido, ejecutado a través de una red de computadores zombies. Sin embargo es muy difícil de detener, ya que no se puede diferenciar el origen del ataque para bloquear las solicitudes ya que estas difícilmente se pueden aislar de las de los clientes reales. Además el hacker utiliza a sus zombies como batallones que atacan en grupos y a diferente flancos (diferentes recursos).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.vinagreasesino.com/imagenes/articulos/199/ataque-ddos-zombie.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://www.vinagreasesino.com/imagenes/articulos/199/ataque-ddos-zombie.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Todos estos zombies en la mayoría de los casos son controlados mediante instrucciones colocadas en un canal de IRC (Internet Relay Chat), una de las más antiguas formas de chatear en la red. Ellos simplemente se conectan a un puerto determinado en un servidor con un dominio flotante, &amp;nbsp;obteniendo instrucciones cada tantos minutos y&amp;nbsp;ejecutándolas.&lt;br /&gt;
&lt;br /&gt;
Aunque estoy a favor de la libertad de expresión y especialmente en el ciberespacio, creo que lo que debiera preocuparnos algo más la cantidad de &amp;nbsp;equipos infectados que están interviniendo en esta guerra virtual.&amp;nbsp;Usted pudiera estar interviniendo en ella mientras lee este artículo sin saberlo.&lt;br /&gt;
&lt;br /&gt;
Hasta la próxima...</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/3999373086196948488/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/3999373086196948488' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/3999373086196948488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/3999373086196948488'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2010/12/que-es-un-ataque-de-ddos.html' title='¿Que es un ataque de DDoS?'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-3433054390931745955</id><published>2012-06-13T20:40:00.000-04:30</published><updated>2014-07-25T01:31:50.759-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas y riesgos"/><category scheme="http://www.blogger.com/atom/ns#" term="técnicas de suplantación"/><category scheme="http://www.blogger.com/atom/ns#" term="vulnerabilidades"/><title type='text'>¿Que es el Cross Site Request Forgery (CSRF)?</title><content type='html'>Cuando apenas empezamos a controlar el dolor de cabeza generado por el XSS (Cross Site Scripting) nos vemos las caras con otra amenaza que aunque lleva tiempo en el ruedo de la seguridad web&amp;nbsp;últimamente&amp;nbsp;pareciera tomar auge definitivo para convertirse en una de las peores amenazas de los próximos años. El&amp;nbsp;&lt;b&gt;CSRF&lt;/b&gt; o &lt;b&gt;Cross Site Request Forgery&lt;/b&gt; también conocido como &lt;b&gt;XSRF&lt;/b&gt;, al contrario del XSS que explota la confianza del usuario en un sitio en&amp;nbsp;particular, explota la confianza del sitio en un usuario en particular. Convencionalmente el &lt;b&gt;CSRF&lt;/b&gt; utiliza a un usuario validado para a través de este introducir solicitudes &quot;válidas&quot; que modifiquen el comportamiento de la aplicación a favor del atacante.&lt;br /&gt;
&lt;br /&gt;
En palabras simples, el atacante usa a la victima para que sea ella misma la que realice la transacción dañina cuando la víctima se encuentra validada en el servidor y en la aplicación específica. El proceso es simple, muchos usuarios no finalizan&amp;nbsp;correctamente&amp;nbsp;(o no pueden hacerlo) sus sesiones en las aplicaciones bancarias o de otra índole que puedan ser afectadas por esta vulnerabilidad y las mantienen activas mientras navegan otros sitios, más aún en tiempos en que las pestañas de los navegadores son muy utilizadas, por tanto desde cualquier otra ventana en el navegador se pudiera inducir al usuario a pulsar un enlace con una orden a sitios en los que el usuario ha ya autenticado, para que el usuario ejecute sin saberlo la acción de ataque.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;¿Cómo evitar el CSRF?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los mejores consejos para los usuarios es simplemente&lt;b&gt; hacer una sola cosa a la vez cuando se trate de manejar sus cuentas en línea&lt;/b&gt;, y salir de las aplicaciones haciendo el respectivo &quot;&lt;b&gt;logout&lt;/b&gt;&quot; que casi siempre significa pulsar un simple botón de &quot;salir&quot; o &quot;abandonar la aplicación&quot;. Por ejemplo: No pulsar un enlace recibido mediante en &quot;Messenger&quot; o en otra pestaña del navegador cuando estamos utilizando la aplicación de nuestro banco puede ser la mejor solución imaginable ante un ataque de CSRF.&lt;br /&gt;
&lt;br /&gt;
Sin embargo para el programador es un poco más difícil prevenir este tipo de ataque.&amp;nbsp;Lo primero indudablemente es darle al usuario la posibilidad de cerrar su sesión. Aunque parezca raro, usted se asombraría de la cantidad de sitios y aplicaciones que no disponen de esta opción una vez que el usuario ha validado su ingreso a las mismas.&lt;br /&gt;
&lt;br /&gt;
En cuanto a código, el mejor de los aliados para controlar el CSRF es el control estricto del Session TimeOut de la aplicación, de forma que si el usuario no se conecta nuevamente y olvida &quot;salir&quot; correctamente de la aplicación, el servidor deberá en un lapso corto de tiempo dar dicha sesión por finalizada.&lt;br /&gt;
&lt;br /&gt;
Otra eficiente forma de controlar el CSRF es la introducción de un &quot;token&quot; dinámico adicional en las solicitudes del cliente que se asocia a la sesión de éste en el servidor y se agrega a todos los enlaces y solicitudes. Este token será siempre diferente por sesión y por usuario por lo que de esta forma se le hace más difícil al atacante tratar de emular el enlace necesario para efectuar el ataque debido a que el token es variable.&lt;br /&gt;
&lt;br /&gt;
Muchos programadores hacen públicos los enlaces privados, y esta es también una razón para que los atacantes utilicen estos enlaces privados a&amp;nbsp;discreción. &lt;b&gt;Los enlaces privados solamente deben ser vistos si un usuario ha validado su sesión&lt;/b&gt; y jamás deben ser expuestos en e-mails o páginas públicas. Esto también parece obvio pero se asombraría al ver la cantidad de enlaces &quot;privados&quot; de un sitio que se pueden obtener mediante técnicas de GHDB (Google Hacking Database).&lt;br /&gt;
&lt;br /&gt;
Hasta la próxima.</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/3433054390931745955/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/3433054390931745955' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/3433054390931745955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/3433054390931745955'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2010/12/que-es-el-cross-site-request-forgery.html' title='¿Que es el Cross Site Request Forgery (CSRF)?'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-4499905497192428946</id><published>2012-06-13T20:05:00.000-04:30</published><updated>2013-08-04T00:03:05.954-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo seguro"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad web"/><title type='text'>Decálogo de Principios de Seguridad para Desarrollo de Aplicaciones Web</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;Independientemente del lenguaje y/o plataforma de desarrollo que usted utilice, hay cosas que de una o de otra forma siempre hay que tomar en cuenta si queremos tener una aplicación web &quot;relativamente&quot; segura. Además acoto la palabra &quot;relativamente&quot;, porque en primer orden nunca se puede obtener una aplicación 100% segura. Dice un chiste de seguridad que la única aplicación segura es la que está desconectada del cualquier red, no se ejecuta y se introduce en un &quot;bunker antiaéreo&quot; sellado a 50 metros de profundidad y aún así nadie apostaría un ojo asegurando la integridad de la misma.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.e-securing.com/images/web-security.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;web-security.png&quot; border=&quot;0&quot; height=&quot;210&quot; hspace=&quot;5&quot; src=&quot;http://www.e-securing.com/images/web-security.png&quot; title=&quot;Web Security - Seguridad Web&quot; vspace=&quot;5&quot; width=&quot;210&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Por lo tanto el presente artículo, tiene como fin el poner al lector al tanto de una serie de principios de seguridad que debería seguir en el proceso de desarrollo si realmente desea obtener un resultado favorable en lo referente a este tema.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Defensa en profundidad.&lt;/b&gt;&lt;br /&gt;
Nunca confíe en un solo punto de defensa. Su aplicación en la mayoría de los casos será siempre la última línea de defensa entre el atacante y servidores del entorno de redes corporativas. Por tanto usted debe proveerle a su aplicación más de un método de defensa si desea proteger servidores de bases de datos e información sensible de la empresa.&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Nunca confíe en las entradas de datos.&lt;/b&gt;&lt;br /&gt;
Como usted podrá descubrir mediante un simple ejemplo de XSS o SQL injection, la mayoría de los problemas empiezan por creer que la validación del lado cliente en Javascript puede ser suficiente, suponer que la única forma de solicitar un tipo de datos es un formulario u olvidar validar que los datos no excedan la capacidad de un contenedor. En las aplicaciones web los datos pueden venir de cualquier parte, pueden ser y muchas veces son forjados, y su aplicación debe tener la capacidad de responder ante este hecho.&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Controle los errores elegantemente.&lt;/b&gt;&lt;br /&gt;
Aunque usted haya pensado en todo, siempre algo nuevo puede suceder para lo que la aplicación podría no estar preparada. Controle las respuestas de error y trate de no entregar en ellas información que pudiera ayudar al atacante a descubrir datos acerca de como está hecha o funcionan los procedimientos de la misma. Utilice siempre que sea posible controles de error (try - catch) para que su aplicación no muestre la típica página de error 500. Una simple página de error 403 (acceso denegado) puede decirle a un escaner de vulnerabilidades que un directorio sacado de un diccionario existe, y permitirle montar un aproximado de su la estructura&amp;nbsp;de directorios por ensayo y error.&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Esté atento a los ataques.&lt;/b&gt;&lt;br /&gt;
Inclusive si usted maneja los errores elegantemente, usted pudiera no estar guardando en bitácora (log) cuáles son las causas de dichos errores. Hacerlo le permitirá corregirlos sin esperar que un usuario se los reporte y además podrá verificar si la aplicación está siendo o ha sido atacada y lo mejor de todo, podrá verificar cómo está siendo atacada.&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Use los menores privilegios posibles.&lt;/b&gt;&lt;br /&gt;
Posiblemente a la hora de desarrollar la aplicación usted no tenga inconvenientes en utilizar una cuenta de administrador de su servidor de bases de datos, pero dejar esa información de conexión administrativa para una aplicación que probablemente solo ejecute procesos que pudieran perfectamente asociarse a una cuenta con muchos menos privilegios, es una falla que puede costar cara si el atacante logra obtener acceso a algún archivo de configuración. Lo mismo sucede con la permisología de escritura y ejecución en directorios. Si solo necesita subir archivos a un directorio una vez, no tiene sentido dejar los privilegios de escritura de forma permanente. Use siempre los menores privilegios posibles para su aplicación.&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Los Cortafuegos (Firewalls) y la Criptografía no son una panacea.&lt;/b&gt;&lt;br /&gt;
Es muy fácil creer que por que algo está cifrado no podrá ser accedido, o que porque tenemos un firewall el atacante no podrá tener acceso al sistema. Ninguno de los anteriores es cierto. Los firewalls deben permitir el acceso al puerto en el que se desempeña su aplicación (típicamente el puerto 80 y el 443) y una sentencia SQL a través de un campo mal validado no puede ser bloqueada por este medio.&lt;br /&gt;
Lo mismo sucede con la cryptografía, hace años se consideraba muy seguro un hash MD5 o SHA1, hoy en día los ataques por diccionario y tablas de arcoiris nos hacen pensar en nuevos métodos y trucos de cifrado que antes no eran necesarios. El ancho de banda y la velocidad de procesamiento hacen posibles ataques por fuerza bruta que tiempo atrás eran impensables.&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;La Seguridad debe ser el estatus por defecto.&lt;/b&gt;&lt;br /&gt;
Es muy fácil instalar un servicio, hardware o aplicación y dejar los atributos por defecto que vienen habilitados desde la casa matriz. Un ejemplo de esto es la cara lección que tuvo que aprender Microsoft por el caso del SQL Slammer, que atacaba el el servicio de SQL Browser que venía activo por defecto en todos los paquetes de SQL Server, cuando en realidad la gran mayoría de usuarios no lo necesitaba. Revise bien los atributos por defecto de sus instalaciones y no deje servicios activos que no necesita. Usted reducirá así la superficie de ataque y con ello el riesgo de uno.&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;El Documento OWASP Top 10&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.owasp.org/&quot; style=&quot;color: #1e7e92; margin-bottom: 12px; margin-top: 14px;&quot; title=&quot;OWASP&quot;&gt;OWASP&lt;/a&gt;&amp;nbsp;desarrolló una lista de los 10 grupos de vulnerabilidades más comunes en orden de importancia. También creó ejemplos explicativos de las mismas y de cómo proteger a su aplicación &amp;nbsp;de dichas fallas o vulnerabilidades. Usted no puede dejar de leer este documento y de aplicar esta lista en el rastreo de los posibles errores de seguridad en su desarrollo. También puede acceder a una traducción hecha por mi persona de la lista&amp;nbsp;&lt;a href=&quot;http://www.e-securing.com/novedad.aspx?id=31&quot; style=&quot;color: #1e7e92; margin-bottom: 12px; margin-top: 14px;&quot; title=&quot;OWASP TOP 10&quot;&gt;en este enlace&lt;/a&gt;.&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Manténgase un paso adelante&lt;/b&gt;&lt;br /&gt;
Su aplicación si bien puede haber sido realizada con todo lo anterior en mente por su propia naturaleza será expuesta a todo el mundo. Internet no es una capsula, nada más lejos de eso. Su aplicación estará disponible a todos los posibles atacantes mediante una simple consulta en un buscador. Google Hacking Database es un ejemplo de cómo obtener listados de posibles aplicaciones víctimas mediante el uso de búsquedas avanzadas en Google. Por tanto usted debe estar al tanto de cualquier tipo de vulnerabilidad descubierta para poder protegerse de ella antes de que un posible atacante descubra la falla en su sitio.&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 6px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Mantenga el software de terceros actualizados.&lt;/b&gt;&lt;br /&gt;
Su aplicación se basa en software desarrollado por terceros en mayor o menor grado. Usted la coloca en un servidor web (Apache, ISS, Nginx, etc) que a su vez corre en un sistema operativo. También accede a manejadores de bases de datos. Todos estos servicios suelen tener fallas y deben siempre que sea posible ejecutar en sus últimas actualizaciones. Usted también podría utilizar manejadores y componentes de terceros directamente en su aplicación. Este y todo tipo de software de terceros debe estar&amp;nbsp;actualizado&amp;nbsp;siempre que sea posible . Usted se sorprenderá al saber que los atacantes son los primeros en estar registrados en las listas de control de vulnerabilidades para saber cuáles versiones de determinado software son vulnerables a un determinado tipo de ataque.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Todos las anteriores son recomendaciones y principios generales que no dependen del tipo de lenguaje y/o plataforma de desarrollo que utilice. Son prácticamente&amp;nbsp;&lt;b&gt;obligaciones que tiene usted como desarrollador para con su empresa, sus clientes y sus usuarios&lt;/b&gt;. Téngalos en cuenta y se ahorrará muchas molestias.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Hasta la próxima!&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/4499905497192428946/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/4499905497192428946' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/4499905497192428946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/4499905497192428946'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/01/decalogo-de-principios-de-seguridad.html' title='Decálogo de Principios de Seguridad para Desarrollo de Aplicaciones Web'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-2888343447193835450</id><published>2012-06-13T18:38:00.000-04:30</published><updated>2012-06-13T19:52:35.269-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas y riesgos"/><title type='text'>Cuando el hacker utiliza los respaldos para vulnerar una aplicación web!</title><content type='html'>Es una técnica tradicional y hasta podría decirse que una costumbre, renombrar algunas rutinas agregándoles la extensión .bak cuando deseamos hacer nuevos ajustes para no perder el código escrito con anterioridad. Algunos de nosotros como programadores utilizamos esta y otras extensiones y simplemente las adosamos a la rutina existente de forma que por ejemplo un archivo &quot;index.php&quot; pasa a ser &quot;index.php.bak&quot; o &quot;index.php.old&quot;. El problema reside en que dejar estas rutinas con dichas extensiones puede ser un peligro latente para la seguridad de nuestro sitio.&lt;br /&gt;
&lt;br /&gt;
Los servidores web, pre-procesan los archivos del tipo php, asp, asp.net, jsp y otros, de forma que el contenido que llega al navegador cliente sea simple HTML (en nuestra jerga HTML plano). Como es conocido, dependiendo del tipo de servidor y tecnología, los archivos con estas extensiones (y algunas otras) son procesados del lado del servidor y definen lo que conocemos como rutinas &quot;server-side&quot;, sin embargo al cambiar la extensión de los mismos a &quot;&lt;b&gt;.bak&lt;/b&gt;&quot;, &quot;&lt;b&gt;.old&lt;/b&gt;&quot; o cualquier otro tipo de extensión no asociada a un proceso en el servidor, simplemente hacemos que el servidor entregue el archivo &quot;como es&quot;, entregando el código &quot;tal cual&quot; lo hemos escrito&quot;. Para ello el atacante posee herramientas que intentan obtener nuestras rutinas con una serie de extensiones&amp;nbsp;comúnmente&amp;nbsp;usadas para archivos de respaldo. Inclusive apoyado en otra vulnerabilidad, podría obtener dichos listados directamente en Google (&lt;a href=&quot;http://tecnologiasweb.blogspot.com/2010/12/que-es-el-google-hacking-database-ghdb.html&quot;&gt;ver artículo sobre Google Hacking Database&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
De esta forma puede llegar a obtener información de calidad acerca de nuestra aplicación y de nuestro servidor, como nombres de conexiones y bases de datos, directorios físicos de nuestro servidor y muchas otras cosas que pudieran abrir una brecha razonable de seguridad.&lt;br /&gt;
&lt;br /&gt;
Sin embargo el anterior es el menor de los casos. Muchas veces existen respaldos completos de un sitio en formato &quot;zip&quot; o &quot;rar&quot; ubicados bajo el directorio principal, con el mismo nombre de alguna de las carpetas o directorios bajo este.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si el programador creó un sub-directorio en donde lleva todo el control administrativo llamado &quot;admin&quot; (por cierto admin es un mal nombre para un directorio administrativo de la aplicación) es probable que desde la interfaz de escritorio del servidor haya hecho un respaldo de dicho directorio con solo pulsar el botón derecho del ratón y ubicar la opción por defecto de enviar a carpeta comprimida en formato &quot;zip&quot;. Por tanto todo lo que hay que hacer es intentar ubicar el archivo &quot;admin.zip&quot; bajo dicho directorio para obtener una copia completa y funcional de dicha aplicación. &lt;br /&gt;
&lt;br /&gt;
Lo que pudiera suceder en este caso de que el atacante obtenga una copia actualizada del código&amp;nbsp;completo&amp;nbsp;del sitio, lo dejo a su imaginación... Este último punto pareciera un absurdo, sin embargo se sorprenderían de saber la cantidad de sitios que han sido vulnerados por esta razón.&lt;br /&gt;
&lt;br /&gt;
¿Cómo protegernos?&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;De ahora en adelante, si es necesario dejar archivos de respaldo de las rutinas en el servidor de producción (debiera ser un absurdo, para eso existen los entornos de desarrollo) entonces deberemos &lt;b&gt;renombrar los mismos sin cambiar la extensión&lt;/b&gt;, ejemplo: index.old.php, index.bak.aspx. De esta forma siempre será procesado el código y al navegador cliente&amp;nbsp;llegará&amp;nbsp;solo HTML plano.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Bajo ningún pretexto dejar cualquier tipo de respaldo comprimido del sitio web en el sitio web&lt;/b&gt;. Esto no tiene otra solución razonable. No se debe hacer y punto! Hacerlo es como dejar los planos de nuestros puestos de avance en manos del enemigo.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Hasta la próxima...</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/2888343447193835450/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/2888343447193835450' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/2888343447193835450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/2888343447193835450'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2010/12/como-el-hacker-utiliza-los-respaldos.html' title='Cuando el hacker utiliza los respaldos para vulnerar una aplicación web!'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-3464976963781609746</id><published>2011-12-26T17:37:00.000-04:30</published><updated>2012-07-24T01:18:35.383-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="diseño web"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML5"/><category scheme="http://www.blogger.com/atom/ns#" term="Navegadores"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>¿Cuál es el soporte actual de HTML5 en los navegadores web?</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Una duda muy importante a la hora de adoptar un estándar es que tan soportado es el mismo por los navegadores más populares usados por el común de los usuarios.&lt;br /&gt;
&lt;br /&gt;
HTML5 es una nueva propuesta que está siendo adoptada por todos en mayor o menor grado y aunque significa un gran salto en referencia a anteriores propuestas, quizás por esta razón no es adoptada al 100% &amp;nbsp;y cada navegador la ha adoptado según sus posibilidades o según las exigencias de los usuarios.&lt;br /&gt;
&lt;br /&gt;
Para saber qué tan compatible es tu navegador con el nuevo e increíble HTML5 solo necesitas navegar al siguiente enlace desde el mismo&amp;nbsp;&lt;a href=&quot;http://html5test.com/&quot;&gt;&lt;b&gt;http://HTML5test.com&lt;/b&gt;&lt;/a&gt;, sin embargo, como no siempre tenemos a mano todos los navegadores populares en nuestros equipos, les presento una lista de algunos de ellos instalados bajo sistema operativo Windows 7. Los resultados pueden extrapolarse perfectamente a otros sistemas operativos ya que lo que se mide en ellos es la tolerancia y compatibilidad del intérprete de HTML5 que suele ser prácticamente igual un el mismo navegador instalado en otros sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
Lo que he podido comprobar al visitar esta página con diferentes versiones de navegadores, es que ninguno de ellos ha adoptado la totalidad del estándar, siendo el mejor evaluado Chrome (versión&amp;nbsp;19.0.1084.52m) con 402 puntos de 500 posibles, seguido de cerca por Opera (11.62) con 338 puntos, para continuar la lista con por Firefox (11.0) con 330 puntos, Safari (5.1) con 277 puntos, y finalizar con Internet Explorer (9.0.8) con solo 138 puntos.&lt;br /&gt;
&lt;br /&gt;
Estos resultados fueron obtenidos para la última actualización de este artículo (01 de junio 2012) con las últimas versiones conocidas de los navegadores, y demuestran varias cosas:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;El supuesto soporte de HTML5 en la versión 9.0.8 de IE ha sido implementado de forma realmente tímida y al parecer Microsoft ha puesto su esfuerzo en el próximo IE10 porque no se ve ninguna mejora a lo largo de todo un año.&lt;/li&gt;
&lt;li&gt;Chrome sigue a la vanguardia en lo referente a HTML5 y supera a algunos competidores con amplio margen. Sin embargo es seguido bastante de cerca por Opera.&lt;/li&gt;
&lt;li&gt;Safari y Firefox si bien muestran un soporte decente del nuevo estándar, han mostrado un ligero avance al respecto en sus últimas versiones desde nuestra última toma de datos en diciembre 2011.&lt;/li&gt;
&lt;/ul&gt;
A continuación las capturas de pantalla que demuestran lo anterior:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6eOrPlHDfXy-LJT46AIbv9hI-Lh-nBx-roPD0bGJK1XO06iqTTCgpr4WgABgc-3m04xvlov9dfCn63XCEUBoMu0kTEUBmpQKT2eWa8QrQ9YL8SmiAeQlHHWPpcg_beGHRc7VgAT1kZNDG/s1600/chrome19.0.1084.52m.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;229&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6eOrPlHDfXy-LJT46AIbv9hI-Lh-nBx-roPD0bGJK1XO06iqTTCgpr4WgABgc-3m04xvlov9dfCn63XCEUBoMu0kTEUBmpQKT2eWa8QrQ9YL8SmiAeQlHHWPpcg_beGHRc7VgAT1kZNDG/s320/chrome19.0.1084.52m.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Chrome 19.0.1084.52m&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbydwwq9e1Uol8b94PQKDzYDUKzlkW6V8-n7NnEKOXM43uajpv3tTH3NuQbQEdQpON21HZtrST5dcD_v9AHSSMdVd9vocWnSFXOarIPqZzlOwp6bvWMXSKqDi3TkaU7-ke3Tx9y_dPDtMx/s1600/opera11.62.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;233&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbydwwq9e1Uol8b94PQKDzYDUKzlkW6V8-n7NnEKOXM43uajpv3tTH3NuQbQEdQpON21HZtrST5dcD_v9AHSSMdVd9vocWnSFXOarIPqZzlOwp6bvWMXSKqDi3TkaU7-ke3Tx9y_dPDtMx/s320/opera11.62.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Opera 11.62&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7ST-AQpGhzZzxoaooHxFFtjMrfhP8QosLkFAa4jkNeLI14iw7nWWxoMyJcEoTJwVX6Bz3rPIQqcdTD_rZ2HDy_EFN8DH6aPFszqpRwrWshn7_Rd6D6RNKyhzx11ttyHme5F9d8-BmcRur/s1600/safari.5.1.2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;229&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7ST-AQpGhzZzxoaooHxFFtjMrfhP8QosLkFAa4jkNeLI14iw7nWWxoMyJcEoTJwVX6Bz3rPIQqcdTD_rZ2HDy_EFN8DH6aPFszqpRwrWshn7_Rd6D6RNKyhzx11ttyHme5F9d8-BmcRur/s320/safari.5.1.2.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Safari 5.1.2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi31g_VXWwZRe4nULKb1sa43ZOxVEuwDQI83eadHumrCPATjHyBjaHBcnJo_BMfESXATppmC57t9gVsrOAYFUHVJojDzMBxnpj79pJ912-tIAa9h69aPyB-cmD_AnAQOd1HngryW28WJP6T/s1600/firefox.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;248&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi31g_VXWwZRe4nULKb1sa43ZOxVEuwDQI83eadHumrCPATjHyBjaHBcnJo_BMfESXATppmC57t9gVsrOAYFUHVJojDzMBxnpj79pJ912-tIAa9h69aPyB-cmD_AnAQOd1HngryW28WJP6T/s320/firefox.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Firefox 12.0&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvc4ZowtMPWDcnmMDc6QSpmlnWaI7YB5zd76R4q_PPD9bfvBTc9PeepHLIB8Li0naUu10T2UOXYNr_HICxIJ9Niv8QV1YxM6VUW27-CAKznq8PDMA3bWP8jtES0oW7UesMSPJGCPzPcE1V/s1600/IE9.0.8112.16421.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;217&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvc4ZowtMPWDcnmMDc6QSpmlnWaI7YB5zd76R4q_PPD9bfvBTc9PeepHLIB8Li0naUu10T2UOXYNr_HICxIJ9Niv8QV1YxM6VUW27-CAKznq8PDMA3bWP8jtES0oW7UesMSPJGCPzPcE1V/s320/IE9.0.8112.16421.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;IE 9.0.8.112&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Para cualquier otra prueba simplemente visita este enlace:&amp;nbsp;&lt;a href=&quot;http://htmltest.com/&quot;&gt;&lt;b&gt;http://htmltest.com&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Allí podrás obtener además de la puntuación de cualquier versión de navegador la relación de soporte de cada&amp;nbsp;uno los tags, items y nuevos parámetros del estándar propuesto para verificar las posibilidades actuales de desarrollar tus sitios con cada uno de estos nuevos elementos.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Hasta la próxima...&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/3464976963781609746/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/3464976963781609746' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/3464976963781609746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/3464976963781609746'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/09/cual-es-el-soporte-actual-de-html5-en.html' title='¿Cuál es el soporte actual de HTML5 en los navegadores web?'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6eOrPlHDfXy-LJT46AIbv9hI-Lh-nBx-roPD0bGJK1XO06iqTTCgpr4WgABgc-3m04xvlov9dfCn63XCEUBoMu0kTEUBmpQKT2eWa8QrQ9YL8SmiAeQlHHWPpcg_beGHRc7VgAT1kZNDG/s72-c/chrome19.0.1084.52m.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Porlamar, Venezuela</georss:featurename><georss:point>10.960463 -63.85059</georss:point><georss:box>10.898107000000001 -63.929553999999996 11.022819 -63.771626</georss:box></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-592834538029073812</id><published>2011-08-27T15:00:00.002-04:30</published><updated>2012-06-01T19:48:56.111-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="análisis de vulnerabilidades"/><category scheme="http://www.blogger.com/atom/ns#" term="escaneo"/><category scheme="http://www.blogger.com/atom/ns#" term="herramientas de pen-testing"/><category scheme="http://www.blogger.com/atom/ns#" term="pen-testing"/><title type='text'>Samurai: Entorno de Testeo de Aplicaciones Web</title><content type='html'>He recibido varios correos solicitándome consejos acerca de cuál pudiera ser la mejor herramienta para diferentes trabajos relacionados con &quot;pen-testing&quot; de aplicaciones web. No es fácil tener siempre a mano la respuesta ya que es muy vasta la cantidad de herramientas y estas son en muchos casos bastante específicas en lo referente a su alcance. Por esta razón siempre es útil poder disponer de varias de ellas y tener a mano un compendio de las mismas en nuestro equipo para resolver apropiadamente las necesidades para cada área específica del &quot;pen-testing&quot; de aplicaciones web.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Samurai es precisamente eso, un compendio de aplicaciones que incluye lo que en la mayoría de los casos necesitamos, un entorno de pruebas para aplicaciones web es un marco de trabajo en GNU/Linux/Ubuntu que se distribuye en formato de Live CD y contiene las mejores aplicaciones de código abierto y gratis que se enfocan en testear y atacar sitios web. En el desarrollo de este entorno, fueron seleccionadas las herramientas que los profesionales de seguridad de aplicaciones web comunmente usan en sus prácticas de seguridad. En el mismo fueron incluidas herramientas de cada uno de los cuatro pasos del proceso de un test de penetración web.&lt;br /&gt;
&lt;br /&gt;
La ventaja es que podemos ejecutarlo desde un DVD, o instalarlo para luego modificarlo a discreción según nuestras necesidades específicas.&lt;br /&gt;
&lt;br /&gt;
Empezando con el proceso de &quot;reconocimiento o footprinting&quot;, se incluyeron herramientas como Fierce domain scanner y Maltego. Para el &quot;mapeo o mapping&quot; fueron incluidas herramientas como WebScarab y Ratproxy. También se incluyeron herramientas de &quot;discovery o descubrimiento&quot; como W3af y Burp. Para la fase final de &quot;explotación o exploitation&quot; se dispuso de BeEF, AJAXShell y varias más.&lt;br /&gt;
&lt;br /&gt;
El CD de Samurai, también incluye una &quot;wiki&quot; preconfigurada para ser el almacen central de información a medida que las vulnerabilidades y debilidades vayan siendo descubiertas.&lt;br /&gt;
&lt;br /&gt;
Otro de los detalles interesantes, es que el navegador web (Firefox) viene pre-configurado con una serie de extensiones muy utilizadas en labores de pen-testing como por ejemplo Firebug, Hackbar y varias más.&lt;br /&gt;
&lt;br /&gt;
Esta invaluable herramienta de seguridad para aplicaciones web en su versión 0.9.9 liberada el 13 de agosto de 2011 (al momento de escribir esto), puede ser descargada en formato ISO desde SourceForge en este enlace:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://sourceforge.net/projects/samurai/files/&quot;&gt;http://sourceforge.net/projects/samurai/files/&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Hasta la próxima...</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/592834538029073812/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/592834538029073812' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/592834538029073812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/592834538029073812'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/08/samurai-entorno-de-testeo-de.html' title='Samurai: Entorno de Testeo de Aplicaciones Web'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-8758078817778075960</id><published>2011-07-14T21:05:00.001-04:30</published><updated>2012-06-01T19:49:41.812-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas y riesgos"/><category scheme="http://www.blogger.com/atom/ns#" term="DoS"/><category scheme="http://www.blogger.com/atom/ns#" term="integer overflow"/><title type='text'>DoS producido por fallas de la Aplicación (Application Failure DoS)</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
Uno de los métodos más eficientes de bloquear o conseguir que una aplicación quede fuera de servicio, consiste en ubicar fallas comunes de aplicación que ejecutadas repetitivamente dejen a la aplicación y/o al servidor de la misma sin los suficientes recursos como para seguir prestando el servicio a sus usuarios.&lt;br /&gt;
&lt;br /&gt;
A continuación enumeraremos y daremos una breve explicaciçon de las variantes de este tipo de ataque y la falla de programación en la que se basan para causar el daño perseguido por el atacante.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SQL wildcard attack:&lt;/b&gt;&lt;br /&gt;
Se basan en consultas que consumen gran cantidad de recursos del servidor SQL del que se alimenta la aplicaión, creando consultas con &quot;wilcards&quot; disponibles en las sentencias LIKE. Unos de los servidores más vulnerables a este tipo de ataque es el MSSQL debido a que posee unos tipos de caracteres wildcard muy potentes (%,[],[^],_). &lt;br /&gt;
&lt;br /&gt;
Una consulta como:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;SELECT * FROM Article WHERE Content LIKE &#39;%foo%&#39; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
puede ser resuelta en una tabla con unos 10000 registros en menos de un segundo, mientras que la siguiente consulta puede amarrar al CPU hasta por 6 segundos en una tabla de apenas 2500 registros:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;SELECT TOP 10 * FROM Article  &lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;WHERE Content LIKE &lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&#39;%_[^!_%/%a?F%_D)_(F%)_%([)({}%){()}£$&amp;amp;N%_)$*£()$*R&quot;_)][%](%[x])%a][$*&quot;£$-9]_%&#39;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;DoS Locking Customer Accounts (DoS mediante bloqueo de cuentas de usuario):&lt;/b&gt;&lt;br /&gt;
Muchas aplicaciones bloquean al usuario si este o un atacante que se trate de hacer pasar por él cometen errores en la validación por más de un número determinado de veces. Este tipo de ataques convierte este mecanismo en un arma de negación de servicio creando intentos de ingreso con identificadores de usuarios conocidos.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;DoS Buffer Overflow (DoS mediante desbordamiento del buffer):&lt;/b&gt;&lt;br /&gt;
Intentan generar errores de Buffer Overflow en las rutinas que solicitan datos, convirtiéndose en un arma que no permita que dichas rutinas completen su ciclo y liberen los recursos solicitados antes de que dicho error aparezca. El Buffer Overflow se genera cuando el atacante logra introducir datos en campos no suficientemente bien validados, que superan la capacidad del contenedor o variable creada para contenerlos. Por ejemplo si una variable se declara como entero simple de 16 bits, no podrá soportar que el atacante introduzca en un campo sin validar un número de 7 cifras. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;DoS User Specified Object Allocation (DoS mediante creación de recursos específicos por el usuario):&lt;/b&gt;&lt;br /&gt;
Sucede cuando un usuario puede solicitar múltiples copias de un determinado objeto sin límite superior, lo que es utilizado para consumir toda la memoria asignada a la aplicación. Por ejemplo, si un usuario solicita un acceso a un determinado recurso que se guarda temporalmnete en una variable de sesión sin que exista un límite para la cantidad de veces que pueda hacerlo.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;User Input as a Loop Counter (Utilizar el input de usuario como contador de bucles):&lt;/b&gt;&lt;br /&gt;
Se produce al forzar a la aplicación a entrar de forma repetitiva en un bucle de código que consuma gran cantidad de recursos. Se genera cuando se utiliza un parámetro que provee el usuario, como contador de un bucle y este es forjado por el atacante para aumentar radicalmente el numero de interacciones del bucle de código. Un ejemplo práctico puede ser un parámetro utilizado como contador de un sistema de paginación que se reciba por el URL. Si el atacante lo modifica podría lograr que en vez de mostrar una cantidad limitada de datos se muestre el contenido completo de una determinada consulta. Este ataque puede ser utilizado en conjunto con el SQL wildcard Attack.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Writing User Provided Data to Disk (Escribir datos que provee el usuario a disco):&lt;/b&gt;&lt;br /&gt;
Este tipo de ataque obliga al servidor a quedar sin suficiente espacio en disco, escribiendo datos provistos por el usuario, o llenado los archivos de logs.&lt;br /&gt;
Por ejemplo, uno de los problemas de un ataque por fuerza bruta que guarda los intentos fallidos en un archivo de registro, es que aunque no logre dar con la clave de acceso de un determinado sistema, puede dejar sin espacio en disco al servidor, debido a que el archivo de registro puede alcanzar un tamaño insospechado. Los formularios públicos que guardan datos en disco, deben ser controlados para que no puedan ser llenados por BOTs (sistemas de llenado automáticos) ya que pudieran agregar millones de datos basura al disco.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;DoS Failure to Release Resources (DoS por fallas al liberar recursos):&lt;/b&gt;&lt;br /&gt;
Se debe a fallas del programador o del entorno en liberar eficientemente los recursos utilizados por la aplicación. Suele suceder con frecuencia al no liberar conexiones y sets de registros de bases de datos. Esta falla es muy simple de descubrir aunque no lo parezca, a veces el hacker todo lo que necesita es utilizar una herramienta de escaneo de vulnerabilidades para darse cuenta que los requerimientos excesivos de un recurso o página determinada al servidor lo hacen cada vez más lentos. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Storing too Much Data in Session (Guardar demasiados datos en sesión):&lt;/b&gt;&lt;br /&gt;
Sucede cuando se guardan demasiados datos en la sesión del usuario, específicamente si el usuario no es un usuario autentificado, por lo cual el atacante no necesita de mucho esfuerzo para dejar a la aplicación sin recursos en el pool de memoria.</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/8758078817778075960/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/8758078817778075960' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/8758078817778075960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/8758078817778075960'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/07/dos-producido-por-fallas-de-la.html' title='DoS producido por fallas de la Aplicación (Application Failure DoS)'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-225863357033112373</id><published>2011-07-13T00:29:00.001-04:30</published><updated>2011-07-13T00:31:35.052-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas y riesgos"/><category scheme="http://www.blogger.com/atom/ns#" term="OWASP"/><title type='text'>OWASP Appsec Serie de Tutoriales - Episodio 3: Cross Site Scripting (XSS)</title><content type='html'>Ya acaba de ser publicado el tercer episodio de OWASP Appsec Tutorial Series que trata específicamente acerca de XSS o mejor conocido como Cross Site Scripting. No dejes de verlo es muy interesante y sencillo de entender.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe width=&quot;510&quot; height=&quot;320&quot; src=&quot;http://www.youtube.com/embed/_Z9RQSnf8-g&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Hasta la próxima...</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/225863357033112373/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/225863357033112373' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/225863357033112373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/225863357033112373'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/07/owasp-appsec-serie-de-tutoriales.html' title='OWASP Appsec Serie de Tutoriales - Episodio 3: Cross Site Scripting (XSS)'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/_Z9RQSnf8-g/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-571029420254190627</id><published>2011-07-05T16:44:00.001-04:30</published><updated>2012-06-01T19:50:05.006-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="métodos de defensa"/><category scheme="http://www.blogger.com/atom/ns#" term="programación"/><category scheme="http://www.blogger.com/atom/ns#" term="protección de la clave"/><category scheme="http://www.blogger.com/atom/ns#" term="seguridad de aplicaciones web"/><title type='text'>¿Por qué el &quot;login&quot; o identificador de usuario es usado como un campo clave?</title><content type='html'>Hace unos tres años tuve una pequeña controversia con un ingeniero de una empresa a la que prestabamos nuestros servicios, simplemente porque él consideró un exabrupto el hecho de que yo le propusiera que usara un campo clave diferente al identificador de usuario convencionalmente conocido como &quot;login&quot; en la tabla de los usuarios de su aplicación web. No fué ese el único caso en el que sentí que las personas a quienes proporcioné dicho consejo lo tomaron como una locura por no decir algo peor.&lt;br /&gt;
&lt;br /&gt;
Pero póngamonos a reflexionar un instante: En la actualidad todos los sistemas de manejo de bases de datos relacionales (MySQL, PostgreSQL, MSSQL, PL-SQL y otros) manejan tipos de campos de identificación de registros que se generan automáticamente de forma más que eficiente y que en muchos casos suelen ser utilizados como los connocidos IDs (Id_user por ejemplo). Estos pueden contener hashes únicos, ser campos autonuméricos secuenciales o simplemente identificadores aleatorios a gusto del programador.&lt;br /&gt;
&lt;br /&gt;
El campo comunmente conocido como &quot;login&quot; si bien tiene que ser demostradamente único para un determinado usuario no necesita ser utilizado para identificar un determinado registro de usuario en un grupo de tablas relacionadas. Existen muchos otros identificadores más sólidos y fiables como por ejemplo el número del documento de identidad del usuario o simplemente un campo clave autogenerado.&lt;br /&gt;
&lt;br /&gt;
Aclaremos, no hablo de eliminar el identificador de usuario de los procesos de validación de ingreso, lo que estoy proponiendo es que este campo no sea utilizado como campo clave del registro ya que esto último es una limitación seria de seguridad en la mayoría de los casos, ya que al ser un campo clave relacionado con otras tablas y procesos, no podremos cambiar su contenido.&lt;br /&gt;
&lt;br /&gt;
Todos aquellos que hemos hecho alguna vez un sistema de control de acceso, sabemos que ciertas rutinas como aquellas de recuperación y cambio de clave de acceso son ciertamente parte obligada de dichos sistemas, debido a que bajo un concepto de seguridad obsoleto, el campo correspondiente a la clave de acceso soporta todo el peso de la seguridad del proceso de validación de ingreso. Esto puede variar, si permitimos que también pueda ser cambiado el campo correspondiente al identificador del usuario.&lt;br /&gt;
&lt;br /&gt;
Imaginemos el ejemplo típico en que una persona en una empresa detecta el &quot;login&quot; del administrador o gerente de la misma en una interfaz de acceso de un programa o aplicación de banca en línea. Para poder penetrar en la aplicación solo necesita conocer el password. Imaginemos también que este segundo dato es obtenido mediante cualquier proceso de hacking o ingeniería social de los tantos existentes y que el gerente de la empresa se percata o sospecha que alguien ha utilizado sus datos de acceso. El paso siguiente será cambiar la clave para tratar de que el atacante no pueda ingresar nuevamente. Sin embargo si no conoce el proceso por el cuál su clave ha sido vulnerada (vector de ataque) lo más probable es que en poco tiempo el atacante pueda nuevamente conocer dicha clave y entrar nuevamente en la aplicación.&lt;br /&gt;
&lt;br /&gt;
Sin embargo otra cosa sería que el atacante tenga nuevamente que descubrir dos campos, ya que en nuestra aplicación hemos permitido (verificando que no puedan existir duplicados) que el usuario pueda cambiar no solo la clave de acceso sino también el identificador de usuario. Haciendo esto reducimos la presión sobre el campo de la clave de acceso y repartimos algo mejor la responsabilidad de ingreso en ambos campos. También aumentamos radicalmente el tiempo necesario para adivinar los datos por fuerza bruta. No tendremos que controlar demasiado la longitud de dicho campo ya que no se repetirá su contenido en otras tablas, pudiendo permitir inclusive logins en forma de frases. Identificadores de acceso como &quot;El mejor usuario que ha tenido este banco&quot; no deberían extrañarnos y serían mucho más difíciles de adivinar.&lt;br /&gt;
&lt;br /&gt;
Los hackers me han enseñado que si uno quiere saber el login o identificador de un usuario, en el 50% de las veces basta con saber la parte anterior al arroba (@) en su dirección de e-mail principal. Permitiendo o exigiendo cambiar el identificador en un caso de sospecha de intrusión la seguridad del sistema de ingreso aumentará radicalmente y esta premisa dejaría de ser cierta.&lt;br /&gt;
&lt;br /&gt;
De todas &amp;nbsp;formas aclaro que tampoco es muy sano tener solamente dos factores de autentificación en un sistema de acceso, pero mucho menos lo es que uno de esos dos factores sea prácticamente público y permanente. Actualmente los factores de autentificación solicitados por empresas de certificación y de regulación están en el orden de cuatro o cinco incluyendo un factor externo a la aplicación. Sin embargo eso es tema para otro artículo.&lt;br /&gt;
&lt;br /&gt;
Hasta la próxima!</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/571029420254190627/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/571029420254190627' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/571029420254190627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/571029420254190627'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/07/por-que-el-login-o-identificador-de.html' title='¿Por qué el &quot;login&quot; o identificador de usuario es usado como un campo clave?'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-913771790122904203.post-6082274531373039687</id><published>2011-06-14T19:24:00.000-04:30</published><updated>2011-06-14T19:24:38.536-04:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="amenazas y riesgos"/><category scheme="http://www.blogger.com/atom/ns#" term="cursos"/><category scheme="http://www.blogger.com/atom/ns#" term="desarrollo seguro"/><category scheme="http://www.blogger.com/atom/ns#" term="Ecuador"/><category scheme="http://www.blogger.com/atom/ns#" term="Guayaquil"/><category scheme="http://www.blogger.com/atom/ns#" term="Quito"/><title type='text'>Curso de Seguridad de Aplicaciones Web en Quito y Guayaquil</title><content type='html'>Un gran éxito (debo confesar aunque a mi no me toca decirlo), han sido los cursos de &quot;Seguridad de Aplicaciones Web&quot; dictados en Guayaquil y Quito, a los que asistieron buena parte de los programadores, desarrolladores y expertos en seguridad de sistemas del área bancaria del hermano país de Ecuador.&lt;br /&gt;
&lt;br /&gt;
Promocionado por Banred y E-Securing C.A. en el curso se trató principalmente cada uno de los puntos del OWASP Top 10 con ejemplos y descripciones de cada uno de los puntos del conocido documento. Sin embargo la temática a diferencia de otros cursos de seguridad para aplicaciones web se basó esta vez en técnicas pro defensa del usuario. Consejos importantes acerca de como combatir el phishing, pharming, tab-nabbing, clickjacking y otras técnicas que no dependen directamente de las vulnerabilidades de las aplicaciones web, fueron parte importante de la segunda fase del curso y captaron fuertemente el interés de la audiencia, que por demás está aclarar&amp;nbsp;fue&amp;nbsp;una de las mejores que he tenido el honor de tutelar en este tipo de eventos.&lt;br /&gt;
&lt;br /&gt;
En realidad&amp;nbsp;fue&amp;nbsp;un placer dictar los cuatro cursos (2 en cada ciudad) para un grupo de profesionales que además de captar en gran medida mi exposición, hicieron del curso una plataforma de discusión muy interesante aportando sus experiencias y dudas.&lt;br /&gt;
&lt;br /&gt;
Debo agradecer ante todo a la gente de Banred, que fueron quienes coordinaron todo lo referente a la logística y en especial a Lizzie Noblecilla (Lider de Proceso Revisión y Control de Banred) y al Lic. Pablo Narvaez (Gerente General de Banred) sin cuya ayuda seguramente los cursos no hubieran sido posibles.&lt;br /&gt;
&lt;br /&gt;
Ya estamos pensando en preparar una serie de talleres de seguridad de aplicaciones web, en los que les prometo que hablaré mucho menos... :D&lt;br /&gt;
&lt;br /&gt;
Muchas gracias nuevamente a todos los asistentes, organizadores y en especial a la gente de las hermosas ciudades de Guayaquil y Quito, ah sin olvidar a la gente que asistió al evento por&amp;nbsp;vídeo&amp;nbsp;conferencia desde Loja.&lt;br /&gt;
&lt;br /&gt;
Hasta la próxima...</content><link rel='replies' type='application/atom+xml' href='http://tecnologiasweb.blogspot.com/feeds/6082274531373039687/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/913771790122904203/6082274531373039687' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/6082274531373039687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/913771790122904203/posts/default/6082274531373039687'/><link rel='alternate' type='text/html' href='http://tecnologiasweb.blogspot.com/2011/06/curso-de-seguridad-de-aplicaciones-web.html' title='Curso de Seguridad de Aplicaciones Web en Quito y Guayaquil'/><author><name>Mauro Maulini R.</name><uri>http://www.blogger.com/profile/04096102705585033967</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>