我有一个WordPress网站是专门存放家庭相册的,开启了全站加密,即需要登陆后才可以访问。
自从套上腾讯云EdgeOne后,在 边缘加速 的加持下,相册的访问速度得到了飞速提升。但是昨天突然发现,在没有登陆的情况下,仍然可以打开博客中上传的静态图片,例如 www.示例域名.com/wp-content/uploads/example.jpg ,我的隐私照片就这样赤裸裸地公示在互联网上,被各种爬虫“视奸”,别有用心者甚至能够通过隐私照片精准定位生活轨迹。
这个问题非常恐怖。问题肯定是出现在EdgeOne的缓存规则上,通过与Gemini对话,默认情况下,CDN 仅根据 URL 缓存,一旦图片被缓存,任何人访问该 URL 都会命中同一个文件。
打开EdgeOne的规则引擎界面,果然看到了针对WP预设的缓存规则:根据文件后缀判断缓存规则和缓存事件,同时对管理后台等路径设置为不缓存、直接访问源站。

这个默认的设置针对公开访问的WP站点没有任何问题,但是对于我这种隐私照片是不妥的。
修复的方式也非常简单,核心是要将身份验证逻辑延伸到边缘节点。根据AI的提示, WordPress 的登录 Cookie 带有随机 Hash(例如 wordpress_logged_in_xxxxxx),因此可以通过在CDN/边缘云加速中设置拦截规则,判断用户是否登陆,如果不包含上述字段,则直接返回403拒绝访问。以腾讯云EdgeOne为例,增加如下的判断-执行逻辑:

1.设置匹配条件(必须同时满足以下两项):
-
条件 A:
URL 路径包含/wp-content/uploads/ -
逻辑关系:
AND (且) -
条件 B:
请求头 (Header)中的Cookie不包含wordpress_logged_in_
2.设置执行操作:
- 选择 “拦截” 或 “自定义响应” / “修改响应状态码”。
- 将状态码设置为
403(拒绝访问) 或302(重定向到你的/wp-login.php)。
这样设置之后,它完美阻挡了搜索引擎爬虫(百度、谷歌不会带这些特殊头)、批量扫描工具,以及 99% 的普通网民。
但这个简单的方式只能防君子不能防小人,因为 HTTP 请求头(无论是 Cookie、Referer 还是 User-Agent)都是由客户端生成的。任何人只要懂一点技术,使用浏览器 F12 开发者工具、Postman,或者写几行 Python 爬虫代码,都可以随意捏造一个包含 wordpress_logged_in_ 的 Cookie,绕开CDN/边缘加速的鉴别。
所以,还需要更复杂的手段:
Token 鉴权(最安全,CDN 行业标准)
这是解决 CDN 静态资源防盗链的终极方案。它不认任何容易伪造的请求头,只认动态生成的加密签名。
原理: 你需要在 EdgeOne 控制台开启“Token 鉴权”(安全服务 -> 防盗链 -> Token 鉴权)。它会给你一个密钥。
实现:
你的 WordPress 必须安装或开发一个插件,在生成网页(或通过 API 给小程序下发数据)时,使用这个密钥对图片的 URL 进行加密签名,并附带一个过期时间。
最终小程序拿到的图片链接会变成这样:
https://示例域名.com/wp-content/uploads/a.png?sign=加密哈希值&t=过期时间戳。
- 为什么安全: 即使别人拿到了这个链接,几分钟后(过期时间一到)链接就失效了。他们无法自己伪造新的
sign,因为他们不知道你配置在云端和服务器上的密钥。- 缺点: 配置极其繁琐,需要有一定的 PHP 开发能力去修改 WordPress 的图片链接输出逻辑
写在最后,对于我这种无代码基础的“站长”,对于隐私内容、需要登陆才可以查看的内容,一定慎用CDN/边缘加速产品,一定要将身份验证或者鉴权延伸到边缘节点。