Libros sobre seguridad web

Buenas.

Como proyecto de final de carrera voy a desarrollar una página web de ventas en línea y a implementarle seguridad. La voy a programar en PHP, con MySQL y AJAX, pero ése no es el problema, sino que me gustaría conocer algunos títulos de libros sobre seguridad web, que expliquen los principales problemas, las soluciones a esos problemas... Y si pudiera ser que incluyera una referencia a los lenguajes mencionados.

La cuestión es que le puedo pedir a mi profesor del proyecto que compre un libro, el que yo crea que sea mejor sobre este aspecto, para lo cual me gustaría tener algunas referencias. Ha de ser en inglés, por cierto.

Ya hice una asignatura sobre seguridad computacional en la carrera, pero no nos centramos en la seguridad web.

Un saludo.

P.D.: lo pongo en software libre porque cuando acabe la web liberaré el código y porque los lenguajes de programación usados son libres, pero si no va aquí, que sea movido, por favor.
creo que aquí es el sitio, no obstante me suscribo al hilo, me interesa ya que tengo varias webs hospedadas actualmente y no me gustaría llevarme sorpresas, no obstante, como recomendación personal, JAMAS contrates dreamhost como empresa de hosting, o al menos que no sea compartido, con acceso ssh puedes acceder a el home de otro usuario, ver los .php con los consecuentes datos de mysql si están hay y liarla es bastante sencillo, yo opté por 1and1 al final, que al menos usan sistema debian con su propio kernel compilado, no todo es la programación de la web xD
Obviamente, lo que haya por debajo funcionando es tan importante como la programación, pero normalmente eso viene ya configurado y, en cambio, si vas a programar una página con cuentas de usuario, no puedes enviar la contraseña en texto plano, por ejemplo.

A ver si alguien sabe algo.

Un saludo.
rrb32 escribió:Obviamente, lo que haya por debajo funcionando es tan importante como la programación, pero normalmente eso viene ya configurado y, en cambio, si vas a programar una página con cuentas de usuario, no puedes enviar la contraseña en texto plano, por ejemplo.

A ver si alguien sabe algo.

Un saludo.


Bueno, eso diceselo a tuenti, facebook (bueno acaba de poner entonces no puedes usar chat XD).
O Nintendo con un admin con pass en blanco... o al "hacker" que robaba y guardaba las cuentas de tuenti en archivos de texto plano permitiendo ademas navegar y descargar completamente su site XD.

