Technical stuff

Technology, computers, and the likes.

Type inference in C++

Last week I was on vacation, and I took the time to relearn C++, as it had been very long since I had last worked seriously with it.

In the process I thought that C++'s template system can also serve as a type inference mechanism.

Because what's the difference between having OCaml guess the types as in this snippet...

# let cat a b = a @ b;;
val cat : 'a list -> 'a list -> 'a list = <fun>

... and having C++ instantiate the template for the appropriate types in this other snippet?

template <typename List>
List cat(const List & a, const List & b) {
  List c = a;
  c.insert(c.end(), b.begin(), b.end());
  return c;
}

(Modulo syntax errors, of course.)

De vulnerabilidades web

Muchas aplicaciones web están mal hechas. Cualquier página web maliciosa podría realizar acciones en esas aplicaciones web empleando las credenciales de los usuarios que accedan a la susodicha web maliciosa.

Lo comento aquí porque me he dado cuenta de que la protección que Drupal incluye contra esa vulnerabilidad impidió que haya tenido todavía más spam, aunque esa no fuera su finalidad primaria.

Esa vulnerabilidad se llama CSRF (aunque le han dado muchos más nombres), que son las siglas de “Cross-Site Request Forgery”, o, en castellano, “falsificación de consultas entre sitios”. Básicamente consiste en incluir código HTML y/o Javascript en una página web para realizar una consulta HTTP a una URL de otro sitio, y que esa consulta HTTP conlleve una acción (publicar un comentario, votar una historia en Menéame, etc.). Esto puede ser tan simple como incluir una etiqueta “IMG” que apunta a un URL, o tan complicado como crear un formulario, rellenarlo y enviarlo mediante Javascript.

Hay varias maneras de solucionarlo, pero las más efectivas parecen consistir en crear un “token” (un código de un solo uso) y añadirlo al formulario cuando el usuario accede a la página que lo muestra; cuando el usuario envíe el formulario el “token” irá incluido, y sólo se realiza la acción si el “token” correcto está en el formulario.

Como el atacante no tiene acceso al formulario (sólo puede enviar consultas, pero no ver el resultado), tampoco puede obtener un “token” válido, así que la consulta que envíe tampoco será válida, y la acción no se realizará.

Pues bien, revisando mis “logs” he visto muchos intentos de enviar spam desde hace mucho tiempo; sin embargo, éstos no tuvieron éxito hasta hace poco. ¿Por qué? Simple: antes, los spammers sabían qué campos había en el formulario, así que intentaban enviarlo directamente. Sin embargo, no tenían un “token” válido, y esos intentos fracasaban.

Ahora han cambiado el “modus operandi”: ahora descargan el formulario antes de enviarlo, con lo que consiguen el “token” y los comentarios se publican. O, más bien, se publicaban hasta que añadí Hashcash. Como el software de los spammers no soporta hashcash, esos comentarios vuelven a no ser publicados.

Por lo tanto, estaremos libres de spam, básicamente, hasta que los spammers implementen hashcash en su software. Pero bueno, ya cruzaremos ese río cuando lleguemos a él...

Subhastas con truco

Estáse a falar na blogobóla estes días dunha empresa de subhastas en web que traballa dunha maneira un pouco estraña. Basicamente, atoparon a maneira de conseguir levar uns beneficios impresionantes a conta de que moita xente perda cartos, e que ao mesmo tempo pareza que o gañador da subhasta levou un choio impresionante. Nesta historia explico como funciona a cousa, e por que non che convén participar nesas subhastas (e se o fas, como minimizar o teu custo).

Cómo escribir código PHP claro y fácil de mantener

Hace unos cuantos años estaba frustrado porque cada script en PHP que veía era peor que el anterior: todo el código apelotonado, con la parte que visualiza cosas mezclada con la parte que accede a la base de datos, e imposible de modificar o añadir nada. Así que hice lo que cualquiera en mi situación podría haber hecho: escribí un texto sobre cómo hacerlo mejor (titulado “MVC en tres pasos, en PHP y sin objetos (y nada más)” y lo colgué en Internet.

Acabo de ver que ese documento se había hecho relativamente popular, a pesar de las incorrecciones que contenía, y que aún hoy varias personas cada día intentan acceder a ese texto. Como ahora que lo veo no me gusta, no lo voy a volver a publicar: en su lugar voy a escribir uno nuevo, que casualmente podréis ver si pulsais en el enlace de “leer más”.

Samsung SCX-4200 Linux driver hack

Samsung fixed this problem with versions 3.xx of the drivers, so it is strongly recommended that you install one of those versions instead of versions 2.xx. If you do so, you won't need the files in this page, as it will work correctly right away.

The Samsung SCX-4200 is a multifunction device. Versions 2.xx of its Linux drivers have a defect: the user has to run with root permissions to be able to scan. That is very dangerous, so I modified the (binary only) Linux driver to avoid that.

However, if for some reason you need to use versions 2.xx, I have made available the fix for version 2.00.95. I don't use the device anymore, so I cannot prepare fixes for newer versions. Please don't ask me for them.