Seguridad de aplicaciones Web: las técnicas más interesantes para que no hackeen tu aplicación

Post original en JASoft.org: http://www.jasoft.org/Blog/post/Seguridad-de-aplicaciones-Web-las-tecnicas-mas-interesantes-para-que-no-hackeen-tu-aplicacion.aspx

Este pasado martes impartí una charla en el grupo de usuarios de ASP.NET de España (AUGES) titulada como este post:

“Seguridad de aplicaciones Web: las técnicas más interesantes para que no hackeen tu aplicación”

El resumen de la misma es el siguiente:

Programar es mucho más que la simple creación de aplicaciones que cumplen con la funcionalidad para la que fueron diseñadas. Existen otras muchas consideraciones que hacer y multitud de características tan importantes como la propia funcionalidad que se deben tener en cuenta: rendimiento, extensibilidad, facilidad de mantenimiento, etc… entre las que destaca especialmente la seguridad del código que se escribe.

De poco o de nada sirve una aplicación que lleva a cabo su cometido principal pero que permite que casi cualquiera pueda acceder a la información que supuestamente protege o que, debido a la escritura de código descuidado, un competidor desleal impide su funcionamiento cuando más se necesita.

Y no, no llega con tener un buen cortafuegos si el fallo está en la lógica de la aplicación.

En esta charla se analizaron los principales puntos flojos de seguridad que suele haber en las aplicaciones Web ASP.NET, y se enseñará cómo evitarlos. Entre otros temas se tratarán la correcta configuración de IIS, la autenticación y autorización hechas correctamente, la suplantación de usuarios del sistema, las inyecciones de SQL, las secuencias de comandos entre sitios (XSS), los problemas de canonicalización…

Os dejo la grabación completa (¡son dos horas!) a continuación.

OJO: Dado que es una grabación en directo de Live Meeting la calidad del vídeo no es la mejor, pero es suficiente para seguirlo sin problemas. ¡Ponlo mejor a pantalla completa!

En la página de AUGES podrás encontrar los ejemplos de código que utilizao y las slides de la presentación.

¡Espero que te guste y te sea útil!

TRUCO: Cómo detectar el cierre o la salida de una página Web

Post original en JASoft.org: http://www.jasoft.org/Blog/post/TRUCO-Como-detectar-el-cierre-o-la-salida-de-una-pagina-Web.aspx

Seguramente te has topado en algunas ocasiones con que, tras haber rellenado algunos campos de un formulario , algunas aplicaciones Web te avisan si pretendes cerrar la ventana o abandonar la página, ya que perderías los datos.

Yo por ejemplo utilizo bastante el webmail de Google, GMail, y muchas veces si acabo de enviar un correo y cierro muy rápido la ventana, como el correo aún no ha terminado de enviarse me avisa para evitar que se pierda.

¿Cómo es posible conseguir esto?

La verdad es que es muy sencillo y se consigue en la práctica totalidad de los navegadores modernos (excepto en Opera) gracias al evento onbeforeunload de la ventana del navegador.

Consideremos el siguiente ejemplo:

<html>

<head>

<title>Prueba de abandono de página</title>

<script language="JavaScript" type0"text/javascript">
     

    var bPreguntar = true;

     

    window.onbeforeunload = preguntarAntesDeSalir;

     

    function preguntarAntesDeSalir()

    {

      if (bPreguntar)

        return "¿Seguro que quieres salir?";

    }

</script>

</head>

<body>

<h1>Ejemplo de abandono de página</h1>

<p>Por defecto preguntará hasta que pulses el botón de "No preguntar"</p>

<input type="button" value="Preguntar" onclick="bPreguntar = true;" >

&nbsp;&nbsp;

<input type="button" value="No preguntar" onclick="bPreguntar = false;" >

<br/><br/>

<a href="http://www.jasoft.org">Ir a otra página</a>

</body>

</html>

Deja de lado el código JavaScript por un momento.

Como vemos se trata de una página muy sencilla. contiene una cabecera, un texto explicativo, dos botones y un enlace. Su aspecto es el siguiente:

AbandonoPagina_1

Hemos creado una variable booleana, bPreguntar, con el valor por defecto verdadero, de modo que servirá para controlar si debemos preguntarle o no al usuario si de verdad quiere abandonar la página (por defecto se lo preguntaremos).

Lo único que tenemos que hacer es interceptar el evento onbeforeunload de la ventana actual y asignarle un manejador apropiado, en este caso le h llamado preguntarAntesDeSalir.

Dentro de este evento el navegador controlamos si se debe preguntar por el abandono de la página o no. El navegador entiende que si como resultado de este evento pasamos una cadena de texto, deberá preguntarle al usuario con ella si quiere abandonar o no la página, mostrando el texto especificado, y dándole a elegir entre ambas opciones (dejar la página o no):