Yo no se mucho sobre seguridad de webs..., se como explotarlas si eso, lo que te puedo decir son ejemplos que no puedes seguir XD.
Te podria nombrar decenas de libros, pero como no los he trabajo, no se cual podria recomendarte :(, seguramente lo mas indicado seria mirar en webs dedicadas a la creacion de webs metiendo en el apartado de seguridad donde supongo que tendra una buena bibliografia al respecto o hasta webs dedicadas (esas ya mas famosas XD).
rrb32 escribió:Obviamente, lo que haya por debajo funcionando es tan importante como la programación, pero normalmente eso viene ya configurado y, en cambio, si vas a programar una página con cuentas de usuario, no puedes enviar la contraseña en texto plano, por ejemplo.

A ver si alguien sabe algo.

Un saludo.

todo lo contrario, si queires un buen sistema de seguridad, maquina dedicada y montas tu todo, tu apache o simil, tu base de datos, tu iptables... tus cuentas de usuario, tu root con una buena clave rotativa por hora del dia..., todo eso es necesario, un ssh BIEN configurado que bloquee las ips no deseadas (o que solo admita el rango de tu ciudad) y como no, el server en linux u.u

no rular apache como root (ver dreamhost...)y los logs de acceso que se envien por correo cada X tiempo por si entran de root, o incluso cuando loguee alguien mande un mail o un sms al movil, todo eso es NECESARIO y las empresas no lo hacen. Tenlo en cuenta
Sí, sé que eso es importante, pero eso es configuración y no programación y, además, eso no se incluye en mi proyecto por lo que ahora mismo no necesito tenerlo en cuenta, sobre todo porque la web no va a ser subida a Internet, por el momento.

Estoy preguntando por libros sobre cómo programar de manera segura una página web, no cómo tener un servidor completamente seguro, eso queda fuera del alcance de mi proyecto.

Por cierto, un profesor me pasó esta dirección:

http://www.owasp.org/

Es un proyecto libre sobre la seguridad que puede aparecer en entornos web.

Un saludo.
Para ello debrías aprender las vulnerabilidades más típicas en sitios web que básicamente son inyecciones SQL y ataques de cross site scripting o XSS. Owasp es un buen sitio donde empezar, y puedes buscar ayuda por Google buscando por esos títulos (sql injection, xss). Conocer qué es lo que te hace vulnerable te capacita para protegerte de ello.

El tráfico entre el cliente y el servidor irá en texto plano salvo que utilices HTTPS, y fíjate que la mayoría de sitios NO utilizan HTTPS. En cualquier caso, lo que no debes hacer es almacenar contraseñas de usuarios (ni tampoco correos electrónicos) en texto plano. En caso de que alguien comprometiera la seguridad de tu aplicación y accediera a la base de datos podría acceder a esos datos de los usuarios, lo cual no es bueno ni para ellos ni para ti.

Algunas pistas básicas son: validarlo todo, todo y todo, aceptar sólo lo aceptable en lugar de prohibir sólo lo indeseable y no aceptar nada de fuera, todos los paths deben ser internos y verificados antes de ser utilizados. Esas tres tonterías suelen ser la fuente de la mayor parte de problemas. No es coña, suele ser culpa del programador casi siempre, es mucho más fácil cascar una aplicación en PHP que el Apache. Pide a cualquier conocido que te deje su código PHP y evalúalo, o busca sistemas open source por la web y accede a los trackers de bugs, a ver qué es lo más habitual.
oMega_2093 escribió:Para ello debrías aprender las vulnerabilidades más típicas en sitios web que básicamente son inyecciones SQL y ataques de cross site scripting o XSS. Owasp es un buen sitio donde empezar, y puedes buscar ayuda por Google buscando por esos títulos (sql injection, xss). Conocer qué es lo que te hace vulnerable te capacita para protegerte de ello.

El tráfico entre el cliente y el servidor irá en texto plano salvo que utilices HTTPS, y fíjate que la mayoría de sitios NO utilizan HTTPS. En cualquier caso, lo que no debes hacer es almacenar contraseñas de usuarios (ni tampoco correos electrónicos) en texto plano. En caso de que alguien comprometiera la seguridad de tu aplicación y accediera a la base de datos podría acceder a esos datos de los usuarios, lo cual no es bueno ni para ellos ni para ti.

Algunas pistas básicas son: validarlo todo, todo y todo, aceptar sólo lo aceptable en lugar de prohibir sólo lo indeseable y no aceptar nada de fuera, todos los paths deben ser internos y verificados antes de ser utilizados. Esas tres tonterías suelen ser la fuente de la mayor parte de problemas. No es coña, suele ser culpa del programador casi siempre, es mucho más fácil cascar una aplicación en PHP que el Apache. Pide a cualquier conocido que te deje su código PHP y evalúalo, o busca sistemas open source por la web y accede a los trackers de bugs, a ver qué es lo más habitual.

+999999999 así me la liaron en mi primer proyecto de clase el profesor, sql inyection! xD
oMega_2093 escribió:Para ello debrías aprender las vulnerabilidades más típicas en sitios web que básicamente son inyecciones SQL y ataques de cross site scripting o XSS. Owasp es un buen sitio donde empezar, y puedes buscar ayuda por Google buscando por esos títulos (sql injection, xss). Conocer qué es lo que te hace vulnerable te capacita para protegerte de ello.

El tráfico entre el cliente y el servidor irá en texto plano salvo que utilices HTTPS, y fíjate que la mayoría de sitios NO utilizan HTTPS. En cualquier caso, lo que no debes hacer es almacenar contraseñas de usuarios (ni tampoco correos electrónicos) en texto plano. En caso de que alguien comprometiera la seguridad de tu aplicación y accediera a la base de datos podría acceder a esos datos de los usuarios, lo cual no es bueno ni para ellos ni para ti.

Algunas pistas básicas son: validarlo todo, todo y todo, aceptar sólo lo aceptable en lugar de prohibir sólo lo indeseable y no aceptar nada de fuera, todos los paths deben ser internos y verificados antes de ser utilizados. Esas tres tonterías suelen ser la fuente de la mayor parte de problemas. No es coña, suele ser culpa del programador casi siempre, es mucho más fácil cascar una aplicación en PHP que el Apache. Pide a cualquier conocido que te deje su código PHP y evalúalo, o busca sistemas open source por la web y accede a los trackers de bugs, a ver qué es lo más habitual.


Muchas gracias por la respuesta.

La idea es ésa, ver qué vulnerabilidades hay en el sitio web de ejemplo y tratar de explotarlas para después solventarlas.

Sobre los correos electrónicos, si he de encriptarlos, ¿cómo podría después desencriptarlos para, por ejemplo, enviar un correo electrónico al usuario para avisarle de un pedido o cualquier cosa?

Y sobre las contraseñas, yo había pensado en sacar una codificación hash en parte del cliente, con javascript, y enviar esa codificación hash, que se calcularía cada vez al hacer login, y comparar las cadenas del hash en lugar de la contraseña.

Y, sobre el último párrafo, tengo algunas dudas. ¿A qué te refieres con validarlo todo y aceptar sólo lo aceptable? Es que no acabo de verlo.

Y lo de los paths, imagino que te refieres a que, siempre que haya una referencia a otra página del sitio, al entrar se verifique si pertenece a la lista de enlaces válidos dentro del servidor, ¿no? ¿Tiene algún nombre esto?

Y una última cosa, referente a los objetos: lo mejor es hacerlos ocultos, con __, y en una carpeta con acceso restringido, ¿verdad?

Un saludo.
rrb32 escribió:(...) me gustaría conocer algunos títulos de libros sobre seguridad web, que expliquen los principales problemas, las soluciones a esos problemas (...) puedo pedir a mi profesor del proyecto que compre un libro, el que yo crea que sea mejor sobre este aspecto, para lo cual me gustaría tener algunas referencias. Ha de ser en inglés, por cierto (...)


Estos son los títulos en inglés que tengo por casa sobre el tema:

«Hack Attacks Encyclopedia», John Chirillo (2001, Wiley) 958p + CD. ISBN: 0-471-05589-1
«Web Hacking», Stuart McClure y otros (2003, Addison-Wesley) 524p. ISBN: 0-201-76176-9
«Network Security», Charlie Kaufman y otros (2002, Prentice Hall) 740p. ISBN: 0-13-046019-2
«Counter Hack», Ed Skoudis (2002, Prentice Hall) 586p. ISBN: 0-13-033273-9

Creo que podrían interesarte, especialmente el de McClure. Son ediciones relativamente viejas, teniendo en cuenta que un año es un mundo en este sector. Pero imagino que son buenas referencias en cualquier caso y además es posible que cuenten con reediciones actualizadas.

Más tarde te subo una foto de las portadas, para que los identifiques.


(Edito) Ahí van las fotos:

Imagen

Imagen

Saludos.
9 respuestas