hettiger / spa-honeypot
单页应用程序的诱饵包
v0.0.2
2022-12-30 14:21 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^9.0
- spatie/laravel-package-tools: ^1.13.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- nuwave/lighthouse: ^5.61
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- pestphp/pest-plugin-mock: ^1.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
Suggests
- nuwave/lighthouse: This package supports Lighthouse PHP (optional)
Conflicts
- nuwave/lighthouse: <5.61
This package is auto-updated.
Last update: 2024-09-29 06:20:08 UTC
README
帮助保护单页应用程序(SPA)免受垃圾邮件侵害,无需使用cookie或用户输入。
安装
composer require hettiger/spa-honeypot php artisan spa-honeypot:install
使用
- 将
form.honeypot
、form.token
或form
中间件添加到表单目标路由
Route::post('form', fn () => 'OK')->middleware('form');
form
中间件组简单地将form.honeypot
和form.token
组合在一起,因此您不必这样做。支持仅使用form.token
保护而不使用form.honeypot
中间件,或反之亦然。
- 使用相应的前端库之一来发出表单令牌请求
Lighthouse GraphQL API
- 将
form.token.handle
中间件添加到lighthouse.route.middleware
配置
// config/lighthouse.php — must be published 'middleware' => [ // … 'form.token.handle', ],
- 在您的
graphql/schema.graphql
文件中注册诱饵标量
scalar Honeypot @scalar(class: "Hettiger\\Honeypot\\GraphQL\\Scalars\\HoneypotScalar") # …
- 向任何您想要保护免受垃圾邮件侵害的输入添加诱饵字段
input SendContactRequestInput { # … honey: Honeypot }
在GraphQL上下文中不使用
field
配置。
- 将
@requireFormToken
指令添加到任何您想要保护免受垃圾邮件侵害的字段
# e.g. graphql/contact.graphql extend type Mutation { sendContactRequest(input: SendContactRequestInput): SendContactRequestPayload @requireFormToken }
- 使用相应的前端库之一来发出表单令牌请求
自定义响应
您可以使用配置提供自定义错误响应工厂
return [ // … 'honeypot_error_response_factory' => \Hettiger\Honeypot\ErrorResponseFactory::class, 'form_token_error_response_factory' => \Hettiger\Honeypot\ErrorResponseFactory::class, ];
或者您可以在应用程序的任何地方提供简单的Closure
use Hettiger\Honeypot\Facades\Honeypot; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { // … public function boot() { $errorResponseFactory = fn (bool $isGraphQLRequest) => $isGraphQLRequest ? ['errors' => [['message' => 'Whoops, something went wrong …']]] : 'Whoops, something went wrong …'; Honeypot::respondToHoneypotErrorsUsing($errorResponseFactory); Honeypot::respondToFormTokenErrorsUsing($errorResponseFactory); } }
您不必担心自己添加表单令牌头部。它将自动为您添加。
测试
composer test
前端库
变更日志
有关最近更改的更多信息,请参阅变更日志
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件