AbandonoPagina_2

Como vemos apenas podemos controlar el aspecto del diálogo, limitándose a mostrar el texto junto con otro texto estándar del propio navegador.

La única "pega" es precisamente que no seremos capaces de controlar el aspecto de este diálogo y que éste cambia además entre los diferentes navegadores (los tengo todos instalados en inglés):

AbandonoPagina_3

Como vemos Firefox hace caso omiso del texto que le hemos indicado y muestra un mensaje propio. Chrome/Safari e Internet Explorer muestran un mensaje estándar pero lo acompañan de nuestro texto para poder dar una información más detallada. Personalmente el diálogo que me parece más claro es el de Internet Explorer.

Este evento se definió por primera vez en Internet Explorer 4 (¡en 1997!), y los demás navegadores le fueron añadiendo soporte mucho más adelante. En la actualidad está soportado por todas las versiones modernas de los navegadores. Yo lo he probado con Internet Explorer 7, 8 y 9, con Firefox 4, 5, 6 y 7 y con Google Chrome. Debería funcionar perfectamente con Safari tanto en Windows como en Mac. Me consta que no funciona con Opera pero no lo he probado.

¡Espero que te resulte útil!

Cómo mapear tu cuenta de SkyDrive a una unidad en Windows

Post original en JASoft.org: http://www.jasoft.org/Blog/post/Como-mapear-tu-cuenta-de-SkyDrive-a-una-unidad-en-Windows.aspx

SkyDrive es el servicio de almacenamiento en la nube de Microsoft. Te permite almacenar hasta 25 GB de archivos de cualquier tipo, organizados por carpetas, y todo de manera gratuita. Si además tienes un Windows Phone, tu vida móvil pasa por SkyDrive ya que el teléfono está completamente imbricado con este servicio para subir fotos, guardar notas y documentos de Office, etc…

Cualquier cuenta de LiveID lleva asociada una cuenta de SkyDrive:

IntegraSkyDrive_1

 

Microsoft ofrece Live Mesh, un programa gratuito que permite sincronizar archivos entre varios ordenadores y con SkyDrive, de modo que siempre tengamos ciertas carpetas disponibles en cualquier lado. La sincronización entre diferentes ordenadores permite gestionar una cantidad ilimitada de archivos y cualquier cantidad de información, ya que no pasa por el servicio on-line. Pero si queremos mantenerlo sincronizado en la nube y acceder a estos archivos desde cualquier navegador, tenemos un límite de 5 GB de archivos en SkyDrive. Sin embargo el servicio completo son 25 GB. ¿Por qué vamos a «perder» el uso de 20 GB por no poder usarlos cómodamente desde nuestro explorador de archivos de Windows?.

Las carpetas de SkyDrive, aparte de ser accesibles desde un navegador, pueden funcionar también como carpetas Web (mediante el protocolo WebDAV). Esto significa que el sistema operativo puede manejarlas perfectamente desde el explorador de archivos, como si fueran carpetas locales desde Windows XP en adelante. En este ejemplo yo voy a utilizar Windows 7.

En este post explicaré cómo conseguir de manera sencilla que SkyDrive aparezca en el explorador de archivos como una unidad de disco más.

1.- Averiguar la URL de nuestro SkyDrive

Accede a SkyDrive entrando en http://skydrive.live.com.  Tras autenticarte con tu cuenta de LiveID entra en cualquiera de las carpetas públicas que tengas en el servicio. Por defecto existe una carpeta «Público» o «Public» que sirve para colocar archivos que quieras que vea todo el mundo. esa misma nos servirá.

En el lateral derecho tienes un icono grande con una carpeta y debajo las diferentes acciones que puedes realizar con ella. Pulsa en la opción «Obtener un enlace»:

IntegraSkyDrive_2

Al hacerlo se nos ofrece un cuadro de texto con una URL que podemos usar para compartir la carpeta con nuestras amistades y hacer la pública:

IntegraSkyDrive_3

Dentro de ese cuadro de texto la URL tiene varios parámetros. El que nos interesa es el correspondiente a «cid», que es el identificador de nuestra cuenta (en la figura lo he difuminado). Se trata de una ristra de letras y números que debemos copiar y guardar. Haz caso omiso del resto de la URL.

Se puede obtener este mismo identificador usando cualquier otra aplicación que nos deje leer o guardar desde SkyDrive, por ejemplo Office 2010.

2.- Mapear la carpeta Web

