perl taint

¿Es útil el modo de contaminación de Perl?



taint (5)

¡Definitivamente!

$ echo ''`rm -rf /`'' | perl -Te ''eval while <>'' Insecure dependency in eval while running with -T switch at -e line 1, <> line 1.

perl -T

¿Lo usas? ¿Te ayuda a encontrar agujeros de seguridad en tus scripts de Perl?


Creo que el modo de corrupción funcionaría mejor cuando se desarrolla un nuevo código con el que todos están familiarizados.

Si tiene el código de otra persona que está mal escrito, y lo ejecuta en modo Taint - perl morirá en lugar de realizar lo que según las reglas de tainting son operaciones "inseguras".

En el modo Taint Perl, algunos agujeros están parchados, pero no todos. el sistema ("$ unffiltered_user_input") morirá pero Perl aún podría escribir $ unffiltered_user_input data en un archivo con un nombre fijo (porque la impresión de datos contaminados se considera "segura") y luego ejecutar ese archivo con system (). Pero nada puede comprobarlo todo.

Hay una compensación por usarlo en aplicaciones heredadas. Cuando Perl encuentra una operación insegura en datos contaminados, morirá, lo que significa que alguien debe ingresar y decidir qué significa no contener los datos, qué regexp se necesita, antes de que la aplicación vuelva a ser confiable.

Algunas personas preferirían inseguras, confiables, de bajo costo (por ahora) a: seguras, rotas, la necesidad de encontrar a los desarrolladores. No es que eso sea bueno a largo plazo ... pero no es inusual.


El capítulo "Técnicas de programación seguras" de Mastering Perl se dedica casi por completo a la comprobación de la corrupción y cómo debe usarlo.

Mucha gente te dirá que te protege, pero mienten sutilmente sobre eso. Es una herramienta de desarrollo que le ayuda a encontrar algunos (solo algunos) puntos en su código donde debe tener cuidado. No va a resolver todos sus problemas de seguridad.


Más que eso :) detiene sus problemas de seguridad antes de que se conviertan en uno. Por supuesto, no es una bala de plata de seguridad ... solíamos usarla (hace unos años cuando participé en proyectos de Perl) en cualquier script que se expuso externamente (es decir, en cualquier aplicación mod_perl) y lo encontramos muy útil y Lo hizo nuestra política. Hace algunas verificaciones y es útil ... (cualquier cosa hace que las cosas sean automatizadas)

Perl Security - perlsec lo recomienda fuertemente también:

Este indicador [modo Taint] es muy recomendable para los programas del servidor y cualquier programa ejecutado en nombre de otra persona, como un script CGI. Una vez que se activa el modo de corrupción, se activa durante el resto de su script.


Sí, el modo de corrupción es útil por todas las razones mencionadas anteriormente.

Un lugar en el que no puede considerar datos contaminados es cuando interactúa con una base de datos. Afortunadamente, DBI tiene soporte para evitar que los datos contaminados ingresen a su base de datos, y trata los datos provenientes de su base de datos como contaminados para que no pueda hacer nada inseguro. Tienes que activar específicamente las opciones para esto; Están desactivados por defecto. Ver los documentos DBI para más.