界: Encapsulation

カプセル化とは、強い境界線を引くことです。Web ブラウザの場合は、自分のモバイル コードが他のモバイル コードに悪用されないようにすることを意味します。サーバー上では、検証されたデータと検証されていないデータ、あるユーザーのデータと別のユーザーのデータ、またはユーザーが見ることを許可されたデータと許可されていないデータの区別などを意味する場合があります。

Django Bad Practices: Attributes in Deny List

Abstract
アプリケーションは拒否リストを使用し、フォームで表示される属性を制御します。開発者は新しい属性を追加するとき拒否リストの更新を忘れることがあり、誤って機密フィールドを攻撃者にさらすことがあります。
Explanation
このアプリケーションは exclude 拒否リストを使用します。これでは保守管理が難しく、間違いが発生しやすくなります。開発者がフォームまたはフォームをバックアップする Model に新しいフィールドを追加するとき、exclude フィルターの更新を忘れると、機密フィールドを攻撃者にさらすことになります。攻撃者は悪意のあるデータを送信し、除外されていないフィールドにバインドできます。

例 1: 次のフォームは一部の User 属性を開示しますが、ユーザー id について拒否リストをチェックします。


from myapp.models import User
...
class UserForm(ModelForm):
class Meta:
model = User
exclude = ['id']
...
User モデルが新しい role 属性で更新され、関連付けられている UserForm が更新されない場合、role 属性はフォームに表示されます。
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