Como hackear páginas web ( en serio )

Las webs hoy en día son cada día mas seguras. ¿O no? Como intento demostrar frecuentemente en twitter, tal vez no sea asi.

Nota: Este capitlo es el primero de una serie de — por ahora — dos capitulos. El segundo es un articulo se especializa en identificar potenciales vulnerabilidades, como hackear paginas web (fingerprinting and information gathering).

Hay muchas herramientas hoy en día para encontrar vulnerabilidades en una web. Si una web utiliza una versión vieja de un CMS, cosa que podemos determinar utilizando una herramienta como Wappalizer o WhatWeb (ver el segundo capitulo de la serie), la cuestión es mas sencilla. Es muy importante hoy en día mantener actualizado nuestro software. En caso contrario, un atacante podría buscar en el changelog de nuestro CMS todo lo referente a correcciones de vulnerabilidades en versiones posteriores a la que nosotros tenemos actualmente.

También hay otras herramientas para hackeear webs, pero yo hoy voy a optar por explicar que tipo de vulnerabilidades se pueden encontrar una web de una manera mas “artesanal”. Este artículo no plantea demostrar un tipo de vulnerabilidad nueva, ni pretende ser la demostración de un conocimiento muy avanzado. Simplemente es una explicación básica de algunos tipos de vulnerabilidades que pueden encontrarse en una web y como un atacante explotaría de ellas. Básicamente, se trata de:

  • Inyecciones SQL
  • Cross Site Scripting ( Javascript injection )
  • Local file inclusion / Remote file inclusion

Para todos los ejemplos, usaremos código de Damn Vulnerable Web App. Te podés descargar esta aplicación para practicar los ejemplos que planteo acá. Todos los ejemplos estan hechos con la seguridad en low. Una vez instalado el app, andá a DVWA Security y elegí “low”.

Continue reading

Compilado de enlaces

¡Hola Gente!

Les dejo un compilado de enlaces mas. La verdad es que estan excelentes.

Un abrazo grande,
Pedro

Sitios web multi-idioma/región y indexación ( Google )

Hola amigos,

El otro día me encontré, navegando por ahi, un artículo del blog oficial de google que trata sobre la visión oficial de google frente a sitios web en múltiples idiomas, y otro que trata sobre la visión de google frente a sitios que apuntan a audiencias en múltiples regiones.

Google apoya ambos tipos de web y los considera perfectamente legales, mas tiene un cierto número de sugerencias para darnos.

Sitios multi-idioma

Un sitio multiidioma es cualquier sitio que provea a sus usuarios contenido en dos o mas idiomas. A lo largo de el artículo, google declara las siguientes recomendaciones:

  • Deberias hacer que cada página, individualmente, sea de un solo idioma: Google automáticamente determina el idioma de tu página web, y es capaz de detectar si la página tiene, por ejemplo, el menú en griego y el contenido en inglés. Es, sin embargo, recomendable mantener cada página en un solo idioma (solo inglés, solo francés, etc). Nótese que google ignora completamente toda la información proveida a nivel código sobre el idioma de la web (etiquetas lang, DTD, etc.)
  • Las URLs deberían de estar escapadas: si quisieramos utilizar en nuestra URL caracteres especiales, tales como áéíóú, deberíamos de crear enlaces a esas urls de manera que esten codificadas (es decir, si tenemos una página ‘averías-web’, debería codificarse a ‘aver%C3%ADas-web’).  Esta función de PHP puede ser de interés.
  • Las traducciones automáticas no deberían ser indexadas automaticamente: Las traducciones automáticas no siempre tienen sentido y podrían potencialmente considerarse como spam.
  • Utilizar UTF-8: Se r ecomienda utilizar utf-8 siempre que fuese posible.

Sitios multi-regionales

Esto se refiere a sitios que disponen a hacer llegar sus contenidos a varias regiones del mundo. De acuerdo a google, la mayoría de los usuarios encuestados consideró que era mas importante el tener la información en su idioma que un buen precio… lo que nos indica que, si queremos ganarnos a los usuarios, tendremos que hacerlo en su idioma.

Google diferencia entre dos tipos de dominos:

  • ccTLDs (country-code top level domain names): Estos son los dominios que estan ligados a un pais en particular ( por ejemplo .com.ar, .pe, .pt, etc.). Los usuarios y navegadores consideran este un importante punto al considerar si el sitio web es de determinado país o no.
  • gTLDs (generic top level domain names): Estos no tienen un vínculo en particular con ningún idioma. Unos buenos ejemplos de estos idiomas serían .com, .net,.org. Hay que tener en cuenta que hay dominios que también, a pesar de incialmente ser ccTLDs, ahora son considerados gTLDs (.asia, .tv, .me)

