做工具站时,若把第三方查询(备案、同 IP 反查等)写成一个可直接访问的 PHP 地址,很容易被脚本或爬虫批量请求;API 按次计费时损失很明显。
一、核心思路
- 关闭裸接口:例如原
/公开目录/旧查询.php仅返回 403,不再向第三方发请求。 - 只走 WordPress:用
admin-ajax.php注册自定义action,服务端再wp_remote_*调第三方。 - 护栏:
nonce、主题人机验证、按 IP 限流。
二、三个插件文件(名称请自定)
仅作结构说明,实际文件名、目录你可自己定,例如:
must-use-plugins/01-captcha-shared.php(数字前缀仅为加载顺序):只提供my_tools_verify_captcha( $captcha, $post )这类函数,与主题人机类型一致;不写具体业务。must-use-plugins/my-query-foo.php:业务 A 的wp_ajax_*、nonce、限流、人机、远程 API、返回格式。must-use-plugins/my-query-bar.php:业务 B,同上,另一套 action 与逻辑。
两个业务文件内使用 require_once __DIR__ . '/01-captcha-shared.php';(路径按你实际文件名修改)。
三、关闭旧裸接口(示例)
<?php
header('Content-Type: application/json; charset=UTF-8');
http_response_code(403);
echo json_encode(
array('error' => '此接口已停用,请使用站内工具页面。'),
JSON_UNESCAPED_UNICODE
);
exit;
四、引入共享校验并调用
此内容仅对已评论用户可见,请先评论后查看。
五、注册 AJAX(action 名请自定)
此内容仅对已评论用户可见,请先评论后查看。
六、页脚输出人机类型(变量名请自定)
add_action('wp_footer', static function () {
if (!is_singular()) {
return;
}
$type = '';
if (function_exists('io_get_option')) {
$t = io_get_option('captcha_type', 'null');
if ($t !== 'null' && $t !== '') {
$type = $t;
}
}
$type = apply_filters('my_foo_captcha_type', $type);
echo '<script>window.MY_FOO_CAPTCHA_TYPE=' . wp_json_encode($type) . ';</script>';
}, 1);
七、主题模板片段(路径与 ID 请自定)
工具页面放在主题下任意 include 的模板即可,例如 主题目录/tools/某工具.php,不必与下文同名。
<?php wp_nonce_field('my_foo_action', 'my_foo_nonce', false, true); ?>
<?php
if (function_exists('get_captcha_input_html')) {
$html = get_captcha_input_html('my_foo_captcha');
if (is_string($html) && $html !== '') {
echo $html;
}
}
?>
jQuery(function ($) {
var $btn = $('[data-action="my_query_foo"]');
var data = $('#my-foo-form').serializeObject();
data.captcha_type = window.MY_FOO_CAPTCHA_TYPE || '';
captcha_ajax($btn, data, function (n) {
if (!n.success) {
layer.msg((n.data && n.data.msg) ? n.data.msg : '失败');
return;
}
});
});
八、密钥常量名请自定
define('MY_THIRD_PARTY_API_KEY', '你的密钥');
九、请求顺序与预期
- 打开页面 → 加载人机脚本与表单项。
- 完成人机 → POST:nonce、captcha、业务参数。
- 服务端:nonce → 限流 →
my_tools_verify_captcha→ 远程 API。
可挡住大量直接扫 URL、简单脚本;专业打码与多 IP 需额外手段(WAF、登录查询等)。
十、扩展与 mu-plugins 说明
共享校验文件让新工具只需复用「nonce + 限流 + 校验 + 远程请求」。mu-plugins 自动加载、主题更新不覆盖;也可改为普通插件或子主题 functions.php。
© 原创声明:本文由 四六啦工具 于 1 年 前发表在 代码笔记 分类目录中,最后更新于2026年4月8日,转载请注明本文永久链接:https://www.46.la/gongjuzhan-fangshua-jiekou-jiaocheng

不错的文章