Heim  >  Artikel  >  PHP-Framework  >  Sicherheitsstrategie für Laravel-Berechtigungsfunktionen: So verhindern Sie den Missbrauch und die Umgehung von Berechtigungen

Sicherheitsstrategie für Laravel-Berechtigungsfunktionen: So verhindern Sie den Missbrauch und die Umgehung von Berechtigungen

PHPz
PHPzOriginal
2023-11-03 13:36:36734Durchsuche

Sicherheitsstrategie für Laravel-Berechtigungsfunktionen: So verhindern Sie den Missbrauch und die Umgehung von Berechtigungen

Laravel ist ein modernes PHP-Framework mit sehr leistungsstarken Berechtigungsverwaltungs- und Authentifizierungsfunktionen. Wenn jedoch keine geeigneten Sicherheitsstrategien übernommen werden, gibt es immer noch Sicherheitsprobleme wie Missbrauch und Umgehung der Berechtigungsverwaltung. In diesem Artikel werden einige Sicherheitsstrategien bei der Verwendung der Berechtigungsfunktionen von Laravel vorgestellt und spezifische Codebeispiele bereitgestellt.

1. Missbrauch der Berechtigungsverwaltung

Missbrauch der Berechtigungsverwaltung bezieht sich auf die übermäßige Nutzung der Berechtigungen autorisierter Benutzer, z. B. die Autorisierung von Mitarbeitern in der Personalabteilung, das Löschen von Rechnungen aus der Finanzabteilung usw. Ein solcher Missbrauch kann nachteilige Folgen wie den Verlust vertraulicher Informationen und den Verlust von Daten haben. Um diese Situation zu verhindern, können wir Laravel zwei Sicherheitsrichtlinien hinzufügen.

1. Berechtigungsgenehmigungssystem

Das Berechtigungsgenehmigungssystem kann die Verwendung von Benutzerberechtigungen einschränken. Beispielsweise können Administratoren sensible Daten nur nach Genehmigung bearbeiten. Das Codebeispiel zur Implementierung dieser Strategie lautet wie folgt:

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

Im obigen Code verwenden wir die beiden Methoden hasPermission() und needApproval(), um zu bestimmen, ob der Benutzer Änderungen vorliegen und ob eine Genehmigung erforderlich ist. Wenn eine Genehmigung erforderlich ist, überprüfen Sie, ob der Genehmiger über die Genehmigungsbefugnis verfügt. Wenn die oben genannten Bedingungen erfüllt sind, können Benutzerinformationen geändert werden. 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. Häufigkeitsbegrenzung

Die Häufigkeitsbegrenzung kann verhindern, dass böswillige Benutzer in kurzer Zeit wiederholt bestimmte Vorgänge ausführen, z. B. sich anmelden, registrieren usw. Dies verhindert, dass Angreifer Brute-Force-Tools nutzen, um Passwörter zu knacken oder eine große Anzahl gefälschter Konten zu erstellen. Laravel stellt ThrottleRequests Middleware bereit. Wir können den folgenden Code in die Datei appHttpKernel.php einfügen:

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

Im obigen Code 'throttle:60,1 ' bedeutet, dass maximal 60 Ausführungen pro Minute zulässig sind. Wenn der Benutzer innerhalb eines kurzen Zeitraums mehrmals versucht, eine Aktion auszuführen, wird ein HTTP 429-Fehler zurückgegeben.

2. Umgehung der Berechtigungsverwaltung 🎜🎜Umgehung der Berechtigungsverwaltung bedeutet, dass nicht autorisierte Benutzer oder Angreifer Schwachstellen nutzen, um die Kontrolle über das System zu erlangen. Dies kann zu Systeminstabilität, Datenlecks und anderen Problemen führen. Um eine Umgehung der Berechtigungsverwaltung zu verhindern, können wir Laravel die folgenden zwei Sicherheitsrichtlinien hinzufügen. 🎜🎜1. Datenfilterung🎜🎜In Laravel können wir Datenfilter im Modell definieren, um die Abfrageergebnisse einzuschränken. Mithilfe der Datenfilterung können Angreifer daran gehindert werden, SQL-Code in die URL einzuschleusen oder an nicht autorisierte Daten zu gelangen. Das folgende Codebeispiel zeigt, wie die Datenfilterung verwendet wird. 🎜rrreee🎜Im obigen Code verwendet die Methode scopeAuthorized() die Methode whereIn(), um die Abfrage nicht autorisierter Daten zu vermeiden. Die pluck()-Methode gibt eine IlluminateSupportCollection-Instanz zurück, die über die toArray()-Methode in ein PHP-Array konvertiert wird. 🎜🎜2. Authentifizierung des Anforderers erzwingen🎜🎜Verwenden Sie die Middleware auth, um die Authentifizierung des Anforderers zu erzwingen. In unserem Controller können wir die auth-Middleware wie folgt verwenden: 🎜rrreee🎜Wenn der Anforderer nicht authentifiziert ist, wird die Anfrage abgelehnt. Wir können eine Menge Code einsparen, den wir schreiben müssen, wenn wir andere Lösungen verwenden, da Laravel alle Authentifizierungsdetails direkt verarbeitet. 🎜🎜Zusammenfassung🎜🎜In Laravel sind die Berechtigungsverwaltungs- und Authentifizierungsfunktionen sehr leistungsfähig. Wir müssen jedoch noch einige Sicherheitsstrategien anwenden, wenn wir böswilligen Benutzern und Hackern gegenüberstehen. Dieser Artikel enthält einige seit langem bewährte Sicherheitsstrategien sowie spezifische Codebeispiele. Ich hoffe, dieser Artikel kann Ihnen helfen, die Sicherheit von Laravel zu verbessern. 🎜

Das obige ist der detaillierte Inhalt vonSicherheitsstrategie für Laravel-Berechtigungsfunktionen: So verhindern Sie den Missbrauch und die Umgehung von Berechtigungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn