matt / sycaptcha
验证码表单保护包,包括 reCaptcha 和 hCaptcha
Requires
- php: >=7.1
- ext-curl: *
- ext-json: *
- google/recaptcha: ^1.2
- symfony/form: ^5.3
- symfony/framework-bundle: ^5.2
- symfony/twig-bundle: ^5.3
- symfony/validator: ^5.3
- symfony/yaml: ^5.3
- twig/twig: ^3.3
This package is auto-updated.
Last update: 2024-09-29 06:03:10 UTC
README
SyCaptchaBundle 是为 Symfony 定制的表单保护包,包含一组 CAPTCHA 挑战,旨在阻止任何恶意请求提交您的表单。
支持的 CAPTCHA
目前支持三种类型的 CAPTCHA
- reCaptcha V2 - 由 Google 提供
- reCaptcha V3 - 由 Google 提供
- hCaptcha - 由 Intuition Machines 提供
由于它是 reCaptcha V3 的“低端”版本,因此不支持隐形 reCaptcha V2
安装
使用 composer require
composer require matt/sycaptcha
无 symfony/flex 的配置
当没有选项安装/升级到 symfony/flex 时,您可以手动配置所有必要的文件
1. 注册包
在 config/bundles.php
中注册包 Symfony 4/5
return [
Matt\SyCaptchaBundle\SyCaptchaBundle::class => ['all' => true],
];
在 app/AppKernel.php
中注册包 Symfony 3 及以下
public function registerBundles()
{
return [
new Matt\SyCaptchaBundle\SyCaptchaBundle(),
];
}
2. 添加配置文件
config/packages/sy_captcha.yaml (或使用 Symfony 3 或以下版本的 app/config/config.yml)
sy_captcha:
recaptcha_v2:
site_key: 'site_key'
secret_key: 'secret_key'
使用
让我们终于来谈谈如何将这些 CAPTCHA 集成到您的表单中。
1. 创建表单并添加 CAPTCHA 保护
您可以将所有三种 CAPTCHA 同时添加到表单中(是的,这有点过度),但是它们都需要正确配置。
<?php
use Matt\SyCaptchaBundle\Form\Type\SyCaptchaHCaptchaType;
class FormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('captcha', SyCaptchaHCaptchaType::class);
}
}
2. 如有需要配置 CAPTCHA
有一系列参数可以用于配置 CAPTCHA 和其脚本。大多数参数通过配置文件设置(更多在配置部分),少数通过表单选项声明。这些是
- action_name - 设置操作名称(仅适用于 reCaptcha V3)
- theme - 将 CAPTCHA 主题设置为浅色/深色(仅适用于 reCaptcha V2 和 hCaptcha)
- script_nonce_csp - 设置通过 CAPTCHA 小部件注入的所有脚本的 nonce
完整配置说明
完整配置现在看起来像这样
sy_captcha:
enabled: true
recaptcha_v2:
site_key: null
secret_key: null
api_host: 'www.google.com'
recaptcha_v3:
site_key: null
secret_key: null
api_host: 'www.google.com'
score_threshold: 0.5
hcaptcha:
site_key: null
secret_key: null
api_host: 'js.hcaptcha.com'
invisible: false
如您所见,有一些可配置的选项和它们的默认值。让我们稍微分解一下脚本,请注意,某些选项仅适用于 hCaptcha,某些仅适用于 reCaptcha,等等。
- enabled - 定义是否启用 CAPTCHA 验证(例如,在开发时禁用整个页面的验证)
- site_key - 这是您通过 reCaptcha 或 hCaptcha 控制台获得的值,它代表您网站的公钥
- secret_key - 这是您通过 reCaptcha 或 hCaptcha 控制台获得的值,它代表您的网站密钥,用于验证响应
- score_threshold - reCaptcha V3 通过响应发送用户分数,将 score_threshold 设置为小于 0.5 将使机器人(但不仅是机器人)更难通过此 CAPTCHA
- api_host - 可以用于启用全球 CAPTCHA,您无法访问 www.google.com(在中国),因此他们的 CAPTCHA 也无法在那里工作,因此您需要将其设置为 www.recaptcha.net)
将 .ENV 值包含到配置中
这只是一个小贴士,你可以在你的Symfony配置中包含.ENV值。你只需在配置中通过%env(变量)%
标签来引用它。
sy_captcha:
enabled: '%env(SYCAPTCHA_ENABLED)%'
待办事项
未来计划的小列表
- Cloudflare IP解析,(实现解析接口)
- 翻译
- 自定义样式(指.css样式)