WordPress 外链跳转插件改造小结

本文记录两轮改造——安全增强样式美化

一、安全增强

1. 反滥用:来源域名白名单

中转页容易被外部站点拼 URL 滥用(?a=base64(钓鱼链接),假冒本品牌)。中转页校验 HTTP_REFERER 的 host,命中白名单放行,否则渲染「来源不被允许」错误页(不显示真实目标地址)。

匹配规则:精确域名或子域名(example.com 不会误伤 notexample.com)。

2. 协议校验

中转页 a 参数解码后,仅允许 http / httpsjavascript: 等伪协议回退默认链接。同样对 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 文件,升级后清空一次浏览器缓存即可。

五、下载地址

蓝奏云
来源:蓝奏云 | 提取码: grbj
立即下载
上一篇 WordPress 外链跳转插件改造小结