前言
作者曾经写过一篇博客:Spring Security 与 HTTP 安全 header。介绍了和安全相关的HTTP响应头,以及它们在Spring Security中如何配置。尽管Spring Security已经为我们减少了很多配置工作量,然而本人在实际开发中发现直接在web应用中配置这些响应头仍然不够灵活。因安全要求,需要大量web应用批量添加安全响应头。逐个修改Spring Security的配置十分繁琐,对于没有用到Spring Security的web项目,配置起来还需要查询不同web框架的配置方式,效率十分低下。
这里推荐使用Nginx。Nginx是一款功能强大的HTTP和反向代理服务器。它自然支持HTTP响应头的配置。我们将所有的安全配置从web应用迁移到Nginx上。这样可以将配置统一,再也不用去反复研究各个web项目使用的框架,针对性的修改配置了。
关于安全方面加固的内容,本博客不定期更新。
HTTP header配置
我们通过Nginx的add_header
指令添加响应头。指令用法如下所示:
server {
location / {
proxy_pass http://...
add_header 'Referrer-Policy' 'no-referer';
add_header X-Download-Options 'noopen';
add_header X-Permitted-Cross-Domain-Policies 'none';
}
}
常见的安全响应头的配置指令如下:
add_header Content-Security-Policy "default-src 'self' xxx.xxx.com(允许的地址);
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header 'Referrer-Policy' 'origin';
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
各位读者可以按照实际的需求酌情添加。每个响应头的作用和参数解释请参考Spring Security 与 HTTP 安全 header。
SSL配置
在禁止使用HTTP的场合,我们可以通过Nginx开启HTTPS。SSL配置并不复杂,如下所示:
server {
ssl on;
ssl_certificate /path/to/cer.crt;
ssl_certificate_key /path/to/keyFile.key;
}
上面配置中,分别通过ssl_certificate
和ssl_certificate_key
指定SSL证书和密钥。
统一错误页面配置
开发web应用的时候将错误堆栈返回能够方便开发者定位问题。但是生产环境在页面中暴露错误堆栈式致命的。恶意用户通过分析堆栈能够得知很多web服务后台的内容,例如采用的依赖,框架,它们的版本号,使用什么数据库和版本。外界获取了这些信息,对我们web服务安全性造成很大的隐患。无论出于安全,还是美观,我们务必要配置统一的错误页面。
Nginx配置统一错误页面的方式非常简单。我们只需指定错误代码和遇到这些错误代码时需要跳转到的URL就可以了。当然我们再为这个URL配置一个静态页面,就实现了统一错误页面。配置方法如下所示:
server {
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /path/to/50x.html;
}
}
网友评论