Usar as funções de análise do módulo defusedxml para proteger contra XMLs com dados maliciosos #27
Replies: 2 comments
-
Vamos avaliar a sua sugestão. |
Beta Was this translation helpful? Give feedback.
-
Acredito que não seja adequado tratar isso diretamente na biblioteca BrazilFiscalReport, pois essa responsabilidade pode ser delegada à camada onde a biblioteca está sendo utilizada. Dessa forma, quem integra a biblioteca tem a flexibilidade de decidir se aplica ou não esse tipo de tratamento. Em ambientes controlados, essa camada de segurança pode não ser necessária, enquanto em casos que envolvem recebimento de XMLs externos, o tratamento é realmente importante. Porém, considero mais apropriado deixar essa decisão e implementação para quem está utilizando a biblioteca, garantindo maior modularidade e adequação às diferentes necessidades. De qualquer forma, acho interessante mencionar essa recomendação na documentação da biblioteca, para orientar os usuários sobre a importância de lidar com XMLs externos de forma segura. |
Beta Was this translation helpful? Give feedback.
-
Como a documentação do módulo padrão de manipulação de XMLs do Python indica, este módulo não é seguro contra XMLs contendo dados maliciosos que exploram vulnerabilidades em recursos pouco usados do XML, e de seus parsers, para atacar o sistema.
Por isso o módulo defusedxml foi criado para substituir as funções de análise/parse de XML da biblioteca padrão por versões seguras contra esses tipos de ataque conhecidos. Logo, gostaria de sugerir a adição do módulo defusedxml como dependência desse projeto, e o uso de suas funções para analisar XMLs.
E a alteração do código para adotar o defusedxml no caso desse projeto é bem simples, basta substituir
por
onde ElementTree é usado (
danfe.py
edacce.py
).Nota: O módulo defusedxml não é um substituto para o módulo XML padrão, apenas fornece as funções e classes relacionadas ao carregamento e análise de XMLs, que é onde as vulnerabilidades podem ser abusadas. Para todos os outros recursos, use as classes, funções, e constantes do módulo padrão.
Por exemplo, a linha:
em
dacte.py
permaneceria inalterada.Beta Was this translation helpful? Give feedback.
All reactions