Recientemente vi a un bandido quejándose de B104 :
La vinculación a todas las interfaces de red puede potencialmente abrir un servicio al tráfico en interfaces no deseadas, que pueden no estar debidamente documentadas o protegidas. Esta prueba de complemento busca un patrón de cadena "0.0.0.0" que puede indicar un enlace codificado a todas las interfaces de red.
>> Issue: Possible binding to all interfaces. Severity: Medium Confidence: Medium Location: ./examples/binding.py:4 3 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 4 s.bind(('0.0.0.0', 31137)) 5 s.bind(('192.168.0.1', 8080))¿Qué significa "abrir un servicio al tráfico en interfaces no deseadas"?
He visto esto para una aplicación Flask con app.run(host="0.0.0.0") . ¿Qué debería uno escribir en su lugar?
(Como nota al margen: esto no se usa en producción. Esto es principalmente para probar simplemente durante el desarrollo. Pero no estoy seguro de si gunicorn podría tener el mismo problema con una configuración similar)
Al vincular a '0.0.0.0', acepta conexiones entrantes desde cualquier lugar. Esto es algo que haría en producción cuando se prueba su código y su proyecto está "asegurado" (por ejemplo, contra inyecciones de SQL u otros ataques desagradables).
Siempre que no esté listo para la producción o cuando no esté aceptando intencionalmente conexiones entrantes desde cualquier lugar, debe haber un valor predeterminado seguro . Por lo general, esto es '127.0.0.1' o 'localhost', por lo que solo acepta conexiones entrantes desde su máquina local. Esto no protege su código de las inyecciones de SQL, pero evita que otros apunten a su código y ejecuten inyecciones de SQL en su proyecto.
Tenga en cuenta que la prueba no se queja de la vinculación a 0.0.0.0 en general, sino que se queja de la vinculación involuntaria a 0.0.0.0 (y, por lo tanto, probablemente al mundo entero). Por lo tanto, se debe evitar cualquier referencia codificada de 0.0.0.0 (para crear los valores predeterminados seguros mencionados anteriormente).
En cuanto a las alternativas, puede usar 127.0.0.1 o localhost mientras desarrolla o puede usar interfaces de red local para habilitar el acceso desde otras máquinas en su red local. El uso de su interfaz de red le permitiría crear y alojar una aplicación web en su computadora y probar los resultados en su teléfono si están conectados al mismo WiFi.