Files
ompweb/lib/request-security.ts

28 lines
975 B
TypeScript

function canonicalOrigin(value: string): string | null {
try {
return new URL(value).origin;
} catch {
return null;
}
}
function getRequestOrigin(request: Request): string | null {
const requestUrl = new URL(request.url);
const host = request.headers.get("host");
return host ? canonicalOrigin(`${requestUrl.protocol}//${host}`) : requestUrl.origin;
}
/** Reject browser cross-site API requests while preserving non-browser clients. */
export function isApiRequestOriginAllowed(request: Request): boolean {
const origin = request.headers.get("origin");
const fetchSite = request.headers.get("sec-fetch-site");
if (!origin) return fetchSite !== "cross-site";
const requestOrigin = getRequestOrigin(request);
return requestOrigin !== null && canonicalOrigin(origin) === requestOrigin;
}
export function shouldCheckApiRequestOrigin(request: Request): boolean {
return request.headers.has("origin") || request.headers.has("sec-fetch-site");
}