hasta donde yo sé una vez que una variable está contaminada, Perl no permitirá usarla en un sistema(), exec(), entubado abierto, eval(), comando de retroceso o cualquier función que afecte algo fuera del programa (tales como desvincular). Entonces, ¿cuál es el proceso para deshacerlo?¿Cómo "desatare" una variable?
Respuesta
utilizar una expresión regular en la variable contaminada para sacar los valores "seguros":
A veces hay sólo para aclarar taintedness de sus datos. Los valores pueden no estar contaminados al usarlos como claves en un hash; de lo contrario, la única forma de eludir el mecanismo de contaminación es haciendo referencia a los subpatrones de una coincidencia de expresión regular. Perl supone que si hace referencia a una subcadena usando $ 1, $ 2, etc., sabe lo que estaba haciendo cuando escribió el patrón.
No ignore esta advertencia:
Eso significa utilizar un poco de pensamiento - no nada a ciegas untaint, o que derrotar a todo el mecanismo. Es mejor verificar que la variable solo tenga caracteres buenos (para ciertos valores de "bueno") en lugar de verificar si tiene algún carácter incorrecto. Eso es porque es demasiado fácil perderse a los personajes malos que nunca pensaste.
+1 para la documentación estándar apropiada. Quiero agregar que el uso de '$ 1' y amigos no es obligatorio, una expresión de coincidencia con capturas devuelve una lista de escalares que no están contaminados, también. Ejemplo: 'perl -T -MDevel :: Peek -e'Dump [$ ARGV [0] = ~/(\ d +)/g] '' Fiorina" Fury "161 Unidad correccional de trabajo de clase C (reg. 12037154) en un punto mantuvo a miles de presos de máximo riesgo de cromosoma doble Y, pero en 2179 apoyaron a veintidós presos y tres custodios ". – daxim
DESCRIPCIÓN
Este módulo se utiliza para el blanqueo de datos que se ha contaminado utilizando el interruptor
-T
estar en modo de mancha. Esto se puede utilizar para los scripts CGI , así como los scripts de línea de comandos. El módulo anulará escalas, matrices y hash. Al lavar una matriz, solo se blanquearán los elementos de la matriz que estén contaminados.SINOPSIS
use Untaint; my $pattern = qr(^k\w+); my $foo = $ARGV[0]; # Untaint a scalar if (is_tainted($foo)) { print "\$foo is tainted. Attempting to launder\n"; $foo = untaint($pattern, $foo); }else{ print "\$foo is not tainted!!\n"; }
- 1. ¿Cómo concateno una cadena con una variable?
- 2. Variable en una función
- 3. Obtener una variable POST
- 4. Cuándo usar una variable variable en PHP?
- 5. Devolver una variable asignada
- 6. ¿Cómo pasar una variable a form_theme?
- 7. ¿Cómo poner una variable en Python docstring
- 8. ¿Cómo puedo volcar una variable en JSP?
- 9. cómo pasar una variable con redirect_to?
- 10. Bash ¿cómo capturar stderr a una variable?
- 11. ¿Cómo funciona una variable en C/C++?
- 12. cómo almacenar printf en una variable?
- 13. ¿Cómo compartir una variable entre dos clases?
- 14. Cómo actualizar una variable uniforme en GLSL
- 15. cómo incrementar una variable referenciada por 1
- 16. ¿Cómo pasar una variable Bash a Python?
- 17. Contar en Erlang (? ¿Cómo incrementar una variable)
- 18. Cómo actualizar una variable de sesión
- 19. ¿Cómo obtener anotaciones de una variable miembro?
- 20. ¿Cómo conectar una variable al widget Entrada?
- 21. ¿Cómo declarar una variable en MySQL?
- 22. ¿Cómo obtengo una variable en otra actividad?
- 23. ¿Cómo configuro una variable de compilación condicional?
- 24. Cómo declarar una variable estática en Javascript
- 25. ¿Cómo programar programáticamente una variable global (módulo)?
- 26. ¿Cómo undefine una variable en Scheme?
- 27. Cómo mostrar una variable php en html
- 28. ¿Cómo desactivo una variable en Vim?
- 29. ¿Cómo detectar si una variable ha cambiado?
- 30. ¿Cómo puedo incrementar una variable Smarty?
La mayor parte del capítulo Seguridad de Mastering Perl pasa por esto, y no es sólo lo que está en perlsec. :) –