本文记录两轮改造——安全增强与样式美化。
一、安全增强
1. 反滥用:来源域名白名单
中转页容易被外部站点拼 URL 滥用(?a=base64(钓鱼链接),假冒本品牌)。中转页校验 HTTP_REFERER 的 host,命中白名单放行,否则渲染「来源不被允许」错误页(不显示真实目标地址)。
匹配规则:精确域名或子域名(example.com 不会误伤 notexample.com)。
2. 协议校验
中转页 a 参数解码后,仅允许 http / https,javascript: 等伪协议回退默认链接。同样对 favicon / Logo / Logo 跳转地址做协议白名单。收敛为一个辅助函数 cp_link_open_safe_url($url, $default) 统一处理。
3. 后台权限与 nonce
AJAX 接口三层防护:
current_user_can('manage_options')check_ajax_referer('wp_link_open_nonce', 'nonce')- 解码后必须
is_array,否则拒绝
前后端通过 wp_localize_script 输出 wp_link_open 对象(含 set + nonce)。
4. 中转页地址留空回退
中转页地址支持留空走本站 plugins/cp-link-open/link.php、填写走独立 URL 两种场景。trim 后为空字符串 → plugins_url('link.php', __FILE__);否则用填写值。
二、样式美化
引入「模板分发」机制,把 link.php 顶部硬编码的 <style> 抽离为独立渲染函数。当前提供 4 套模板:
| key | 视觉特征 | 主色 |
|---|---|---|
default |
绿色大卡片 + 渐变按钮 | #07C160 |
csdn |
顶部 Logo + 警告 SVG + 描边按钮 | #248888 |
minimal |
无边框横向布局 | #1890ff |
dark |
暗色背景 + 紫色霓虹 | #8b5cf6 |
每套模板都包含正常页与错误页两态。模板名 sanitize 为 [a-z0-9_-],未知值 fallback 到 default,扩展新模板无需改 link.php。
模板内所有可调文字、图片、Logo 全部由后台下发的 s 参数驱动,CSS 直接内联,不依赖任何外部资源。
样式只写了简单的代码,有喜欢的样式可以自己改 link.php 文件中的样式,不会改的可以直接给 AI 让 AI 写。

三、自定义配置
后台设置页三组配置:
- 白名单设置:外链白名单
- 跳转设置:中转页地址、默认链接、来源域名白名单
- 中转页外观:模板、标题、Logo 系列、提示与按钮文字、favicon
loadset() 用 array_merge($defaults, $saved) 兼容旧版本缺失字段。配置存于 wp_options,无 schema 变更。


四、部署
- 同站部署:后台「中转页地址」留空即可
- 分离部署:
link.php复制到独立域名,务必在「来源域名白名单」填博客主域名 - 模板切换:后台选择即时生效
升级时直接覆盖两个 PHP 文件,升级后清空一次浏览器缓存即可。