Ahora que ya conocemos nuestro identificador abre el explorador de Windows. En la barra de herramientas (o en el menú «Herramientas») pulsa el botón «Mapear unidad de red»:

IntegraSkyDrive_4

En el diálogo que aparece escribe como ruta: https://docs.live.com/xxxxxxx/, sustituyendo «xxxxxxxx» por el identificador del paso anterior:

IntegraSkyDrive_5

Marca la opción de reconectarte tras iniciar sesión. Luego veremos cómo hacer que esto funcione.

Pulsa finalizar.

¡Voilà!. Ya tenemos la unidad mapeada en nuestro explorador de archivos:

IntegraSkyDrive_6

Ahora ya podemos arrastrar y soltar archivos desde nuestros discos locales a SkyDrive y viceversa.

Hay que tener varias cosas en cuenta:

  • Es una unidad remota en Internet por lo que la velocidad de trabajo con ella es lenta, así que un poco de paciencia.
  • Por le mismo motivo anterior, aunque podemos renombrar y mover las carpetas dentro de SkyDrive desde el propio explorador mi recomendación es que si necesitamos hacerlo que lo hagamos desde el navegador Web directamente. Será mucho más rápido.
  • SkyDrive no deja subir de un golpe archivos de más de 50 MB, así que ten cuidado y no intentes subir nada más grande que este tamaño. Imagino que será para evitar que se cuelguen películas y archivos ilegales, pero no lo sé exactamente.
  • Las carpeta cuyo nombre comienza por «^.» son carpetas del sistema que crea y utiliza Windows Phone, asi que ten cuidado al manipularlas. Imagino que si te las cargas no pasa nada y WP las volverá a crear (pero paso de probarlo por vicio, jeje).
  • El nombre de la carpeta creada es bastante feo, así que pulsa con el botón derecho sobre la nueva unidad (paciencia, puede tardar varios minutos para mostrarlo la primera vez) y elige la opción de «Renombrar» y ponle un nombre descriptivo como SkyDrive, como tengo yo en la figura anterior.
  • Cuando visualizas la unidad en el resumen del explorador de archivos te dirá aproximadamente cuánto espacio libre te queda en la unidad SkyDrive, pero sin embargo te dará un tamaño total equivocado. No sé a qué será debido. En mi caso por ejemplo me dice que tengo 85,4 GB:

IntegraSkyDrive_7

3.- Asegurarte que se reconecta al iniciar sesión

En el paso anterior marcamos la opción de que se reconecte en cada inicio de sesión. Para que esto funcione correctamente necesitamos unir nuestra cuenta de usuario de Windows a nuestra cuenta LiveID, para lo cual necesitaremos usar el proveedor de identificadores on-line para Windows Live.

Éste se encuentra ya instalado si utilizas, por ejemplo, Office 2010. Si no lo tienes puedes descargarlo desde aquí (sólo funciona en Windows 7).

Una vez instalado si vas a «Panel de Control·Cuentas de usuario» y buscas tu cuenta, en el lateral existe la opción de «Enlazar identificadores on-line»:

IntegraSkyDrive_8

Al pulsarlo se nos da la opción de enlazar una cuenta LiveID o modificar la existente usando los enlaces correspondientes de la siguiente pantalla:

IntegraSkyDrive_9

A partir de ahora nuestras credenciales locales quedarán enlazadas a nuestras credenciales on-line para acceder a los servicios de Live, por lo que no tendremos ningún problema para utilizar los archivos de SkyDrive en la unidad mapeada.

¡Espero que te resulte útil!

TRUCO: Cómo des-ofuscar código JavaScript de manera rápida

Post original en JASoft.org: http://www.jasoft.org/Blog/post/TRUCO-Como-des-ofuscar-codigo-JavaScript-de-manera-rapida.aspx

Este es un truco muy tonto pero que no todo el mundo conoce. Una vez que lo descubres se convierte en algo que usarás todos los días…

Muchas veces visitamos una página Web que ofrece algún efecto interesante o cualquier otra característica y nos gustaría saber cómo funciona. En otras ocasiones tenemos que depurar el código de otros programadores o usar bibliotecas JavaScript que tienen bugs pero están ofuscadas y no podemos ver su contenido con claridad.

La mayor parte de las veces no se trata de que el creador original del código quiera evitar que lo veamos. Lo que intentan es disminuir al máximo el tamaño del archivo para que se descargue más rápido y consume menos ancho de banda (lo que se conoce como Minimizar o, en inglés y más común, “Minify” un código fuente).

Por si te encuentras ante un caso de estos, en el siguiente vídeo te dejo en un minuto un par de trucos rápidos para ver el código JavaScript con un formato legible y útil a la hora de depurar.

¡Espero que te sea útil!