viernes, 31 de octubre de 2014

365 días

Hoy hace exactamente un año desde la última entrada en este blog.

El principal motivo de mi ausencia ha sido el trabajo, así que intentaré retomar el blog escribiendo más a menudo e introduciendo otros nuevos lenguajes de programación.

jueves, 31 de octubre de 2013

PHP strtotime: el mes de la marmota

Nos encontramos a vísperas de Halloween, aún es octubre, hace un mes también era octubre y no le he cogido prestado el coche a Marty McFly.

En resumidas cuentas, la función strtotime de PHP al realizar una operación de suma/resta de meses, donde el mes fijado como actual tiene más días que el mes resultante, el resultado final no será el esperado.

Por ejemplo, nos encontramos a 31 de octubre y hace un mes era septiembre, pero septiembre solo tiene 30 días. Si retrocedemos un mes utilizando la función strtotime, seguirá siendo octubre, concretamente 1 de octubre.

date('d-m-y', strtotime('-1 month')); // 01-10-13
Así que si estáis realizando operaciones de fechas, especialmente con meses, y no queréis más sorpresas a final de mes (días 29, 30, 31), os sugiero que tengáis en cuenta lo anterior.

Pero no todo iban a ser malas noticias, siempre hay algún que otro remedio con que el que podréis evadir el problema: strtotime_months.

sábado, 19 de octubre de 2013

PHP session_start: revelando información

Bien es conocida la función de inicio de sesión session_start de PHP, pero no tan conocida es una ligera peculiaridad capaz de revelarnos rutas sensibles al generar avisos por pantalla.

La idea es sencilla, cambiar el valor de la cookie que hace la función de identificador de sesión (por defecto PHPSESSID ) a uno no admitido por la función session_start, y si se dan las condiciones (error_reporting) el error resultante será parecido al siguiente:

Warning: session_start() [function.session-start]: The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /secret/path on line 0
 ¿Solución? No reportar los errores al usuario y/o silenciar la función anteponiendo una arroba:

@session_start();
A modo de anécdota, y apoyándome en el buscador Google, automaticé la idea anterior con un araña (no de las que pican, chiste malo xd) para localizar páginas propensas a ello y hubo algún que otro resultado:



domingo, 6 de octubre de 2013

MySQL: ROUND feature

Curiosa característica que me he encontrado en la función ROUND de MySQL.

Las entradas literales pares (incluido el cero) cuyo primer decimal sea 5, serán redondeadas a la baja y no al alza.

domingo, 4 de agosto de 2013

Adivina adivinanza: blind SQL Injection

La traducción literal de blind SQL injection viene a ser ataque de inyecciones SQL a ciegas, es decir, que debido a las condiciones expuestas no podremos imprimir en pantalla la información de las consultas que manipulemos, pero ello no implica que no podamos provocar condiciones controladas que puedan ser analizadas desde el cliente.

La base de este ataque se puede asemejar al conocido juego popular adivina adivinanza. Nosotros no podremos obtener la respuesta directamente, sino que tendremos que ir formulando una serie de preguntas que serán respondidas lógicamente (si/no) y con las que iremos cercando el trecho hasta dar con el resultado.

lunes, 6 de mayo de 2013

JavaScript/NodeJS Merge: combinando objetos

JavaScript/NodeJS Merge es una función para mezclar múltiples objetos en uno solo, con la posibilidad de crear un nuevo objeto clonado. Su funcionamiento es muy similar a la función jQuery.extend pero con una serie de ventajas:
  • Más flexible, pudiendo introducir argumentos que no sean objetos planos (son ignorados).
  • Compatible con NodeJS (npm install merge).
  • Compatible con JavaScript desde el navegador (http://files.yeikos.com/merge.js).
El repositorio del código se encuentra en: https://github.com/yeikos/js.merge, junto a una breve documentación con ejemplos y unas pruebas unitarias.