fix: reject unsafe TechLog network paths

This commit is contained in:
DongHyeonka
2026-08-15 19:00:10 +09:00
parent 16753f53af
commit 8342fb14dc
2 changed files with 47 additions and 1 deletions
@@ -185,9 +185,30 @@ function assertNever(value: never): never {
throw new Error(`Unsupported content node: ${JSON.stringify(value)}`);
}
const trustedRelativeLinkOrigin = "https://techlog.invalid";
function hasAsciiControlCharacter(value: string): boolean {
return Array.from(value).some((character) => {
const codePoint = character.codePointAt(0) ?? 0;
return codePoint <= 0x1f || codePoint === 0x7f;
});
}
function isSafeLink(href: string): boolean {
if (href.includes("\\") || hasAsciiControlCharacter(href)) {
return false;
}
if (href.startsWith("#")) return true;
if (href.startsWith("/")) return !href.startsWith("//");
if (href.startsWith("/")) {
try {
return (
new URL(href, `${trustedRelativeLinkOrigin}/`).origin ===
trustedRelativeLinkOrigin
);
} catch {
return false;
}
}
try {
const url = new URL(href);