Para ser reconocidos como un dominio de determinado país, google se basa en los siguientes factores:

  • Utilización de un ccTLDs. Esta es generalmente una señal muy fuerte que el dominio está apuntado a usuarios de determinado país. O, alternativamente, asignar un país manualmente utilizando google webmaster tools. Mas información sobre esto último puede encontrarse en este enlace. Los usuarios que utilizaron este método reportan un aumento en las visitas causadas por su SEO natural y también por su inversión en adwords.
  • La ubicación del servidor (a través de la ubicación del servidor) tiene que estar cerca tus usuarios. Google indica que este no es un factor determinante a la hora de decidir por una región.
  • Otras señales podrían determinar tu ubicación. Esto podría ser, por ejemplo, los teléfonos que se muestran en tu sitio, o la moneda que utilizas. También enlaces de otros sitios locales, y el uso de “Google local Business Center”.
  • Estructuras de URL

    Google nos deja en su sitio una comparación de estructuras de urls que podemos utilizar para dividir nuestro sitio en idiomas.

    ccTLDs

    (sitio.com.ar)

    Pros(+):
    – Clara geolocalización
    – La ubicación del servidor es irrelevante
    – Fácil separación de sitios
    – Requerimientos legales ( en ocasiones )

    Contras(-):
    – Mas caro
    – Mas infraestructura
    – Requerimientos de los ccTLDs ( en ocasiones )

    Subdominios con gTLDs

    (en.sitio.com)

    Pros(+):
    – Facil
    – Puede utilizar las herramientas de Webmaster para geolocalización
    – Permite utilizar distintos servidores
    – Conveniente separación de sitios

    Contras(-):
    – Los usuarios pueden no reconocer tu sitio como de su país ( el subdominio e refiere al país o al idioma?)

    Subdirectorios con gTLDs

    (sitio.com/ar/)

    Pros(+):
    – Fácil de armar
    – Puede usar las Google Webmaster Tools
    – Poco mantenimiento ( el mismo host)

    Contras(-):
    – Los usuarios pueden no reconocer su país
    – Una sola Ubicación de server
    – Separación de sitios mas dificil

    Basado en parámetros GET

    sitio.com?pais=ar

    No recomendada

    Contenido duplicado

    Sitios que provéen el mismo servicio en varios paises pueden generar contenido que es similar o idéntico para varios sitios. Aunque google fuertemente recomienda que esto no sea asi, comprende que en ocasiones esto es imposible. Se indica que no hay necesidad de hacer que el contenido no sea indexable ( utilizando un archivo robots.txt, por ejemplo ), pero, por otro lado, si el mismo contenido se muestra en dos urls sería conveniente hacer un redirect.

    ¡Espero que esto sea de utilidad!

    ¡Saludos!
    Pedro

La biblia de Javascript

En la página que linkeo mas abajo, nos encontraremos con el sitio web de un Gurú de la programación en Javascript. Encontraremos cosas de interés para nosotros los desarrolladores, como las siguientes:

Normalmente, la mayoría de los artículos nos muestran que la única forma de crear un array en Javascript es la siguiente:

var myArray = new Array(10);

Esto funciona correctamente, pero la realidad es que prácticamente nunca tenemos en mente el tamaño de un array al crearlo.

Por eso recomienda crearla de la siguiente manera:

var myArray = [];

De esta forma, declaramos el elemento como array, sin limitarla en ningún aspecto.

Esta info fue encontrada en este blog (inglés), en donde hay mucha mas información interesante sobre las arrays en Javascript.

Otra curiosidad:

El valor de las arrays se pasa por referencia

Es decir:

var myArray = [ 'zero', 'one', 'two', 'three', 'four', 'five' ];

document.writeln(myArray[1]); // Va a mostrar: one

function passedByReference(refArray) {
   refArray[1] = 'changed';
}

passedByReference(myArray);

document.writeln(myArray[1]); // Va a mostrar: changed

Para evitarlo, vamos a tener que llamar la funcion passedByReference de la siguiente manera:

 
passedByReference(myArray.slice());

