ユーザーが制御する値による権限確認

ユーザーが制御する値による権限確認

説明

Cookieやリクエストパラメーターなど、ユーザーが変更できる値で権限を判断すると、アクセス制御を回避される可能性があります。

想定される影響

他のユーザーのデータの閲覧、管理機能へのアクセス、権限昇格につながるおそれがあります。

対処方法

ロールとユーザー識別子はサーバーのセッションや保存先から取得し、クライアントが渡した値を信頼しないでください。

例

currentUserRoleFromDatabase()は実装を省略したアプリケーション関数です。リクエストで指定されたユーザーではなく、認証済みユーザーのサーバー側の識別子を使ってロールを取得する必要があります。

変更前

php
<?php
if ($_COOKIE['user_role'] === 'admin') {
    show_admin();
}

変更後

php
<?php
if (currentUserRoleFromDatabase() === 'admin') {
    show_admin();
}

説明:

  • 変更前: Cookieなど、クライアントが制御するリクエストデータに基づいて権限を判断します。
  • 変更後: クライアントが渡した値を信頼せず、サーバー側の状態からロールとユーザー識別子を取得します。

参考資料