A segurança da informação em falta no desenvolvimento de software oferece preocupações críticas, o código pode conter vulnerabilidades que passam despercebidas, colocando em risco a integridade e a privacidade dos dados. Hoje, vamos explorar três incidentes de segurança identificados pelo Bandit, uma poderosa ferramenta de análise de segurança para código Python, e aprender como corrigi-los.
O Bandit é uma ferramenta de análise de segurança de código-fonte Python que verifica seu código em busca de vulnerabilidades conhecidas e potenciais ameaças de segurança.
Código Python
import requests
from flask import Flask, Response
app = Flask(__name__)
@app.route('/')
def home():
json_url = 'http://127.0.0.1:3000'
response = requests.get(json_url)
json_data = response.json()
page = []
for data in json_data:
dia_jogo = f"<h2>{data.get('diaJogo', '')}</h2>"
tabela_html = data.get('content', '')
page.append(dia_jogo)
page.append(tabela_html)
return Response(page)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
Este exemplo define uma aplicação web usando o framework Flask. Quando alguém acessa a raiz ("/") da aplicação, ele envia uma solicitação HTTP para um servidor local (http://127.0.0.1:3000) usando a biblioteca "requests" e obtém dados JSON como resposta. Em seguida, ele formata esses dados em HTML e os exibe como uma página da web no navegador do usuário, incluindo títulos (<h2>)
e tabelas. A aplicação é executada em "0.0.0.0" na porta 5000 em modo de depuração quando o script é executado diretamente.
Imagine a situação na qual este código foi desenvolvido localmente e, após funcionar de maneira esperada, está em execução em algum servidor. Vamos executar o Bandit para ver se encontraremos algo de errado.
Bandit
Instalando o Bandit: pip install bandit
fut.py
, nome do arquivo onde está localizado o código de exemplo acima.
Execução: bandit fut.py
Temos a saída do comando com estes três incidentes encontrados:
Incidente 1: Solicitação sem Limite de Tempo
A primeira vulnerabilidade identificada pelo Bandit é a falta de um limite de tempo (timeout) em uma solicitação HTTP. Em nosso código, a chamada requests.get(json_url) não possui um timeout especificado, o que pode levar a problemas de desempenho ou bloqueio se o servidor não responder. Para evitar isso, você deve definir um limite de tempo para sua solicitação, conforme explicado aqui.
Incidente 2: Exposição do Modo de Depuração do Flask
Um dos problemas mais graves identificados pelo Bandit é a exposição do modo de depuração do Flask. Em nosso exemplo, a configuração debug=True permite que o depurador Werkzeug seja acessado externamente, o que poderia permitir a execução de código arbitrário por meio de solicitações HTTP. Para corrigir isso, certifique-se de desativar o modo de depuração em ambientes de produção, como discutido aqui.
Incidente 3: Vinculação a Todas as Interfaces
O último incidente identificado é a possível vinculação a todas as interfaces de rede. Neste caso, o código vincula a aplicação a todas as interfaces usando host='0.0.0.0', o que pode ser arriscado em termos de segurança. Para corrigir isso, você deve especificar a interface à qual deseja vincular sua aplicação, além de que muito provavelmente para este caso será utilizado um servidor web reverso para encaminhar as solicitações para o aplicativo Flask executando em localhost (127.0.0.1) e na porta específica. Detalhes sobre este incidente é discutido aqui.
import requests
from flask import Flask, Response
app = Flask(__name__)
@app.route('/')
def home():
json_url = 'http://127.0.0.1:3000'
response = requests.get(json_url, timeout=10)
json_data = response.json()
page = []
for data in json_data:
dia_jogo = f"<h2>{data.get('diaJogo', '')}</h2>"
tabela_html = data.get('content', '')
page.append(dia_jogo)
page.append(tabela_html)
return Response(page)
if __name__ == '__main__':
app.run()
Conclusão
O Bandit fornecerá relatórios detalhados sobre quaisquer problemas de segurança que encontrar no seu código. Você deve revisar esses relatórios e tomar as medidas apropriadas para corrigir as vulnerabilidades identificadas.
Lembre-se de que o Bandit se concentra em verificar problemas específicos de segurança em Python, como vulnerabilidades de execução de código arbitrário (por exemplo, injeção de código), gerenciamento inadequado de segredos e outros riscos conhecidos.
Ao abordar esses três incidentes identificados pelo Bandit, você aprendeu que é importante sempre manter seu código seguro e atualizado, seguindo as melhores práticas de segurança.
Top comments (0)