ホームページ  >  記事  >  PHPフレームワーク  >  Laravel 権限機能のセキュリティ戦略: 権限の乱用とバイパスを防ぐ方法

Laravel 権限機能のセキュリティ戦略: 権限の乱用とバイパスを防ぐ方法

PHPz
PHPzオリジナル
2023-11-03 13:36:36871ブラウズ

Laravel 権限機能のセキュリティ戦略: 権限の乱用とバイパスを防ぐ方法

Laravel は、非常に強力な権限管理および認証機能を備えた最新の PHP フレームワークです。ただし、適切なセキュリティ戦略が採用されていない場合、権限管理の悪用やバイパスなどのセキュリティの問題が依然として残ります。この記事では、Laravel の権限関数を使用する際のセキュリティ戦略をいくつか紹介し、具体的なコード例を示します。

1. 権限管理の乱用

権限管理の乱用とは、人事部門の従業員に操作を許可したり、財務部門から請求書を削除したりするなど、許可されたユーザーの権限を過度に使用することを指します。部門などこのような悪用は、機密情報の漏洩、データの損失、その他の悪影響につながる可能性があります。この状況を防ぐために、Laravel に 2 つのセキュリティ ポリシーを追加できます。

1. 権限承認システム

権限承認システムでは、管理者は承認後に機密データのみを操作できるなど、ユーザー権限の使用を制限できます。この戦略を実装するコード例は次のとおりです。

public function update(Request $request, $id)
{
    $user = User::find($id);

    if (!$user->hasPermission('edit_user')) {
        abort(403, '你没有权限修改用户信息。');
    }

    // 判断该用户是否需要审批
    if ($user->needApproval()) {
        // 如果需要审批,则需要审批人进行审核通过后才能修改用户
        $approver = $user->approver;

        if (!$approver->hasPermission('approve_user')) {
            abort(403, '你没有权限审批用户信息修改请求。');
        }

        $user->name = $request->name;
        $user->email = $request->email;
        $user->save();

        return redirect()->route('users.show', $user->id)->with('success', '用户信息修改成功!');
    }

    // 如果不需要审批,则直接修改用户
    $user->name = $request->name;
    $user->email = $request->email;
    $user->save();

    return redirect()->route('users.show', $user->id)->with('success', '用户信息修改成功!');
}

上記のコードでは、2 つのメソッド hasPermission()needApproval() を使用して、ユーザーが変更権限を持っているかどうか、および承認が必要かどうか。承認が必要な場合は、承認者に承認権限があるか確認してください。上記の条件を満たしている場合、ユーザー情報を変更することができます。

2. 頻度制限

頻度制限により、悪意のあるユーザーがログインや登録などの特定の操作を短期間に繰り返し実行することを防ぐことができます。これにより、攻撃者が総当たりツールを使用してパスワードを解読したり、偽のアカウントを大量に作成したりすることが防止されます。 Laravel は ThrottleRequests ミドルウェアを提供します。次のコードを appHttpKernel.php ファイルに追加できます。

protected $middlewareGroups = [
    'web' => [
        AppHttpMiddlewareEncryptCookies::class,
        IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
        IlluminateSessionMiddlewareStartSession::class,
        // 加入ThrottleRequests中间件
        IlluminateRoutingMiddlewareThrottleRequests::class,
        IlluminateContractsAuthMiddlewareAuthenticate::class,
        IlluminateRoutingMiddlewareSubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'auth:api',
    ],
];

上記のコードでは、 'throttle:60 、 1' は、1 分あたり最大 60 回の実行が許可されることを意味します。ユーザーが短期間にアクションを複数回実行しようとすると、HTTP 429 エラーが返されます。

2. 権限管理バイパス

権限管理バイパスとは、権限のないユーザーまたは攻撃者が脆弱性を利用してシステムを制御することを意味します。これにより、システムの不安定性、データ漏洩、その他の問題が発生する可能性があります。権限管理のバイパスを防ぐために、次の 2 つのセキュリティ ポリシーを Laravel に追加できます。

1. データ フィルタリング

Laravel では、モデル内にデータ フィルタを定義してクエリ結果を制限できます。データ フィルタリングを使用すると、攻撃者が URL に SQL コードを挿入したり、不正なデータを取得したりすることを防ぐことができます。次のコード例は、データ フィルターの使用方法を示しています。

class MyModel extends Model
{
    // 只查询被授权的数据
    public function scopeAuthorized($query)
    {
        // 获取当前用户的权限数组
        $permissions = auth()->user()->permissions->pluck('name')->toArray();

        // 过滤只保留当前用户有权限的数据
        return $query->whereIn('permission', $permissions);
    }
}

上記のコードでは、scopeAuthorized() メソッドは whereIn() メソッドを使用して、未承認のデータのクエリを回避します。 pluck() メソッドは IlluminateSupportCollection インスタンスを返します。このインスタンスは、toArray() メソッドを通じて PHP 配列に変換されます。

2. リクエスターに認証を強制する

ミドルウェア auth を使用して、リクエスターに認証を強制します。コントローラーでは、auth ミドルウェアを次のように使用できます。

public function __construct()
{
    $this->middleware('auth');
}

リクエスターが認証されていない場合、リクエストは拒否されます。 Laravel は認証関連の詳細をすべて直接処理するため、他のソリューションを使用するときに記述する必要がある多くのコードを節約できます。

概要

Laravel では、権限管理と認証機能が非常に強力です。ただし、悪意のあるユーザーやハッカーに直面する場合には、依然としていくつかのセキュリティ戦略を採用する必要があります。この記事では、長い間実証されてきたセキュリティ戦略を、具体的なコード例とともにいくつか紹介します。この記事がLaravelのセキュリティ向上に役立つことを願っています。

以上がLaravel 権限機能のセキュリティ戦略: 権限の乱用とバイパスを防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。