release: v1.2.4 — 修复未配置防盗链时外链图裂
GitHub Release / release (push) Canceled after 0s
Publish Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Canceled after 0s
Publish Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Canceled after 0s
Publish Docker image / merge (push) Canceled after 0s
ci / ci (22, ubuntu-latest) (push) Canceled after 0s
GitHub Release / release (push) Canceled after 0s
Publish Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Canceled after 0s
Publish Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Canceled after 0s
Publish Docker image / merge (push) Canceled after 0s
ci / ci (22, ubuntu-latest) (push) Canceled after 0s
This commit is contained in:
1 parent
20afda5869
commit
81dcc2c15e
7 files changed
+96
-7
No files matched your search
@@ -4,7 +4,8 @@ import {
|
||||
getAllowedRefererHostsRaw,
|
||||
getImageBaseUrlConfigured,
|
||||
getSiteBaseUrlConfigured,
|
||||
hostnameFromBaseUrl
|
||||
hostnameFromBaseUrl,
|
||||
isRefererConfigured
|
||||
} from './env'
|
||||
import { findImageKeyByDatePath, findImageKeyByFilename } from './image-index'
|
||||
import { validateImageKey } from './image-key'
|
||||
@@ -58,6 +59,12 @@ export function isRefererAllowed(referer: string | null, allowedHosts: Set<strin
|
||||
}
|
||||
}
|
||||
|
||||
/** 未配置防盗链白名单时不拦截;已配置时校验 Referer(缺失 Referer 仍放行) */
|
||||
export function isHotlinkBlocked(event: H3Event, referer: string | null): boolean {
|
||||
if (!isRefererConfigured(event)) return false
|
||||
return !isRefererAllowed(referer, getAllowedHosts(event))
|
||||
}
|
||||
|
||||
function parseRangeHeader(
|
||||
rangeHeader: string | undefined,
|
||||
size: number
|
||||
@@ -108,7 +115,7 @@ export function requestPathToImageKey(
|
||||
|
||||
export async function serveImageByKey(event: H3Event, key: string) {
|
||||
const referer = getHeader(event, 'referer') ?? null
|
||||
if (!isRefererAllowed(referer, getAllowedHosts(event))) {
|
||||
if (isHotlinkBlocked(event, referer)) {
|
||||
setHeader(event, 'Cache-Control', ERROR_CACHE_CONTROL)
|
||||
throw createError({
|
||||
statusCode: 403,
|
||||
|
||||
Reference in new issue
Block a user