Entradas

Mostrando entradas de febrero, 2018

Legacy Trash (IV)

Hola! Después de ver comprobar que: Ninguna entrada del usuario está validada, el sitio entero es el paraíso del XSS. No hay un solo archivo HTML en la ruta de la aplicación, absolutamente todo el código HTML se genera desde PHP.  Uno comienza a pensar que a esas alturas ya descubrió todas las falencias de la aplicación. Sin embargo, me topé con una función llamada enTiempo($tiempo) , que recibe un timestamp y lo devuelve en tiempo (?) es decir año, mes, día, horas, minutos y segundos ¿Se entiende, no? No hace falta que tenga un nombre mejor </sarcasm>. El problema de esto es que no tiene en cuenta jamás las zonas horarias ni ningúna sutil comodidad de las que suelen incluir las librerías de manejo de fechas o, en el último de los casos, la API estándar de PHP . La función en sí es la sgte.: function enTiempo($tiempo) { $tiempo=(int)($tiempo); if ($tiempo<=0) { return "0 hs"; } else { if ($tiempo/(60*60*24*365)>1) { return ((int)($tiempo/(60

Legacy Trash (III) (Manejo de archivos subidos)

Buenas! Hoy seré breve. ¡Encontré otra función para quitar acentos! Llamada quitarAcentosb($str) . Supongo que la "b" final es de "Bien" ya que esta no hace manipulaciones extrañas a los strings. Sin embargo, no todo es diversión. La aplicación permite que un usuario suba imágenes. Si queremos ver el vaso medio lleno podemos decir que se verifica que el tipo de archivo sea una imagen. Y dejarlo ahí. Pero si nos ponemos más rigurosos, lo que en realidad se verifica, es que el tipo de archivo haya sido nombrado como imagen if (($ext[count($ext)-1]!=='jpg')&&($ext[count($ext)-1]!=='gif')&&($ext[count($ext)-1]!=='png')&&($ext[count($ext)-1]!=='jpeg')) Imagino que existen innumerables sitios que tengan esta misma lógica detrás y eso da un poco de miedo. Si por esas vueltas de la vida, el que escribió esta aplicación encuentra el blog estaría bueno que sepa que la extensión de un archivo NO indica el tipo de

Legacy Trash (II)

Segunda entrega de este paseo por una aplicación PHP sangrienta. Después de pasar los ojos sobre un montón de líneas de código cuya complejidad solo es justificable en caso de que el programador estuviera realmente preocupado por su estabilidad laboral y después de encontrar: -Una simpática variable llamada $cúmulo. -Un script cuyo título era el nombre y apellido del autor. -Un comentario /***SEGUIMOS***/ , que me tranquilizó porque pensé que ya no estábamos siguiendo... Encontré un par de cosas más interesantes. Dialecto simplificado function quitarAcentos($cad) { //40 lineas de código que no quiero discutir $arr['z']='s'; $arr['ce']='se'; $arr['ci']='si'; $arr['ge']='je'; $arr['gi']='ji'; $arr['v']='b'; $arr['ll']='y'; $arr[' h']=' '; $arr['x']=''; foreach ($arr as $i => $v) { $cad=str_replace($i,$v,$cad); } } ¿Vieron eso? a

Legacy Trash (I)

How'd y'all! Me cayó un proyecto legacy en PHP para que estime el tiempo que me llevaría agregar un par de funcionalidades nuevas a la codebase actualmente en producción. Tl;dr: demasiado tiempo. El código tiene tanta deuda técnica que adecentarlo no será negocio para nadie. Creo que lo único productivo que se puede hacer con el código es analizarlo para encontrar malas prácticas y pensar en porque uno debe evitarlas. Esta es la primera entrada de una serie de entradas que tiene ese fin: desenmascarar malas prácticas tratando de mantenernos lo más calmos posibles para ver que podemos aprender. Ojalá ese aprendizaje no solo sea respecto a lo que hace enojar a un dev que toma un proyecto legacy sino que nos haga reflexionar un poquito. Acción oculta if ($accion=='oculta') {    shell_exec("rm -r /var/www/html/A/B/");    mkdir("../B/"); } ¿Vieron eso? Un operador de comparación no-estricta (==) para comparar strings. Si $accion valiera 0 la co

Nuevas Matemáticas

Las nuevas matemáticas nacieron después del lanzamiento del Sputnik. Era una gran idea reformar la enseñanza de las matemáticas a los niños para que pudieran hacer mejores y más rápidos Sputniks. El tipo de aritmética terrenal que era útil en las antiguas clases debería ser reemplazada por una más profunda, acorde a la era espacial. Se dedicó una industria entera a imprimir libros de textos nuevos y caros. Los maestros debían abandonar los viejos métodos para enseñar los nuevos estándares. Los padres ya no podían entender la tarea de aritmética de sus hijos. Repentinamente, sumar números era menos importantes que subar que la Adición era Conmutativa; como resultado, los chicos parendieron sobre Conmutatividad pero ya no eran capaces de sumar números. La cantina de las escuelas era el único lugar donde uno podía aprender sobre fracciones, no precisamente que eran Números Racionales, pero si como medir cosas con ellos y porque. El conocimiento de las matemáticas se medía p