Skip to content

Commit 65293a0

Browse files
fix(community): OG 封面加 referrerPolicy no-referrer 规避微信防盗链 (#316)
微信 mmbiz.qpic.cn(以及知乎 pic* / 小红书 ci.xiaohongshu.com)对图片请求检查 Referer,非 mp.weixin.qq.com 来源直接返回"此图片来自微信公众平台未经允许不可 使用"的裂图。不发 Referer 时反而放行(微信客户端打开文章时浏览器也不发)。 改动: - LinkCard: <img> 加 referrerPolicy="no-referrer" - /admin/community: 原来的 next/image 改成 <img> + referrerPolicy (顺手规避 next/image remotePatterns 对任意外站域名的限制——Copilot CR 之前 指出过,当时用 unoptimized 绕过,现在统一切 <img> 更干净) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent cd14662 commit 65293a0

2 files changed

Lines changed: 13 additions & 8 deletions

File tree

app/admin/community/page.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
*/
1313

1414
import { useEffect, useState } from "react";
15-
import Image from "next/image";
1615
import { AdminGuard } from "@/app/admin/events/AdminGuard";
1716
import type { SharedLinkView } from "@/app/feed/types";
1817
import { sanitizeExternalUrl } from "@/lib/url-safety";
@@ -130,16 +129,18 @@ function AdminCommunityInner() {
130129
key={link.id}
131130
className="border border-[var(--foreground)]/40 p-4 flex flex-col md:flex-row gap-4"
132131
>
133-
{/* 左:OG 封面缩略图(没抓到就占位) */}
132+
{/* 左:OG 封面缩略图(没抓到就占位)。
133+
改用 <img> + referrerPolicy="no-referrer":微信/知乎/小红书
134+
图床防盗链会检查 Referer,非本站来源返回"未经允许"裂图。
135+
next/image 的 remotePatterns 限制外站域名也一并规避。 */}
134136
<div className="w-full md:w-40 aspect-[16/9] flex-shrink-0 bg-neutral-100 dark:bg-neutral-900 relative overflow-hidden">
135137
{link.ogCover ? (
136-
<Image
138+
// eslint-disable-next-line @next/next/no-img-element
139+
<img
137140
src={link.ogCover}
138141
alt={link.ogTitle ?? link.url}
139-
fill
140-
sizes="160px"
141-
className="object-cover"
142-
unoptimized
142+
referrerPolicy="no-referrer"
143+
className="absolute inset-0 w-full h-full object-cover"
143144
/>
144145
) : (
145146
<span className="absolute inset-0 flex items-center justify-center text-3xl font-bold text-neutral-400">

app/feed/components/LinkCard.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,15 @@ export function LinkCard({ link, categoryLabel, isLoggedIn }: LinkCardProps) {
4040
>
4141
{/* OG 封面 / 占位块 */}
4242
{link.ogCover && !link.ogFetchFailed ? (
43-
// next/image 全站 unoptimized:true,用 img 即可(与 events 页一致)
43+
// next/image 全站 unoptimized:true,用 img 即可(与 events 页一致)。
44+
// referrerPolicy="no-referrer":微信 mmbiz.qpic.cn 防盗链会检查 Referer,
45+
// 非 mp.weixin.qq.com 来源直接返回"未经允许使用"裂图;不发 Referer 时
46+
// 反而放行(微信客户端内打开文章浏览器也不发 Referer)。
4447
// eslint-disable-next-line @next/next/no-img-element
4548
<img
4649
src={link.ogCover}
4750
alt={link.ogTitle ?? link.host}
51+
referrerPolicy="no-referrer"
4852
className="w-full aspect-[16/9] object-cover border-b border-[var(--foreground)]"
4953
/>
5054
) : (

0 commit comments

Comments
 (0)