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
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!