説明
Cookieやリクエストパラメーターなど、ユーザーが変更できる値で権限を判断すると、アクセス制御を回避される可能性があります。
想定される影響
他のユーザーのデータの閲覧、管理機能へのアクセス、権限昇格につながるおそれがあります。
対処方法
ロールとユーザー識別子はサーバーのセッションや保存先から取得し、クライアントが渡した値を信頼しないでください。
例
currentUserRoleFromDatabase()は実装を省略したアプリケーション関数です。リクエストで指定されたユーザーではなく、認証済みユーザーのサーバー側の識別子を使ってロールを取得する必要があります。
変更前
php
<?php
if ($_COOKIE['user_role'] === 'admin') {
show_admin();
}
変更後
php
<?php
if (currentUserRoleFromDatabase() === 'admin') {
show_admin();
}
説明:
- 変更前: Cookieなど、クライアントが制御するリクエストデータに基づいて権限を判断します。
- 変更後: クライアントが渡した値を信頼せず、サーバー側の状態からロールとユーザー識別子を取得します。