Si invoca un shell, puede ser posible que un usuario malintencionado aproveche ese shell (consulte: inyección de shell) para hacer el mal. Le aconsejo que evite esto si es posible, simplemente porque es más fácil configurar shell = False en lugar de desinfectar sus entradas para cada truco concebible. Si usa shell = True, es posible que luego se vea obligado a cambiarlo en una auditoría de seguridad (es decir, si estuviera auditando su código y encontrara shell = True, probablemente haría que lo arreglara o fallara la auditoría).
Considerar:
De: documentación de Python 2.7.10rc1
- Si los sistemas operativos tipo UNIX hubieran prevalecido en lugar de Windows, ¿serían los sistemas informáticos menos vulnerables a las amenazas modernas de malware?
- ¿Qué es el malware Snarer.dll? ¿Cuál es la mejor forma de eliminarlo?
- ¿Qué es la autenticación de dos factores?
- ¿Qué tan bueno es Windows Defender contra virus y ataques? ¿Por qué?
- ¿Por qué es Linux el sistema operativo más seguro?
Advertencia
La ejecución de comandos de shell que incorporan entradas no desinfectadas de una fuente no confiable hace que un programa sea vulnerable a la inyección de shell, una falla grave de seguridad que puede resultar en la ejecución arbitraria de comandos. Por esta razón, se desaconseja el uso de shell = True en los casos en que la cadena de comandos se construye a partir de una entrada externa:
>>> de llamada de importación de subproceso
>>> filename = input (“¿Qué archivo le gustaría mostrar? \ n”) ¿Qué archivo le gustaría mostrar? non_existent; rm -rf / #
>>> llamada (“cat” + nombre de archivo, shell = True) # Uh-oh. Esto terminará mal …
.