digbang / security
Digbang中Laravel项目的安全包。
Requires
- php: ^8.0.2
- cartalyst/sentinel: dev-master
- illuminate/contracts: ^9.0
- illuminate/cookie: ^9.0
- illuminate/events: ^9.0
- illuminate/routing: ^9.0
- illuminate/support: ^9.0
- laravel-doctrine/fluent: ^1.3
- laravel-doctrine/orm: ^1.8
Requires (Dev)
- laravel/pint: ^0.2.1
- phpspec/phpspec: dev-main
- phpstan/phpstan: ^1.8
- phpunit/phpunit: ^9.5
- dev-master
- v6.0.3
- v6.0.2
- v6.0.1
- v6.0.0
- v5.6.3
- v5.6.2
- v5.6.1
- v5.6.0
- v5.5.3
- v5.5.2
- v5.5.1
- v5.5.0
- v5.4.1
- v5.4.0
- v5.3.2
- v5.3.1
- v5.3.0
- v5.2.6
- v5.2.5
- v5.2.4
- v5.2.3
- v5.2.2
- v5.2.1
- v5.2.0
- v5.1.10
- v5.1.9
- v5.1.8
- v5.1.7
- v5.1.6
- v5.1.5
- v5.1.4
- v5.1.3
- v5.1.2
- v5.1.1
- v5.1.0
- v5.0.7
- v5.0.6
- v5.0.5
- v5.0.4
- 5.0.3
- 5.0.2
- 5.0.1
- 5.0.0
- 4.2.4
- 4.2.3
- 4.2.2
- 4.2.1
- 4.2.0
- 4.1.7
- 4.1.6
- 4.1.5
- 4.1.4
- 4.1.3
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.0.1
- 3.0.0
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2024-08-29 04:32:33 UTC
README
为新的laravel项目提供的安全包。
用法
将 SecurityServiceProvider
添加到你的 config/app.php
文件
'providers' => [ Digbang\Security\Laravel\SecurityServiceProvider::class, ];
要使用此包,你需要定义一个需要保护的安全 上下文。此 上下文 内的URL将能够访问为他们配置的 SecurityApi
。这样,你可以在单个应用程序上运行多个 上下文。
在你的自定义 ServiceProvider :: boot()
中添加所需的上下文数量
<?php namespace App\Providers; use Digbang\Security\SecurityContext; use Digbang\Security\Configurations\SecurityContextConfiguration; class MyServiceProvider extends \Illuminate\Support\ServiceProvider { public function boot(SecurityContext $securityContext) { $configuration = new SecurityContextConfiguration('ecommerce'); // customize the configuration object as needed... $securityContext->add($configuration); } }
然后在你的路由中引用此上下文(作为 路由中间件)
<?php $router->group(['middleware' => 'security:ecommerce'], function(Router $router){ // Controllers inside this routing group will be able to ask for an instance // of the Digbang\Security\Contracts\SecurityApi interface. $router->get('/', ['as' => 'foo', 'uses' => 'FooController@index']); });
Digbang\Security\Contracts\SecurityApi
接口提供了对这个包所有功能的访问。在大多数情况下,它作为 Cartalyst\Sentinel\Sentinel
对象的包装器。
请参阅每个方法的文档以了解其用法。
用户
基本认证功能可以通过 SecurityApi
对象直接访问。
要访问 UserRepository
对象,调用 $securityApi->users()
。
提醒
提醒是与用户相关的随机生成代码,通常用于密码重置周期。
要访问提醒功能,使用 ReminderRepository
,并通过 $securityApi->reminders()
调用。
持久性
持久性是通过生成会话和cookie令牌来保持登录会话的,这可以通过时间来持久化。
要访问持久性功能,使用 PersistenceRepository
,并通过 $securityApi->persistences()
调用。
检查点
检查点是每次登录尝试时执行的自定义逻辑。Security包提供了 两个 检查点: Activations
和 Throttles
。
激活
激活检查点会在用户每次登录时检查用户是否已激活其账户。如果检查失败,将抛出 NotActivatedException
。
要访问激活功能,使用 ActivationRepository
,并通过 $securityApi->activations()
调用。
限速
限速检查点监控失败的登录尝试,以防止DDoS攻击。它记录三种不同类型的尝试,并对每种尝试做出不同的反应
全局
尝试:在配置的上下文内部的所有登录尝试都会记录一个全局尝试。IP
尝试:来自同一IP的尝试将被记录以识别可能的攻击者。用户
尝试:对同一用户账户的多次失败登录尝试将被记录以识别可能的受害者。
每种尝试类型都有两种配置
- 阈值 (
int
或array
):表示在系统被阻止之前所需的尝试次数。可以使用qty_attempts => block_time
的数组来根据失败尝试的数量阻止访问指定时间。 - 间隔 (
int
):表示系统将阻止此类型进一步尝试的时间(以秒为单位)。
您可以通过 SecurityContextConfiguration
对象更改此配置。默认值如下
'global' => [ 'interval' => 900, 'thresholds' => [ 10 => 1, 20 => 2, 30 => 4, 40 => 8, 50 => 16, 60 => 12 ] ], 'ip' => [ 'interval' => 900, 'thresholds' => 5 ], 'user' => [ 'interval' => 900, 'thresholds' => 5 ]
要访问限速功能,使用 ThrottleRepository
,并通过 $securityApi->throttles()
调用。
角色
角色将用户分组,并允许管理员向一组用户授予(或拒绝)对资源的访问。
如果不需要,可以通过 SecurityContextConfiguration
对象禁用角色。
要访问角色功能,使用 RoleRepository
,并通过 $securityApi->roles()
调用。
权限
权限是功能标识符,用于授予或拒绝特定用户或角色对系统部分访问权限。
默认情况下,RoutePermissionRepository
对象将通过解析路由中的action
数组来检查可用权限,寻找permission
键。可以通过实现不同的Digbang\Security\Permissions\PermissionRepository
并相应地更改SecurityContextConfiguration
来更改此策略。
如果不需要,也可以通过SecurityContextConfiguration
对象禁用权限。
要访问权限功能,请使用PermissionRepository
并调用$securityApi->permissions()
。
生成URL
PermissibleUrlGenerator
是Laravel的UrlGenerator
接口的扩展。默认实现PermissionAwareUrlGenerator
将检查当前登录用户是否有权访问请求的URL,如果没有权限,将抛出Digbang\Security\Permissions\PermissionException
异常。
您可以通过$securityApi->url()
方法访问此功能。
自定义对象
安全包通过更多功能扩展了Cartalyst\Sentinel
接口。默认情况下,每个接口的实现(例如:Digbang\Security\Users\User
)可以在相同的命名空间中找到(例如:Digbang\Security\Users\DefaultUser
)。
如果您希望使用任何Entity
的自定义实现,请按照以下步骤操作
- 您必须要么
- 通过扩展自己的实现来扩展存储库实现(例如:
Digbang\Security\Users\DoctrineUserRepository
) - 或者您可以决定自行实现存储库接口(例如:
Digbang\Security\Users\UserRepository
)
- 通过扩展自己的实现来扩展存储库实现(例如:
- 您必须实现对应接口中的所有方法(例如:
Digbang\Security\Users\User
) - 您必须在
SecurityContextConfiguration
对象中配置此内容,如上所示 - 您可以使用实体特性(例如:
Digbang\Security\Users\UserTrait
) - 您可以使用映射特性(例如:
Digbang\Security\Users\UserMappingTrait
)