En la página de Wikipedia sobre la
inyección SQL tienes ejemplos básicos de cómo evitarlo. En la parte de Perl se comentan dos métodos básicos: usar el método quote() de DBI o los
placeholder. De estos dos métodos, el más usado, y con diferencia (por ser muy cómodo) es el de los
placeholder:
Using perl Syntax Highlighting
$query = $sql->prepare("SELECT * FROM usuario WHERE nombre = ?");
$query->execute($nombre_usuario);Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
Ya ves: con solo usar el carácter '?' y luego, en el execute(), pasar los argumentos, DBI se encarga de pasar los argumentos completamente separados de la orden SQL.
Naturalmente, si se trata de no fiarse de los argumentos pasados por el usuario a nuestro programa, la
opción -T es de uso obligado.
Un sitio dedicado a este tema es el de
bobby-tables, con ejemplos para muchos lenguajes.