Reino: Encapsulation

La encapsulación consiste en crear límites fuertes. En un explorador web esto puede suponer la seguridad de que tu codificación móvil no se vea comprometido por otro código móvil. En el servidor puede significar la diferenciación entre los datos validados y los que no lo están, entre los datos de un usuario y los de otro, o entre los diferentes usuarios, los datos que pueden ver y los que no.

Django Bad Practices: Attributes in Deny List

Abstract
La aplicación utiliza una lista de rechazados para controlar qué atributos quedan expuestos con un formulario. Los desarrolladores pueden olvidar actualizar la lista de rechazados al agregar nuevos atributos y podrían exponer accidentalmente campos confidenciales a los atacantes.
Explanation
La aplicación utiliza una lista de rechazados exclude. Esto es difícil de mantener y es susceptible a errores. Si los desarrolladores agregan campos nuevos al formulario o al Model que respalda el formulario y olvidan actualizar el filtro exclude, podrían estar exponiendo campos confidenciales a los atacantes. Los atacantes podrán enviar y enlazar datos malintencionados a cualquier campo no excluido.

Ejemplo 1: el siguiente formulario expone algunos atributos User, pero controla en una lista de rechazados el id del usuario:


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


Si el modelo User se actualizó con un atributo role nuevo y el UserForm asociado no se actualizó, el atributo role se expondría en el formulario.
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