captcha

captcha 指令启用在 NGINX 中生成和处理 CAPTCHA 图像的功能。

语法captcha;
默认值none
上下文location
参数none

说明

captcha 指令是 NGINX Captcha Module 的一部分,该模块提供生成 CAPTCHA 图像以防止自动请求的功能。当在 location block 中启用 captcha 指令时,NGINX 会创建一个 CAPTCHA 挑战,该挑战由 captcha_charset 指令定义字符组成的随机生成字符串构成。生成的 CAPTCHA 随后会与 CSRF token 一起进行哈希处理以创建一个安全的 cookie,并发送给客户端以供验证。该机制有助于确保仅处理合法请求,为 Web 应用增加一层安全性。

在指定位置处理请求时,NGINX 首先检查请求方法;仅允许 GET 或 HEAD 请求。通过验证后,它会根据指定的长度和字符集生成一个随机字符串。如果 captcha_case 指令设置为 on,则对 CAPTCHA 输入的比较将不区分大小写。随后,NGINX 计算一个涉及 CAPTCHA 文本、密钥和 CSRF token 的 MD5 哈希,以提供额外的安全层。如果生成的哈希与客户端在 cookie 中提供的值匹配,则该 CAPTCHA 被视为有效。

配置示例

location =/captcha {
    captcha;
}
location =/login {
    set_form_input $csrf_form csrf;
    set_unescape_uri $csrf_unescape $csrf_form;
    set_form_input $captcha_form captcha;
    set_unescape_uri $captcha_unescape $captcha_form;
    set_md5 $captcha_md5 "secret${captcha_unescape}${csrf_unescape}";
    if ($captcha_md5 != $cookie_captcha) {
        # captcha invalid code
    }
}

确保 CSRF token 已正确配置,因为未正确配置可能导致 captcha 验证问题。

客户端需要启用 Cookies,以便 captcha 验证正常工作。

同一 location 中其他 directives 的配置设置重叠可能会影响 captcha 行为。

← 返回所有指令