mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 22:38:26 +00:00
refactor: unify SSRF hostname/ip precheck and add policy regression
This commit is contained in:
@@ -316,6 +316,10 @@ export function isBlockedHostname(hostname: string): boolean {
|
||||
if (!normalized) {
|
||||
return false;
|
||||
}
|
||||
return isBlockedHostnameNormalized(normalized);
|
||||
}
|
||||
|
||||
function isBlockedHostnameNormalized(normalized: string): boolean {
|
||||
if (BLOCKED_HOSTNAMES.has(normalized)) {
|
||||
return true;
|
||||
}
|
||||
@@ -331,7 +335,7 @@ export function isBlockedHostnameOrIp(hostname: string): boolean {
|
||||
if (!normalized) {
|
||||
return false;
|
||||
}
|
||||
return isBlockedHostname(normalized) || isPrivateIpAddress(normalized);
|
||||
return isBlockedHostnameNormalized(normalized) || isPrivateIpAddress(normalized);
|
||||
}
|
||||
|
||||
export function createPinnedLookup(params: {
|
||||
@@ -415,14 +419,8 @@ export async function resolvePinnedHostnameWithPolicy(
|
||||
throw new SsrFBlockedError(`Blocked hostname (not in allowlist): ${hostname}`);
|
||||
}
|
||||
|
||||
if (!allowPrivateNetwork && !isExplicitAllowed) {
|
||||
if (isBlockedHostname(normalized)) {
|
||||
throw new SsrFBlockedError(`Blocked hostname: ${hostname}`);
|
||||
}
|
||||
|
||||
if (isPrivateIpAddress(normalized)) {
|
||||
throw new SsrFBlockedError("Blocked: private/internal IP address");
|
||||
}
|
||||
if (!allowPrivateNetwork && !isExplicitAllowed && isBlockedHostnameOrIp(normalized)) {
|
||||
throw new SsrFBlockedError("Blocked hostname or private/internal IP address");
|
||||
}
|
||||
|
||||
const lookupFn = params.lookupFn ?? dnsLookup;
|
||||
|
||||
Reference in New Issue
Block a user