refda / captcheck
PHP Captcha 库
Requires
- catfan/medoo: ^1.4
This package is not auto-updated.
Last update: 2024-09-25 09:26:46 UTC
README
简单、轻量、自托管 CAPTCHA 服务。适用于现代浏览器(包括 IE9+)。使用 Font-Awesome 的图标选择。支持纯文本访问模式和仅键盘操作。
感谢 textcaptcha.com 为纯文本 CAPTCHA 提供数据。
如何使用
在您的表单中,放置一个带有 "captcheck_container" 类的空 div。将 captcheck.js(或 captcheck.min.js)添加到您的页面中。
<!DOCTYPE html>
<html>
<head>
<title>Captcheck Sample Form</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="captcheck.js"></script>
</head>
<body>
<form action="submit.php">
<input type="text" name="form_field" placeholder="Some random form field" />
<div class="captcheck_container">
</div>
<button type="submit">Submit Form</button>
</form>
</body>
</html>
当表单提交时,您的服务器将接收到两个额外的表单字段:captcheck_session_code 和 captcheck_selected_answer。在您的表单处理代码中,向 http(s)://captcheck-url/api.php 发送请求。传递变量 session_id 和 answer_id 与表单一起发送的值,并传递变量 action,其值为 verify。您将收到一个 JSON 响应,其中包括(其他事项)"result": true 或 "result": false。如果结果为 false,则用户未通过测试,并且还有一个带有解释的变量 msg。
示例 URL:http(s)://captcheck-url/api.php?action=verify&session_id=<captcheck_session_code>&answer_id=<captcheck_selected_answer>
示例响应:{"session":"some_session_id","result":true} {"session":"some_session_id","result":false,"msg":"Answer incorrect."}
###内容安全策略和非ce
将 data-stylenonce="nonce_here" 添加到 .captcheck_container div 中。如果您在一个页面上有多个 CAPTCHA,则只需指定其中一个 nonce。
安装
- 运行 composer install。
- 将 settings.template.php 复制到 settings.php 并插入您的设置。
- 安装数据库。
- 使用正确的 api_url 修改 captcheck.js。
- 按照“如何使用”部分和 test.html、test.php 中的示例设置进行操作。
执行流程
JS = captcheck.js, API = api.php, FORM = parent form,
SITE = form processing code, -> = some action taken on the right by the left
JS -> API: Request session ID, question, and answers (with scrambled random codes)
API -> JS: Sends info, saves session ID, correct answer, and scrambled answer codes in DB
JS -> API: Requests answer images by sending scrambled value and session ID
JS -> FORM: Adds hidden field with value=session ID, displays question and images (or text box)
[USER SUBMITS FORM]
SITE -> API: Sends session ID and answer
API -> SITE: Responds with true/false to indicate if the answer is valid, marks session as expired to prevent CAPTCHA reuse