Fernand0 | Es un placer para nosotros presentar a nuestro próximo conferenciante. |
Fernand0 | sssssssssssssssss |
MJesus | por favor, traductors pasen a #qc |
Fernand0 | Se trata de Tomás VV Cox. |
Fernand0 | Algunos de ustedes le |
Fernand0 | conocerán por sus colaboraciones en importantes revistas informáticas: |
Fernand0 | Ha sido redactor para la revista PC Actual durante 3 años en la seccion |
Fernand0 | hoy en dia es administrador y desarrollador web freelance y parte |
Fernand0 | del proyecto PEAR del PHP Group. |
Fernand0 | Queremos agradecer al conferenciante su participación e interés en estas conferencias |
Fernand0 | Por supuesto, agradecer a todos su presencia aquí |
Fernand0 | Su conferencia se titula, 'Por qué la nueva programación, por qué PHP, |
Fernand0 | seguridad de una aplicación web y PEAR'. |
cox | no no, a vosotros por invitarme |
Fernand0 | Sr. Cox .... |
cox | gracias Fer |
cox | bueno, es mi primera conferencia a traves de este medio |
cox | asi que no seais muy severos conmigo please :) |
cox | me gustaria dividir la conferencia en 4 partes si os parece |
cox | para tocar un poco puntos de interes de para todos |
cox | mi idea es: |
cox | - Por qué la nueva programación |
cox | - Por que PHP |
cox | - Fallos de seguridad en aplicaciones web |
cox | - PEAR (proyecto Open Source del PHP Group) |
cox | comencemos pues... |
cox | Por qué la nueva programación |
cox | Cada día la necesidad de estar permanentemente "conectado" es más acuciante (bien, |
cox | hablemos del mundo occidental) |
cox | Esto significa que allá donde vayamos en una |
cox | medida muy alta necesitaremos acceder a cierta información y tener abiertos |
cox | canales para que la gente se comunique con nosotros |
cox | Bien, y que tiene que ver |
cox | la web en esto? |
cox | La web es el medio más universalmente extendido que hoy en día |
cox | existe para conectarse a una red que llegue practicamente a todos los lugares |
cox | ## diganme traductores si voy muy rapido ## |
cox | Existen navegadores y la posibilidad de acceder a Internet desde casi cualquier |
cox | dispositivo imaginable hoy en dia, |
cox | desde los tradicionales PCs, portátiles, |
cox | móviles, PDAs hasta los más esotéricos como electrodomésticos, coches o |
cox | prendas de vestir. |
cox | Bien, esto da mucho juego y la mezcla de todo esto unido a un servicio web |
cox | y una base de datos son inimaginables. Esto es: |
cox | - Acceso universal |
cox | - Reducción de los costes de instalación y mantenimiento (una aplicación web |
cox | es única para todos sus usuarios) |
cox | - Facilidad de aprendizaje (apenas necesitan saber manejar los 4 botones de un |
cox | navegador y rellenar formularios web) |
cox | - Reducción de los costes de implementación. |
cox | Creo firmemente que es muchísimo |
cox | más barato implementar una aplicación con un lenguaje de programación de script |
cox | libre de tediosos procesos de depurado y |
cox | usando un "toolkit gráfico" tan |
cox | sencillo como el HTML, |
cox | que una aplicacion grafica hecha en Java o "Visual *" |
cox | ## demosle un respiro al traductor :) ## |
cox | - Fácil acceso a múltiples fuentes de información, ficheros del sistema, |
cox | bases de datos, otras redes, etc. |
cox | |
cox | Hoy en dia segun nuestra experiencia en el mundo del desarrollo web, hemos visto que muchas ideas que desconociamos que se podian hacer con la programacion web son factibles |
cox | y funcionan realmente bien |
cox | Nombrar'e algunas de ejemplo: |
cox | ## acabo de recordar que mi konsole desde la ultima actualizacion no me soporta acentos, sorry :) ## |
cox | - Mejora de procesos admistrativos (aplicando procesos de workflow sobre la web) |
cox | (una base de datos y el uso de XML ayudaron mucho aqui) |
cox | - Mejora de comunicación con el personal "no residente" de una empresa (como |
cox | por ejemplo comerciales o |
cox | técnicos que deben desplazarse a casa del cliente |
cox | por medio de webmail, foros, web chat o SMS desde la web) |
cox | (la extension IRCG de Mr Sasha Schumman funcionan extraordinariamente bien :) |
cox | - Aumento de la rapidez y comodidad del acceso a la información a usuarios |
cox | (gestión documental) |
cox | ## otro descansito para los translators, good work! ## |
cox | - Aumento de la rapidez y comodidad del acceso a la información a usuarios |
cox | fuera de su puesto de trabajo (por medio de aplicaciones wap) |
cox | |
cox | Por qué PHP |
cox | |
cox | Unos numeros valen mas que mil palabras: |
cox | http://www.netcraft.com |
cox | 36,458,394 Dominios consultados |
cox | 1,046,426 Direcciones IP |
cox | 7,095,691 Dominios con PHP |
cox | PHP instalado en el 19.46% de los dominios |
cox | |
cox | http://www.securityspace.com/s_survey/data/index.html |
cox | Extensiones de Apache mas comunes: |
cox | 2,693,434 Apache Servers evaluados |
cox | |
cox | 1,238,547 (45.98%) PHP |
cox | 611,733 (22.71%) mod_ssl |
cox | 521,126 (19.35%) OpenSSL |
cox | 493,282 (18.31%) Frontpage |
cox | 355,101 (13.18%) mod_perl |
cox | 109,175 (4.05%) ApacheJServ |
cox | Sistemas Operativos: |
cox | -------------------- |
cox | UNIX (all variants) ,Win32 (NT/W95/W98/W2000) ,QNX ,MacOS (WebTen) |
cox | OSX ,OS/2 ,BeOS |
cox | y experimentalmente en: |
cox | OS/390 y AS/400 |
cox | |
cox | Servidores web (UNIX,Win32): |
cox | ---------------------------- |
cox | |
cox | CGI/FastCGI ,thttpd ,fhttpd ,phttpd ,ISAPI (IIS, Zeus) ,NSAPI (Netscape iPlanet) |
cox | Java servlet ,AOLServer ,Roxen/Caudium module |
cox | experimentalmente: |
cox | Apache 2.0 module ,Tux ,pi3web |
cox | Bases de datos: |
cox | --------------- |
cox | |
cox | Adabas D, Empress, IBM DB2 ,Informix ,Ingres ,Interbase ,Frontbase ,mSQL |
cox | Direct MS-SQL ,MySQL ,ODBC ,Ovrimos ,Oracle (OCI7,OCI8) ,PostgreSQL |
cox | Raima Velocis ,Solid ,Sybase ,DB++ ,dBase ,filePro (read-only) |
cox | dbm (ndbm, gdbm, Berkeley db) |
cox | |
cox | y como curiosidad: |
cox | Generación/Tratamiento de Graficos (Extensiones soportadas): |
cox | ------------------------------------------------------------ |
cox | |
cox | PDf, GD, Imlib2, ImageMagik, Flash, AT&T's GraphViz, SVG |
cox | |
cox | todo esto le da a uno la flexibilidad suficiente como para disponer |
cox | practicamente de todo lo que uno pueda necesitar |
cox | |
cox | y ahora pasemos a lo divertido :) |
cox | |
cox | Seguridad de una aplicación web |
cox | |
cox | La programación web no es tan sencilla como a primera vista puede parecer. |
cox | Primero |
cox | porque todo lo que pones en una página web puede ser fácilmente |
cox | falseados (ahora me explico mejor) |
cox | y segundo porque el acceso a una aplicacion web suele estar abierto a todo el mundo |
cox | (esto suele ser un requisito) |
cox | Algunos puntos criticos: |
cox | - El usuario siempre miente: |
cox | Si uno en un simple formulario web pone el típico campo |
cox | desplegable (<select>) con una serie de opciones no modificables |
cox | , espera |
cox | recibir alguna de las opciones ahi especificadas |
cox | En la programación |
cox | web, es el navegador el que se encarga de mandar los datos que el usuario ha |
cox | rellenado. |
cox | Este navegador lo que hace realmente es transformar los datos |
cox | que el usuario introduce en sencillas peticiones HTTP |
cox | Estas peticiones |
cox | las puede crear uno mismo, poner cualquier dato y enviarlas a la página. |
cox | Puediendo llevar al traste con la integridad de nuestra base de datos |
cox | (aunque generalmente resuelto creando adecuadamente las tablas, KEYs, NOT NULLs, REFERENCEs, CHECKs, etc) |
cox | |
cox | - No realizar escape de caracteres adecuados al realizar consultas a la base |
cox | de datos. |
cox | Por ejemplo, en el típico caso de la página para que el el usuario |
cox | se puede actualizar su password encontraríamos una sentencia como: |
cox | |
cox | $sql = "update users set pass='$pass' where id=100"; |
cox | |
cox | Imaginad que yo introduzco como password en el formulario la cadena: |
cox | |
cox | "hacker' where name='admin'; /*" |
cox | |
cox | Esto resultaria en que el query que se acaba ejecutando contiene: |
cox | |
cox | |
cox | $sql = "update users set pass='hacker' where name='admin'; /*' where id=100"; |
cox | Ouch, acabo de actualizar el password del administrador :) |
cox | Bugs de este tipo han sido explotados a |
cox | cientos en aplicaciones web como el famoso bug del extendido gestor |
cox | de foros web phpBB. |
cox | (tengo un amigo que un dia se levanto y se encontro con que su credibilidad |
cox | habia caido por los suelos al ser suplantado como admin |
cox | en el foro que el llevaba) |
cox | _Siempre_ se debe escapar los caracteres de las variables provenientes del |
cox | usuario de la forma adecuada a cada motor de bases de datos que usemos. |
!bio.hgy.es! Remote CONNECT ub.es.uninet.edu 4400 from HoraPe |
cox | |
cox | - Apertura de archivos del sistema de ficheros. |
cox | En la medida de lo posible |
cox | no hacerlo y |
cox | si hay absoluta necesidad idealmente que la selección del archivo |
cox | se haga desde una lista predeternimada (por ejemplo de un array) |
cox | Por poner un ejemplo ilustrativo, en una página que muestre cabeceras |
cox | diferentes según el skin que haya seleccionado el usuario: |
cox | |
cox | $skin suponemos que deberia ser cosas como "red" |
cox | include($skin . ".php"); |
cox | |
cox | ## un respiro a los traductores ## |
cox | No tendríamos más que pasar un valor de $skin como: "http://hack.org/hackit", |
cox | para que se acabe incluyendo el fichero: |
cox | "http://hack.org/hackit.php" |
cox | y el |
cox | atacante consiga ejecutar su propio código PHP con los permisos del usuario |
cox | del servidor web. |
cox | El famoso primer "virus" hecho en PHP iba precisamente de esto. |
cox | ## he recibido algunas quejas por usar "hack" en vez de "crack", |
cox | esto debe ser tomado como lectura de "hackear" nuestro sistema |
cox | y no para "crackear" otros, ok? ;) ## |
cox | Otra cosa típica es no escapar adecuadamente los nombres de ficheros, como |
cox | por ejemplo cuando te meten algo parecido a: "../../../../etc/passwd" o |
cox | no escapar adecuadamente los comandos del sistema que vayamos a ejecutar. |
cox | |
cox | - Poner las librerías fuera del document root. Una típica estructura de ficheros: |
cox | Listado de ficheros del document root del site: http://sillysite.com/ |
cox | index.php |
cox | include/default.inc |
cox | images/nogifs.png |
cox | |
cox | Es muy común usar extensiones ".inc" para diferenciar los ficheros que son |
cox | librerías y los que no. |
cox | Pero claro es muy común tambíen que los ".inc" |
cox | no sean parte de las extensiones que deben ser manajadas por el intérprete |
cox | de PHP. |
cox | ## despues de la conf habra session de preguntas por si alguien quiere ## |
cox | Lo cual resulta es que si yo llamo a la url: |
cox | http://sillysite.com/include/default.inc |
cox | todo el código php me será devuelto como texto, poniendo al descubierto muchos |
cox | datos sensibles como nombres de usuarios y password de acceso a bases de datos, etc |
cox | |
cox | - Los uploads, tu fuente de perdición: |
cox | Muy típico y en la mayor parte de los casos, |
cox | es el tener el directorio donde se realizan los uploads dentro del document root. |
cox | Esto es algo peligroso y explotable de muchas formas. Mencionemos algunas: |
cox | a) Siempre chekear las extensiones de los ficheros que se suben. |
cox | ## digo peligroso no que no sea necesario la mayoria de las veces ## |
cox | Ejemplo de |
cox | por qué: subo el fichero hackit.php y llamo a la dirección: |
cox | http://sillysite.com/uploads/hackit.php |
cox | El simple servicio de uploads resulta que se convierte de la noche en |
cox | un cómodo servicio de actualización remota de exploits :) |
cox | Y sino que se lo digan a los |
cox | de Apache que les hackearon la web así. |
cox | b) No escapar los nombres de los ficheros. Yo podría subir un fichero con nombre |
cox | "../index.php" falseando un POST y si en el código tengo algo así como: |
cox | |
cox | rename($userfile, "uploads/" . $userfile_name); |
cox | |
cox | Podría sobreescribir el fichero index.php con mi propio código. |
cox | |
cox | - Y bueno otro sin fin de cosas como |
cox | tener activado el "register_globals" y no inicializar apropiadamente las variables |
cox | (varios de estos fallos abrieron vulnerabilidades importantes en PHPNuke) |
cox | o |
cox | intentar "asegurar" el acceso a aplicaciones web confiando en |
cox | el contenido del $REFERER |
cox | (que recordemos es algo que manda el navegador y |
cox | por lo tanto falsificable). |
cox | |
cox | Como andiamo de tiempo? |
cox | contró |
cox | hablare del PEAR mas brevemente para mi desgracia |
cox | |
cox | PEAR - PHP Extension & Application Repository |
cox | |
cox | El PEAR es un proyecto Open Source creado por el PHP Group con el objectivo de crear |
cox | una gran biblioteca de clases de calidad escritas en PHP. |
cox | Todas ellas accesibles desde un repositorio web comun |
cox | y facilmente instalablas por medio de un sistema de gestion de paquetes |
cox | (tipo RPM para que os hagais una idea) |
cox | El proyecto lo fundo Stig S. Bakken, miembro del PHP Group |
cox | Stig entre otros ha sido el creador de la extension Oracle de PHP, la XML o toda la arquitectura de compilacion |
cox | del lenguaje sobre plataformas Unix |
cox | Lo que mas me choco es que empezo el proyecto dos horas despues de nacer su primera hija Malin, |
cox | a la cual debemos todo esto. |
cox | Eso es ser un hacker, lo demas son tonterias ;) |
cox | En el PEAR podeis |
cox | encontrar actualmente software de gran calidad que abarca gran cantidad |
cox | de funcionalidades. |
cox | El PEAR recibe actualmente contribuciones de los mayores hackers |
cox | gente como Rasmus, Andrei, Bergman, Huges, etc |
cox | a esta charla han venido algunos como Richard Hayes (creador de la tan usada clase de envio de correo via SMTP) |
cox | o Morgan (que fue desarrollador de Phorum 4 y que actualmente se ha contruido PEAR_Forum) |
cox | La aplicacion estrella hoy en dia del PEAR es la clase de abstraccion de base de datos PEAR DB |
cox | aunque ultimamente hemos tenido bastante movimiento en este punto |
cox | al ser propuesta la idea de la unificacion de todas las clases |
cox | de abstraccion de bases de datos en una sola. |
cox | Alli podreis ver las encarnizadas guerras con Manuel Lemos (de Metabase, MetaL y phpclasses.uperdesign.com) |
cox | y John Limn (ADODB y phplens.com) |
cox | Bueno no me quiero enrrollar mas, solo daros algunos datos mas |
cox | por si a alguien le interesa introducirse en el apasionante mundo |
cox | del PEAR: |
cox | http://pear.php.net (actualmente la estamos haciendo todavia, no hay demasiada informacion) |
cox | pear-dev@lists.php.net (tambien accesible por el server de news en news.php.net |
cox | y para mirar que cosas podeis encontrar alli recomiendo: |
cox | http://cvs.php.net |
cox | en: |
cox | /pear |
cox | y |
cox | /php4/pear |
cox | Actualmente creo haber contado mas de 80 clases que abarcan casi todo, Fechas, XML, Ficheros, Redes, ... |
cox | ah si.. mirad en http://pear.php.net en la parte de "support" y "faq" |
cox | |
cox | ok.. eso es todo :) |
MJesus | clap clap clap clap clap clap clap clap clap clap |
MJesus | clap clap clap clap clap clap clap clap clap clap |
MJesus | clap clap clap clap clap clap clap clap clap clap |
MJesus | clap clap clap clap clap clap clap clap clap clap |
MJesus | clap clap clap clap clap clap clap clap clap clap |
MJesus | clap clap clap clap clap clap clap clap clap clap |
MJesus | clap clap clap clap clap clap clap clap clap clap |
Chess | torero torero torero torero torero torero torero |
Chess | torero torero torero torero torero torero torero |
Oroz | :) |
MJesus | clap clap clap clap clap clap clap clap clap clap |
MJesus | clap clap clap clap clap clap clap clap clap clap |
MJesus | clap clap clap clap clap clap clap clap clap clap |
E0x | pla plax X100 |
Ston | plas plas plas plas plas plas plas plas plas plas |
ismak | bravo ;-) |
Ston | plas plas plas plas plas plas plas plas plas plas |
Ston | plas plas plas plas plas plas plas plas plas plas |
MJesus | bravoooooooooooooooooooooooooooo |
Chess | ole ole ole ole ole ole ole ole ole |
MJesus | bravoooooooooooooooooooooooooooo |
MJesus | bravoooooooooooooooooooooooooooo |
E0x | pla plax X100 |
Chess | campeon!!!! |
peter11 | plas plas plas plas pla s plas plas plas plas plas plas |
peter11 | plas plas plas plas pla s plas plas plas plas plas plas |
peter11 | plas plas plas plas pla s plas plas plas plas plas plas |
viZard | MJesus: hay tiempo para las pregutas? |
cox | espero que os haya gustado |
vespa_spc | bravoo!!! |
vespa_spc | bravoo!!! |
vespa_spc | aplause! |
vespa_spc | aplause! |
vespa_spc | aplause! |
peter11 | gracias gracias |
Maite | gracias |
Chess | otra! otra! otra! |
peter11 | ay que va... |
Flood | plas plas |
Flood | plas plas |
Flood | plas plas |
Flood | plas plas |
Flood | plas plas |
peter11 | otra! otra! otra! |
peter11 | vamos...!!! |
Ston | uh |
cox | lol |
Chess | while (true) echo "plas"; |
mhornae | esa estuvo buen lo de la linea de programación |
Ston | X) |
cox | Gracias gente |
MJesus | clap clap clap clap clap clap clap clap clap clap |
MJesus | clap clap clap clap clap clap clap clap clap clap |
MJesus | clap clap clap clap clap clap clap clap clap clap |