Reino: Encapsulation

Encapsulamento consiste em traçar limites fortes. Em um navegador web, isso pode significar que seu código para dispositivos móveis não pode ser abusado por outros códigos para dispositivos móveis. No servidor, pode significar a diferenciação entre dados validados e não validados, entre os dados de dois usuários ou entre os dados que os usuários podem ou não acessar.

Django Bad Practices: Attributes in Deny List

Abstract
O aplicativo utiliza uma lista de bloqueios para controlar quais atributos são expostos por um formulário. Os desenvolvedores podem esquecer de atualizar a lista de bloqueios ao adicionar novos atributos e podem expor campos confidenciais aos invasores acidentalmente.
Explanation
O aplicativo usa uma lista de bloqueios exclude. Isso é difícil de manter e está sujeito a erros. Caso os desenvolvedores adicionem novos campos ao formulário ou um Model que faça backup do formulário e esqueçam de atualizar o filtro exclude, eles poderão expor campos confidenciais aos atacantes. Os atacantes serão capazes de enviar e vincular dados maliciosos a qualquer campo não excluído.

Exemplo 1: O formulário a seguir expõe alguns atributos de User, porém verifica uma lista de bloqueios para o id do usuário:


from myapp.models import User
...
class UserForm(ModelForm):
class Meta:
model = User
exclude = ['id']
...


Se o modelo User foi atualizado com um novo atributo role e o UserForm associado não foi atualizado, o atributo role será exposto no formulário.
References
[1] Django Foundation Creating forms from models
[2] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[3] Standards Mapping - OWASP API 2023 API3 Broken Object Property Level Authorization
[4] Standards Mapping - OWASP Mobile 2024 M8 Security Misconfiguration
desc.structural.python.django_bad_practices_attributes_in_deny_list