Server-Side Request Forgery (SSRF) Prevention
Server-Side Request Forgery (SSRF) Prevention
SSRF vulnerabilities allow attackers to make requests from the server to internal resources. Common in reverse proxy configurations:
Vulnerable configuration:
# VULNERABLE - DO NOT USE
location /proxy {
# Accepts any URL from user input
proxy_pass $arg_url;
}
Secure SSRF prevention:
# Secure proxy configuration
map $arg_target $proxy_url {
default "";
"service1" "http://internal-service1.local:8080";
"service2" "http://internal-service2.local:8080";
}
server {
location /proxy {
# Validate target parameter
if ($proxy_url = "") {
return 400 "Invalid target";
}
# Additional validation
if ($arg_target !~ ^(service1|service2)$) {
return 403;
}
# Set security headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Prevent open redirect
proxy_redirect off;
# Use validated URL
proxy_pass $proxy_url$request_uri;
# Timeout settings
proxy_connect_timeout 5s;
proxy_send_timeout 10s;
proxy_read_timeout 10s;
}
}