silverstripe / security-extensions
一个临时填充库,用于安全改进,这些改进将被移植到核心
Requires
- php: ^7.4 || ^8.0
- silverstripe/admin: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- silverstripe/framework: ^4.10
- squizlabs/php_codesniffer: ^3
- 4.x-dev
- 4.5.x-dev
- 4.5.2
- 4.5.1
- 4.5.0
- 4.5.0-rc1
- 4.5.0-beta1
- 4.4.x-dev
- 4.4.0
- 4.4.0-rc1
- 4.4.0-beta1
- 4.3.x-dev
- 4.3.0
- 4.3.0-rc1
- 4.3.0-beta1
- 4.2.x-dev
- 4.2.1
- 4.2.0
- 4.1.x-dev
- 4.1.0
- 4.1.0-rc1
- 4.1.0-beta1
- 4.0.x-dev
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 4.0.0-rc1
- 4.0.0-beta1
- 3.0.x-dev
- 3.0.1
- 3.0.0
- 3.0.0-rc1
- dev-dependabot/npm_and_yarn/express-4.21.0
- dev-dependabot/npm_and_yarn/word-wrap-1.2.5
- dev-4.4-release
- dev-master
This package is auto-updated.
Last update: 2024-09-21 17:24:20 UTC
README
注意:此模块不再在Silverstripe CMS 5中提供商业支持,它不提供CMS5兼容版本。自Silverstripe CMS 5以来,它已成为核心功能的一部分。
概述
此模块是某些安全相关功能的填充程序,这些功能将成为SilverStripe产品的核心部分,但在此期间需要支持较旧的Silverstripe 3.7和4.x。
此模块将不会与CMS 5兼容 - 相反,其功能已被合并回核心模块。
安装
$ composer require silverstripe/security-extensions 1.x-dev
功能
Sudo模式
Sudo模式代表了一种更高的权限级别,即您更有信心当前用户确实是已登录的账户的所有者。这是通过重新验证账户的密码是否正确来完成的,然后在一定时间内(可配置)保持有效,直到再次检查。
当用户登录CMS时,Sudo模式将自动启用配置的持续时间。请注意,如果PHP会话寿命在Sudo模式寿命之前到期,Sudo模式也将被清除(并在用户再次登录时重新启用)。如果用户长时间保持CMS开放,或继续使用它,并在此期间在后台自动刷新,Sudo模式最终将在达到最大寿命时失效。
配置寿命
默认的SudoModeServiceInterface
实现是SudoModeService
,其寿命可以通过YAML进行配置。您应使用SudoModeServiceInterface::getLifetime()
读取寿命值。
SilverStripe\SecurityExtensions\Service\SudoModeService: lifetime_minutes: 25
为控制器启用Sudo模式
您可以将SilverStripe\SecurityExtensions\Services\SudoModeServiceInterface
添加为依赖项,以控制器之一需要sudo模式的一个操作
class MyController extends Controller { private $sudoModeService; private static $dependencies = ['SudoModeService' => '%$' . SudoModeServiceInterface::class]; public function setSudoModeService(SudoModeServiceInterface $sudoModeService): self { $this->sudoModeService = $sudoModeService; return $this; } }
在控制器操作中执行sudo模式验证检查只需使用服务来验证请求即可
public function myAction(HTTPRequest $request): HTTPResponse { if (!$this->sudoModeService->check($request->getSession()) { return $this->httpError(403, 'Sudo mode is required for this action'); } // ... continue with sensitive operations }
在React组件中使用sudo模式
此模块定义了一个React Higher-Order-Component,可以将其应用于您的模块或代码中的React组件,以拦截组件渲染并显示“sudo模式要求”信息和登录屏幕,该屏幕将验证,激活sudo模式,并在成功后重新渲染包装组件。
注意:JavaScript注入器目前不支持注入转换/HOCs,因此我们将这些注入转换的应用耦合到本模块本身中,用于silverstripe/mfa模块。不幸的是,如果您想将其应用于自己的代码,您将需要将SudoMode
HOC复制到您的项目或模块中,并在该点应用转换。
示例实现
import WithSudoMode from '../containers/SudoMode/SudoMode'; Injector.transform('MyComponentWithSudoMode', (updater) => { updater.component('MyComponent', WithSudoMode); });
添加到组件的要求
虽然 sudoModeActive
属性会自动从 Redux 配置存储中收集,但后端验证也已实施,以确保前端 UI 不能简单篡改以避免在敏感操作上重新验证。
同时确保您已保护您的端点免受 跨站请求伪造 (CSRF) 的攻击。
要求下次登录时更改密码
具有管理成员能力的管理员可以在 CMS 中查看一个复选框,位于设置成员密码的区域下。勾选此框将密码过期设置为当前日期,这意味着成员下次登录时将需要为他们的账户选择一个新密码。
为了不因每次更改无关设置并保存而不断更新该成员的记录,日期是选择性设置的。矩阵如下(-
表示没有更改)
在设置此字段且密码已过期用于审计目的时(管理员可以看到密码多久未过期),不进行任何更改。
类似地,在取消设置此字段且过期日期在未来时,也不进行任何更改 - 应保持原样 - 复选框是为了在 下一次 登录时立即要求选择新密码。
根据上述两段,在正常(CMS)使用中,不应可能遇到这些情况,因为 UI 在加载时会反映密码过期字段的当前状态。如果当前密码已过期,则复选框将被勾选。
版本控制
此库遵循 Semver。根据 Semver,您将能够升级到此库的任何次要或补丁版本,而不会对公共 API 进行任何破坏性更改。Semver 还要求我们明确定义此库的公共 API。
所有具有 public
可见性的方法都是公共 API 的一部分。所有其他方法都不是公共 API 的一部分。在可能的情况下,我们将尝试在次要/补丁版本中保持 protected
方法的向后兼容性,但如果您正在覆盖方法,请在升级前测试您的作品。
问题报告
请为任何您发现的错误或缺失的功能 创建一个问题。
许可证
此模块是在 BSD 3-Clause License 下发布的。