Por si alguna vez hay la necesidad de procesar documentos HTML, esta librería permite tratarlos con una sintaxis similar a jQuery.
Author: alex
No sé si todavía haya alguien que suela darle una mirada a los artículos de este blog, más aún si es alguien que conocía este sitio cuando solía escribir desvariar sobre temas relacionados a la seguridad hace unos años atrás. No sé si he escrito sobre este tema antes, pareciera ser que no tengo muy buena memoria.
Otra vez tomo como ejemplo WordPress*. Por malas decisiones que se hicieron desde el principio (por ejemplo imitar las "magic quotes"), hay muchas vulnerabilidades que hubieran podido evitarse. El problema es que muchas de las validaciones que se hacen sobre los datos enviados por el usuario, se hacen desgraciadamente casi al principio. En un mundo ideal, esto no debería causar ningún problema. Sin embargo, en la práctica hacer este tipo de cosas asegura que a medida que las aplicaciones van evolucionando, aparecerán los problemas. Muchas de estas restricciones pueden ser sobrepasadas utilizando escenarios no previstos. Luego de la publicación de la versión 3.2, que corregirá también problemas de seguridad relativamente graves, iré comentando más a detalle los problemas encontrados.
Aún cuando algunos desarroladores como Mark Jaquith recomiendan que se debe escapar lo más tarde posible (escape late), lamentablemente en este momento es algo difícil de hacer cuando la existen una gran cantidad de plugins y temas que utilizan estas "protecciones".
La lección a retener es que es mejor escapar o validar los datos justo antes de guardarlos o realizar ciertas acciones, y justo antes de enviar el contenido al navegador.
*: Como había mencionado antes, decidí colaborar en la medida de lo posible a WordPress. Actualmente estoy algo alejado de la programación, entonces seguramente habrán más posts usando WordPress como ejemplo.
Durante los meses de marzo, abril y mayo de este año, se han realizado un conjunto de presentaciones sobre seguridad (inglés, francés) en el Collège de France, en París. Pueden descargar las transparencias y ver los videos de las presentaciones.
- Leslie Lamport, por ejemplo habla de los fallos bizantinos y algunos algoritmos de consenso y elección de líder. En una de sus transparencias aparece la siguiente frase 🙂
Engineers often think they can solve an unsolvable problem by reducing it to another unsolvable problem.
Protocols- Sur Internet, personne ne sait que vous êtes un chien, vingt ans après "En internet, nadie sabe que eres un perro, 20 años después". Título basado en el cómic On the Internet, Nobody Knows You're a Dog.
- David Pointcheval.
"Quelles garanties nous apporte la cryptographie ?" (¿Qué garantías nos aporta la criptografía?)
"Cryptographie"'- Butler Lampson.
Usable Security Through Isolation
''Fiabilité du logiciel ''- Andrew Myers.
Constructive security using information flow control
- "Vers le contrôle des flots d’information" (Hacia el control del flujo/transmisión de información)
- Ron Rivest. Security of Voting Systems
- ''Politiques de sécurité et contrôle d'accès (2e partie)''. (Políticas de seguridad y control de acceso, segunda parte.)
-
John Mitchel. Web Security and Untrusted JavaScript
- ''Politiques de sécurité et contrôle d’accès (1ère partie)''. Políticas de seguridad y control de acceso, primera parte.
- "La sécurité informatique"
. La seguridad informática.
Algunas de las presentaciones se hicieron en francés, pero felizmente casi la mayoría de las presentaciones tienen traducción en inglés (todas las que aparecen en esta entrada).
Para la gente que está casada o en planes de hacerlo:
Fuente: Geek & Poke
Hay incluso un libro que publicó el autor de esa tira.
.
¿Threads en PHP?
Nunca me ha gustado PHP como lenguaje, sin embargo en los últimos 4 o 5 años, he leído y escrito varios miles de lineas de código. Una contradicción dirían algunos.
Dicho esto, ahora último estuve jugando un poco con el código del plugin para importar contenido en WordPress. Actualmente, lo que hace es cargar todo el archivo XML en memoria, hace el parsing y finalmente comienza a importar el contenido. Todo esto, siempre y cuando se haya logrado subir con éxito el archivo.
La idea era modificarlo para que pueda procesar archivos de gran talla sin necesidad de cambiar mucho la configuración del servidor. El primer punto era poder subir los archivos sin problemas, así que el primer paso era subirlo en pedazos y juntarlo todo en el servidor. Dado que esto no se puede hacer sólo con javascript, pensé en utilizar flash, pero como no conozco ActionScript dejé de lado esa opción. Había hecho pequeñas cosas en Silverlight, así sería más sencillo. Sin embargo, como seguramente alguien había tenido el mismo problema, decidí buscar soluciones ya existentes. Encontré el excelente proyecto plupload.
El siguiente punto era procesar el archivo XML por partes, leyendo en bloques. Lo que normalmente hubiera hecho en otro lenguaje sería tener un pool de X threads, que procesarían las piezas que se vayan leyendo del documento (cada pieza por ejemplo conteniendo Y entradas). Sin embargo, esto parece no ser posible todavía y no sé si sea posible del todo. Por el momento, probablemente tenga que utilizar, lo que considero son hacks, el clásico cron o su variante de WordPress, wp-cron.
Si hay algún experto PHP en la audiencia y que tenga algo de tiempo para hacer una recomendación, ¿hay alguna manera más elegante de hacer ese tipo de cosas?
* Para los interesados en el código que modifiqué, pueden descargarlo de http://www.buayacorp.com/files/wordpress/wp-large-upload.zip
** Sé que me dirán algunos que es mejor hacerlo usando mysqldump o phpmyadmin, pero en ciertos casos no se tiene acceso a ese tipo de utilidades.