add_header被覆盖 -配置错误

Nginx的配置文件分为Server、Location、If等一些配置块,并且存在包含关系,和编程语言比较类似。如果在外层配置的一些选项,是可以被继承到内层的。

但这里的继承也有一些特性,比如add_header,子块中配置后将会覆盖父块中的add_header添加的所有HTTP头,造成一些安全隐患。

如下列代码,整站(父块中)添加了CSP头:

server {
    ...
    add_header Content-Security-Policy "default-src 'self'";
    add_header X-Frame-Options DENY;
    
    location = /test1 {
        rewrite ^(.*)$ /xss.html break;
    }
    
    location = /test2 {
        add_header X-Content-Type-Options nosniff;
        rewrite ^(.*)$ /xss.html break;
    }
}

/test2的location中又添加了X-Content-Type-Options头,导致父块中的add_header全部失效:

构建xss

ip/test1#<img src=1 onerror=alert(1)>

原文地址:https://www.cnblogs.com/null1433/p/12725891.html