Nginx 处理 500 内部服务器错误安全问题

我正在尝试修复一个安全漏洞,即 500 内部服务器错误泄漏文件位置

我的问题类似于( https://cdn-images-1.medium.com/max/1600/1*2DAwIEJhgLQd82t5WTgydA.png)

( https://medium.com/volosoft/running-penetration-tests-for-your-website-as-a-simple-developer-with-owasp-zap-493d6a7e182b)

我尝试了

proxy_intercept_errors on;

error_page 500

重定向,但并没有帮助。

对此有什么帮助吗?

点赞
用户1135424
用户1135424

这是一个实现 proxy_intercept_errors on; 的基本示例:

upstream foo {
    server unix:/tmp/foo.sock;
    keepalive 60;
}

server {
    listen 8080 default_server;
    server_name _;

    location = /errors/5xx.html {
        internal;
        root /tmp;
    }

    location / {
        proxy_pass http://foo;
        proxy_http_version 1.1;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_intercept_errors on;
        error_page 500 501 502 503 504 505 404 =200 /errors/5xx.html;
    }
}

注意:

error_page 500 501 502 503 504 505 404 =200 /errors/5xx.html;

这将拦截一些 5xx 错误和 404 异常,并返回 200。

此外,请注意 /errors/5xx.html 位置使用 root /tmp;,因此您仍然需要创建文件 errors/5xx.html

$ mkdir /tmp/errors
$ echo "intercepting errors" > /tmp/errors/5xx.hml

您并不一定需要文件来回复请求,也可以使用以下内容:

location = /errors/5xx.html {
    internal;
    default_type text/plain;
    return 200 'Hello world!';
}

在您的情况下,“404 文件未找到”可以用不同的方式处理,例如:

upstream failover{
    server server2:8080;
}

server {
    listen 80;
    server_name example.com;
    root /tmp/test;

    location ~* \.(mp4)$ {
        try_files $uri @failover;
    }

    location @failover {
        proxy_pass http://failover;
    }
}

在这种情况下,如果以 .mp4 结尾的文件未找到,它将尝试另一个服务器,然后如果需要,您仍然可以在那里拦截错误。

2018-08-19 06:49:43