Rumah  >  Artikel  >  rangka kerja php  >  Strategi Keselamatan untuk Ciri Keizinan Laravel: Cara Mencegah Penyalahgunaan dan Pintasan Kebenaran

Strategi Keselamatan untuk Ciri Keizinan Laravel: Cara Mencegah Penyalahgunaan dan Pintasan Kebenaran

PHPz
PHPzasal
2023-11-03 13:36:36734semak imbas

Strategi Keselamatan untuk Ciri Keizinan Laravel: Cara Mencegah Penyalahgunaan dan Pintasan Kebenaran

Laravel ialah rangka kerja PHP moden dengan pengurusan kebenaran dan fungsi pengesahan yang sangat berkuasa. Walau bagaimanapun, jika strategi keselamatan yang sesuai tidak diguna pakai, masih terdapat isu keselamatan seperti penyalahgunaan pengurusan kebenaran dan pintasan. Artikel ini akan memperkenalkan beberapa strategi keselamatan apabila menggunakan fungsi kebenaran Laravel dan memberikan contoh kod khusus.

1 Penyalahgunaan pengurusan kebenaran

Penyalahgunaan pengurusan kebenaran merujuk kepada penggunaan keizinan pengguna yang dibenarkan secara berlebihan, seperti memberi kuasa kepada pekerja jabatan sumber manusia untuk beroperasi, memadam. operasi jabatan kewangan Bil dsb. Penyalahgunaan sedemikian boleh menyebabkan kebocoran maklumat sulit, kehilangan data dan akibat buruk yang lain. Untuk mengelakkan situasi ini daripada berlaku, kita boleh menambah dua dasar keselamatan pada Laravel.

1. Sistem kelulusan kebenaran

Sistem kelulusan boleh mengehadkan penggunaan kebenaran pengguna Sebagai contoh, pentadbir hanya boleh mengendalikan data sensitif selepas kelulusan. Contoh kod untuk melaksanakan strategi ini adalah seperti berikut:

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', '用户信息修改成功!');
}

Dalam kod di atas, kami menggunakan dua kaedah hasPermission() dan needApproval(), Tentukan sama ada pengguna mempunyai kebenaran pengubahsuaian dan sama ada kelulusan diperlukan. Jika kelulusan diperlukan, sahkan sama ada pemberi kelulusan mempunyai kuasa kelulusan. Jika syarat di atas dipenuhi, maklumat pengguna boleh diubah suai. 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'表示允许每分钟最多执行60次。如果用户尝试在短时间内多次执行某个操作,则会返回一个HTTP 429错误。

二、权限管理绕过

权限管理绕过指的是,未被授权的用户或攻击者利用漏洞获取了系统的控制权。这可能导致系统不稳定、数据泄露等问题。为了防止权限管理绕过,我们可以在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

2. Had kekerapan

Had kekerapan boleh menghalang pengguna berniat jahat daripada berulang kali melakukan operasi tertentu dalam tempoh masa yang singkat, seperti log masuk, mendaftar, dll. Ini menghalang penyerang daripada menggunakan alat kekerasan untuk memecahkan kata laluan atau mencipta sejumlah besar akaun palsu. Laravel menyediakan ThrottleRequests middleware, kita boleh menambah kod berikut dalam fail appHttpKernel.php:

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

Dalam kod di atas, ' throttle:60,1' bermakna maksimum 60 pelaksanaan seminit dibenarkan. Jika pengguna cuba melakukan tindakan beberapa kali dalam tempoh masa yang singkat, ralat HTTP 429 akan dikembalikan.

2. Pintasan pengurusan kebenaran#🎜🎜##🎜🎜#Pintas pengurusan kebenaran merujuk kepada situasi di mana pengguna atau penyerang yang tidak dibenarkan menggunakan kelemahan untuk mengawal sistem. Ini boleh menyebabkan ketidakstabilan sistem, kebocoran data dan isu lain. Untuk mengelakkan pintasan pengurusan kebenaran, kami boleh menambah dua dasar keselamatan berikut pada Laravel. #🎜🎜##🎜🎜#1. Penapisan data#🎜🎜##🎜🎜#Dalam Laravel, kami boleh mentakrifkan penapis data dalam model untuk mengehadkan hasil pertanyaan. Menggunakan penapisan data boleh menghalang penyerang daripada menyuntik kod SQL dalam URL atau mendapatkan data yang tidak dibenarkan. Contoh kod berikut menunjukkan cara menggunakan penapisan data. #🎜🎜#rrreee#🎜🎜#Dalam kod di atas, kaedah scopeAuthorized() menggunakan kaedah whereIn() untuk mengelakkan pertanyaan data yang tidak dibenarkan. Kaedah pluck() mengembalikan contoh IlluminateSupportCollection, yang ditukarkan kepada tatasusunan PHP melalui kaedah toArray(). #🎜🎜##🎜🎜#2. Paksa peminta pengesahan #🎜🎜##🎜🎜#Gunakan middleware auth untuk memaksa peminta untuk mengesahkan. Dalam pengawal kami, kami boleh menggunakan perisian tengah auth seperti ini: #🎜🎜#rrreee#🎜🎜#Jika peminta tidak disahkan, permintaan akan ditolak. Kami boleh menyimpan banyak kod yang perlu kami tulis apabila menggunakan penyelesaian lain, kerana Laravel mengendalikan semua butiran berkaitan pengesahan secara langsung. #🎜🎜##🎜🎜#Ringkasan#🎜🎜##🎜🎜#Dalam Laravel, pengurusan kebenaran dan fungsi pengesahan sangat berkuasa. Walau bagaimanapun, kami masih perlu menggunakan beberapa strategi keselamatan apabila menghadapi pengguna dan penggodam yang berniat jahat. Artikel ini menyediakan beberapa strategi keselamatan yang telah lama terbukti, bersama-sama dengan contoh kod tertentu. Harap artikel ini dapat membantu anda meningkatkan keselamatan Laravel. #🎜🎜#

Atas ialah kandungan terperinci Strategi Keselamatan untuk Ciri Keizinan Laravel: Cara Mencegah Penyalahgunaan dan Pintasan Kebenaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn