@xapp/arachne-utils
Version:
42 lines (41 loc) • 1.58 kB
TypeScript
/*! Copyright (c) 2025, XAPP AI */
/**
* Check if an IP address (v4 or v6) is private or reserved
*
* This includes:
* - Loopback addresses (127.0.0.1, ::1)
* - Private network ranges (10.x.x.x, 192.168.x.x, 172.16-31.x.x)
* - Link-local addresses (169.254.x.x, fe80::)
* - Other reserved ranges
*
* @param ip - The IP address to check
* @returns true if the IP is private/reserved, false otherwise
*/
export declare function isPrivateIP(ip: string): boolean;
/**
* Check if a URL is safe to fetch (not vulnerable to SSRF attacks)
*
* This function blocks:
* - localhost and 127.0.0.1
* - Private IP ranges (10.x.x.x, 192.168.x.x, 172.16-31.x.x)
* - AWS metadata endpoint (169.254.169.254)
* - IPv6 local addresses (::1, fe80::, etc.)
* - Cloud provider metadata endpoints
*
* **Security Limitation**: This function only checks the URL at the time of the call.
* It does not protect against DNS rebinding attacks, where a malicious domain could
* resolve to a public IP during this check but then resolve to a private IP (e.g., 127.0.0.1)
* during the actual fetch. For high-security environments, consider implementing additional
* DNS resolution validation or using a network-level SSRF protection solution.
*
* @param url - The URL to validate
* @returns true if the URL is safe to fetch, false if it should be blocked
*
* @example
* ```typescript
* if (!isSafeURL('http://localhost/file.pdf')) {
* throw new Error('SSRF protection: Cannot fetch from localhost');
* }
* ```
*/
export declare function isSafeURL(url: string | URL): boolean;