requirements.txt - instalação do pip requirements.txt - congelamento do pip requirements.txt

Perigos ocultos do Requirements.txt: como a fixação de dependências pode salvar você

requirements.txt: ferramenta principal ou ameaça oculta?

Todo projeto Python tem isso. Aquele de aparência inocente requirements.txt sentado na raiz do seu repositório, o arquivo pip install requirements.txt consumes, é uma lista de dependências, claro, mas se você não tomar cuidado, também pode ser uma porta aberta para compilações instáveis, pacotes vulneráveis ​​e sérios problemas de segurança.

Em sua essência, requisitos.txt controla quais pacotes de terceiros seu aplicativo extrai. Quando você executa instalação pip -r requirements.txtO gerenciador de pacotes do Python instala todas as dependências listadas. Mas aqui está o problema: se você não fixar as versões exatas, você está confiando no PyPI para sempre servir uma versão segura, compatível e sem modificações, todas as vezes. Não é assim que o AppSec moderno funciona.

Sem a fixação, as compilações podem falhar. Pior ainda, seu aplicativo pode ingerir pacotes maliciosos sem saber. Controle de versão aberto (Frasco >=1.0, por exemplo) ou restrições de versão flexível (django~=3.2) são terreno fértil para injetar código inseguro. É por isso que gerenciar adequadamente requisitos.txt é uma tarefa de segurança essencial.

Onde pip freeze e pip install requirements.txt detalham

pip congelar é conveniente, mas também perigoso quando usado sem entender o que captura. Os desenvolvedores frequentemente geram requisitos.txt utilizando requisitos de congelamento de pip.txt, esperando que isso bloqueie o ambiente. Mas o freeze não valida a segurança ou a origem das dependências; ele apenas descarta tudo o que está instalado, incluindo pacotes transitivos e potencialmente desatualizados.

Agora imagine um colega de equipe, ou seu CI, correndo às cegas instalação pip -r requirements.txt. Se esse arquivo incluir itens obsoletos, vulneráveis ​​ou mesmo pacotes com erros de digitação, você acabou de automatizar um incidente de segurança.

Exemplo rápido:

# Developer's freeze output pip freeze > requirements.txt boto3==1.24.20 requests==2.27.1 

⚠️ Exemplo inseguro, não usar em produção

Agora adicione isso ao seu CI pipeline:

- name: Install dependencies run: pip install -r requirements.txt

Você está confiando que o ambiente é reproduzível, que nada mudou no PyPI e que toda dependência ainda é seguro. Essa é uma suposição enorme quando se depende de requisitos de congelamento de pip.txt workflows.

Ameaças reais de AppSec: Typosquatting e confusão de dependências em requirements.txt

Os invasores adoram ecossistemas de código aberto. Por quê? Porque os desenvolvedores geralmente dependem de padrões e confiança implícita. Veja como eles atacam usando requisitos.txt:

  • Typosquatting: Carregando um pacote malicioso com um nome como solicitações em vez de pedidos. Um personagem a menos e sua construção estará pronta.

solicitações # ⚠️ Exemplo ilustrativo, não é um pacote real para instalar

  • Confusão de Dependência: Se o seu pacote interno não estiver fixado ou com escopo privado, invasores poderão publicar uma versão maliciosa no PyPI com o mesmo nome. Se o seu CI não validar as fontes, você instalará o pacote deles em vez do seu.

Ambos os ataques exploram a falta de fixação rigorosa e controle de origem em requisitos.txt. Se o seu apenas diz alguma-biblioteca-interna, e você corre pip install requirements.txt em CI, ele pode buscar o pacote errado no lugar errado.

Protegendo requirements.txt em CI/CD Pipelines com Hashes e Fixação

Veja como endurecer requisitos.txt contra ameaças do mundo real:

  • Fixar versões exatas: Sempre use == para cada pacote em seu requisitos.txt. Sem curingas, sem intervalos.
  • Uso –requer-hashes: Isto faz instalação pip -r requirements.txt verificar a integridade de cada pacote baixado.

Exemplo:

flask==2.2.5 \ --hash=sha256:<actual_hash_here> 

⚠️ Exemplo demonstrativo, substitua por hash real em projetos reais

  • Isole suas compilações: Sempre crie em contêineres limpos e minimalistas. Nunca confie cegamente na imagem base.
  • Use um índice PyPI privado: Hospede seu próprio proxy/cache e espelhe apenas pacotes confiáveis.

Executar varreduras de dependência: Integrar ferramentas como auditoria pip ou uso SBOM-análise baseada em seu pipelines.

Exemplo de snippet de ações do GitHub:

- name: Secure install   run: pip install --require-hashes -r requirements.txt

⚠️ Educacional pipeline exemplo, adapte-se ao seu ambiente

Manuseio rigoroso de instalação pip -r requirements.txt in CI/CD é uma das maneiras mais fáceis de reduzir o risco do código aberto.

Builds reproduzíveis: mantendo-os estáveis ​​em todos os ambientes

Se o seu aplicativo funciona localmente, mas falha no preparo ou na produção, dependências inconsistentes em requisitos.txt são os suspeitos de sempre. Mesmo um pequeno desvio causa grandes problemas.

Use estas estratégias:

  • ferramentas de pip: Usar pip-compilar para gerar requisitos.txt a partir de um requisitos.em. Ele resolve dependências com fixação adequada.
  • Marcadores de ambiente: Para pacotes específicos do sistema operacional ou dependências específicas da versão do Python, use marcadores como sistema_de_plataforma == 'Linux'.
  • Cache do Docker: No CI, armazene em cache suas camadas do Docker após instalar dependências de requisitos.txt para reduzir a variabilidade de construção.

Exemplo com pip-tools:

# requirements.in flask  # Compile pip-compile requirements.in 

⚠️ Exemplo demonstrativo, a saída real depende do seu ambiente

A saída é um totalmente fixado requisitos.txt.

Ferramentas como pip congelar, quando combinado com instalação pip -r requirements.txt durante as construções, exigem disciplina e salvaguardas adicionais.

Conclusão: Definindo suas necessidades com confiança

Má gestão requisitos.txt Não é apenas uma prática ruim; é um risco ativo à segurança. Fixações imprecisas, instalações não verificadas e confiança cega em registros abertos são formas pelas quais os invasores exploram seu CI/CD pipeline. Essas não são falhas teóricas; elas são exploradas diariamente.

A fixação de dependências é mais do que uma prática recomendada. É a sua primeira linha de defesa contra ataques à cadeia de suprimentos em Python. Combine isso com –requer-hashes, construir isolamento e ferramentas reproduzíveis como ferramentas de pip, e você ganha um pipeline isso é mais difícil de comprometer.

Quer seja usando a pip install requirements.txt localmente ou em CI, sempre verifique e monitore o que entra em suas compilações. Ferramentas como Xygeni fornecer visibilidade, aplicação de políticas e verificações automatizadas que bloqueiam sua cadeia de suprimentos Python de requisitos de congelamento de pip.txt durante todo o processo de produção.

sca-tools-software-composição-análise-ferramentas
Priorize, corrija e proteja seus riscos de software
Crie sua conta gratuita.
Nenhum cartão de crédito é necessário.

Proteja seu desenvolvimento e entrega de software

com o Suíte de Produtos da Xygeni