Javascript es un lenguaje al que realmente le tengo miedo :\ cosas misteriosas pasan por ahi. No se olviden de visitar el sitio de donde saqué la información. Realmente tiene mucha información respecto a arrays en Javascript. También respecto a objetos, funciones y strings.

Una joya.

¡Saludos!
Pedro

Internet explorer 9 (HTML 5, CSS 3)


El mercado de los navegadores sigue avanzando, aunque no al ritmo de la última tecnología web, muy rápidamente. Y tenemos, si queremos mantenerlos al día, que observar al nuevo internet explorer 9.

Este internet explorer parece lograr alcanzar a la web en su totalidad, y – acorde con microsoft – internet explorer goza de las siguientes características:

  • Velocidad: Sometido a las pruebas del WebKit Sunspider, Internet Explorer 9 se ubica en el quinto lugar de los navegadores mas rápidos, superando a la versión 3.7 de firefox.
  • Soporte selectores CSS3: Superó la prueba de selectores css 3 en su totalidad (598 / 598).
  • Soporte de estandares W3C: Se ubica ahora en el navegador que mas soporta los estandares, superando a todos los demás.

Desafortunadamente, parece que la estructura sobre la cual se desarrolló Internet Explorer 9 es demasiado avanzada para un sistema operativo como Windows XP, el sistema operativo mas usado del mundo:

Los usuarios de Windows XP tienen en Internet Explorer 8 un navegador veloz, seguro, estable y con opciones de privacidad. Mientras la Web ha estado evolucionando continuamente en todos los aspectos, desde la seguridad hasta el futuro HTML5 que los desarrolladores de aplicaciones están empezando a construir ese futuro desde hoy, ello exige a los navegadores hardware gráfico moderno y nuevos fundamentos de seguridad, infraestructura que ha surgido después del 2001. Internet Explorer 9 requiere de estos avances y está destinado a ser ejecutado en un sistema operativo moderno, con el fin de aprovechar las últimas innovaciones tanto de hardware como de sistema operativo.
Fuente

Otra característica no tan positiva sobre IE 9 sería su soporte de los estandares web acorde con el Acid 3 test. De acuerdo a este, obtiene un puntaje de 53/100.

Sabiendo estas cosas, podemos llegar a varias conclusiones respecto a como vamos a tener que enfrentar el hecho de desarrollar un sitio.

  • ¿Podremos utilizar los selectores CSS 3 y confiar en que serán soportados en todos los navegadores? Podremos, si utilizamos este script. De lo contrario, no. Ie 6, 7 y 8 no soportan estas características.
  • ¿Podremos utilizar la estructura HTML 5, para que sea mas sencillo indexar nuestros sitios web? Utilizando este script, si. De lo contrario, no.

Sin duda HTML 5 parece ser lo que se viene. Creo que va a ser mucho mas ameno el desarrollar una página web en un futuro, aunque va a ser un desafío hacer que un sitio web soporte todos los navegadores si no abandonamos el soporte para IE 6 pronto. ¿Cómo testear para IE 6, IE 7, IE 8, IE 8 as 7, y IE 9?

Drupal: Como descargar nodos (modulo)

Si, drupal.

Drupal es un CMS, como muchos que existen en el mundo, pero con una diferencia: Drupal es una masa, está espectacularmente desarrollado, y es impresionante ver la cantidad de cosas que pueden hacerse sin tocar una sola línea de código.

Por ejemplo, uno podría asignarle una dirección física (ej Callao 297) a un post (nodo), y luego hacer que automáticamente se muestre un Gmap. Obviamente, algo hay que saber, y no es que lee nuestra mente; pero no es para nada complejo.

Otra cosa que uno podrìa, por ejemplo, es, en caso de que quisiera desarrollar una aplicación que mande datos a un servidor y los guarde y muestre, un simple formulario, hacerlo en una hora y media. Y no me refiero a un form sin estilo, sinó a una aplicación completa con paginado, control de usuarios, upload de múltiples imágenes y muchos chiches mas, como caching, image-resizing, y mas.
Continue reading

Internet explorer 9 y HTML 5 + CSS3

¡Hola amigos!

Vengo con una noticia alegre, y con un humor alegre además, porque, entre otras cosas, me encontré con que internet explorer nueve podría llegar a soportar HTML 5 y CSS 3. ¡Mortal!

grafica comparacion browsers

(La gráfica no tiene nada que ver con nada :P )

¡Un saludo!
Pedro