dasprid / csrf-guard
PSR-7 CSRF 守护
Requires
- php: ^7.1
- dasprid/pikkuleipa: ^2.0
- dasprid/treereader: ^1.1
- psr/http-message: ^1.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- phpunit/phpunit: ^6.0
- psr/container: ^1.0
- squizlabs/php_codesniffer: ^2.8
- zendframework/zend-diactoros: ^1.3
Suggests
- psr/container: for using the shipped factories
README
CSRF Guard 是一个帮助防护 CSRF 攻击的库。
安装
通过 composer 安装
$ composer require dasprid/csrf-guard
使用
CSRF Guard 可与实现 interop 中间件或 PSR-15 标准的任何库一起使用。它包含一些预定义的工厂,这些工厂利用 PSR-11 容器标准,并提供一个配置提供程序,该程序可以与像 Zend\ServiceManager 这样的容器实现一起使用。如果您同时使用该容器实现和 Zend\Expressive,您可以通过简单地拥有一个类似这样的自动加载配置文件来注册您的工厂
<?php return (new DASPRiD\CsrfGuard\ConfigProvider())->__invoke();
或者,您可以在容器中手动注册工厂。之后,您需要在容器中有一个 config
条目,它应该返回一个配置数组。再次提醒,当使用 Zend\Expressive 时,将 example-config.php
文件从 doc
目录复制到您的自动加载目录就足够了。
配置示例包含一些合理的默认值,但您至少需要调整 private_key
。您还必须调整 failure_middleware
,使其指向一个包含 CSRF 验证失败时创建响应的中间件的容器键。这个中间件可以显示一个错误页面或将用户重定向到其他地方。
最后,您需要在发送到服务器的每个 POST
、PUT
或 DELETE
请求中添加一个 CSRF 令牌。当您注册了所有工厂后,您可以通过请求对象中的键获取 CSRF 令牌,该键在配置中定义。
忽略特定路径
有时您可能想排除特定路径的 CSRF 检查,例如 API 方法。为此,您可以通过 exclude_paths
数组选项指定无限数量的路径前缀以排除 CSRF 检查。每个以其中之一开头的路径都将不会由中间件处理。
这意味着匹配这些路径的路径将不会在它们的请求处理器中收到 CSRF 令牌,也不会发出 CSRF 甜点。
公钥提供者
由于 CSRF 令牌始终使用公钥和私钥创建,因此默认情况下会自动为您生成具有给定生命周期的公钥。但是,您可以提供自己的公钥提供者,例如,该提供者可以返回用户 ID 作为公钥。当您的提供者返回 null
而不是字符串时,CSRF 中间件将回退到使用 cookie。如果您需要为尚未认证的用户提供 CSRF 令牌,这很有用。