>  기사  >  PHP 프레임워크  >  Laravel 권한 기능에 대한 보안 전략: 권한 남용 및 우회를 방지하는 방법

Laravel 권한 기능에 대한 보안 전략: 권한 남용 및 우회를 방지하는 방법

PHPz
PHPz원래의
2023-11-03 13:36:36734검색

Laravel 권한 기능에 대한 보안 전략: 권한 남용 및 우회를 방지하는 방법

Laravel은 매우 강력한 권한 관리 및 인증 기능을 갖춘 최신 PHP 프레임워크입니다. 그러나 적절한 보안 전략이 채택되지 않으면 권한 관리 남용, 우회 등의 보안 문제가 여전히 존재합니다. 이 글에서는 Laravel의 권한 기능을 사용할 때의 몇 가지 보안 전략을 소개하고 구체적인 코드 예제를 제공합니다.

1. 권한 관리 남용

권한 관리 남용이란 인사부 직원에게 영업 권한을 부여하거나 재무부 청구서를 삭제하는 등 승인된 사용자의 권한을 과도하게 사용하는 행위를 말합니다. 이러한 남용은 기밀 정보 유출, 데이터 손실 및 기타 부정적인 결과를 초래할 수 있습니다. 이러한 상황을 방지하기 위해 Laravel에 두 가지 보안 정책을 추가할 수 있습니다.

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

위 코드에서는 hasPermission()needApproval() 두 가지 메소드를 사용하여 사용자가 수정 사항이 있으며 승인이 필요한지 여부를 확인하세요. 승인이 필요한 경우 승인자에게 승인 권한이 있는지 확인합니다. 위의 조건이 충족될 경우, 사용자 정보를 수정할 수 있습니다. 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. 빈도 제한

빈도 제한은 악의적인 사용자가 로그인, 등록 등의 특정 작업을 짧은 시간 내에 반복적으로 수행하는 것을 방지할 수 있습니다. 이를 통해 공격자가 무차별 대입 도구를 사용하여 비밀번호를 해독하거나 다수의 가짜 계정을 생성하는 것을 방지할 수 있습니다. Laravel은 ThrottleRequests 미들웨어를 제공하며 appHttpKernel.php 파일에 다음 코드를 추가할 수 있습니다:

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

위 코드에서 'throttle:60,1 ' 는 분당 최대 60번의 실행이 허용됨을 의미합니다. 사용자가 짧은 시간 내에 작업을 여러 번 수행하려고 하면 HTTP 429 오류가 반환됩니다.

2. 권한 관리 우회 🎜🎜권한 관리 우회란 권한이 없는 사용자나 공격자가 취약점을 이용해 시스템을 제어하는 ​​것을 의미합니다. 이로 인해 시스템 불안정, 데이터 유출 및 기타 문제가 발생할 수 있습니다. 권한 관리 우회를 방지하기 위해 Laravel에 다음 두 가지 보안 정책을 추가할 수 있습니다. 🎜🎜1. 데이터 필터링🎜🎜Laravel에서는 모델에 데이터 필터를 정의하여 쿼리 결과를 제한할 수 있습니다. 데이터 필터링을 사용하면 공격자가 URL에 SQL 코드를 삽입하거나 승인되지 않은 데이터를 얻는 것을 방지할 수 있습니다. 다음 코드 예제에서는 데이터 필터링을 사용하는 방법을 보여줍니다. 🎜rrreee🎜위 코드에서 scopeAuthorized() 메서드는 whereIn() 메서드를 사용하여 승인되지 않은 데이터에 대한 쿼리를 방지합니다. pluck() 메서드는 toArray() 메서드를 통해 PHP 배열로 변환되는 IlluminateSupportCollection 인스턴스를 반환합니다. 🎜🎜2. 요청자 인증 강제🎜🎜미들웨어 auth를 사용하여 요청자를 강제로 인증하세요. 컨트롤러에서는 다음과 같이 auth 미들웨어를 사용할 수 있습니다. 🎜rrreee🎜요청자가 인증되지 않으면 요청이 거부됩니다. 인증과 관련된 모든 사항을 Laravel에서 직접 처리하기 때문에 다른 솔루션을 사용할 때 작성해야 하는 코드를 많이 절약할 수 있습니다. 🎜🎜요약🎜🎜Laravel에서는 권한 관리 및 인증 기능이 매우 강력합니다. 그러나 악의적인 사용자와 해커에 직면할 경우에는 여전히 몇 가지 보안 전략을 채택해야 합니다. 이 문서에서는 특정 코드 예제와 함께 오랫동안 입증된 몇 가지 보안 전략을 제공합니다. 이 글이 Laravel의 보안을 향상시키는 데 도움이 되기를 바랍니다. 🎜

위 내용은 Laravel 권한 기능에 대한 보안 전략: 권한 남용 및 우회를 방지하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.