网站安全加固:优化 Nginx 安全头配置

在现代 Web 开发中,确保网站的安全性至关重要。Nginx 提供了多种安全头来增强网站的安全性。本文将介绍如何配置关键的安全头来提高网站的安全性。

1. HTTP 301 重定向到 HTTPS

为了确保所有流量都通过 HTTPS 传输,我们需要将 HTTP 请求重定向到 HTTPS。如果你的站点不是 https,则可以忽略该配置。

bash 复制代码
server {
    listen 80;
    server_name example.com;

    # 将所有 HTTP 请求永久重定向到 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    # SSL 配置
    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/privatekey.pem;

    # 其他配置...
}

2. 配置响应头进行安全加固

下面是配置一些响应安全头,提高网站安全性的一个 Nginx 配置示例:

bash 复制代码
server {
    # listen、server 等前置配置...

    # 设置默认response的安全头(http和https站点通用)
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Frame-Options SAMEORIGIN;
    add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self' data:; connect-src 'self'; frame-ancestors 'self'; object-src 'none';";
    # 下面两个header用于https站点
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
    add_header Referrer-Policy "no-referrer-when-downgrade";

    location / {
        root /var/www/html;
        index index.html index.htm;
    }

    # 其他配置...
}

2.1. Strict-Transport-Security (HSTS)

Strict-Transport-Security 头用于强制浏览器仅通过 HTTPS 协议与服务器通信,即使用户输入的是 HTTP URL。

bash 复制代码
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
  • max-age=31536000: 浏览器在 31536000 秒(即一年)内记住该域名应该只通过 HTTPS 访问。
  • includeSubDomains: 该 HSTS 策略不仅适用于主域名,还适用于所有子域名。

2.2. Referrer-Policy

Referrer-Policy 头用于控制浏览器如何发送 Referer 头信息。

bash 复制代码
add_header Referrer-Policy "no-referrer-when-downgrade";
  • no-referrer-when-downgrade : 在请求降级时(例如从 HTTPS 到 HTTP),不会发送 Referer 头。但在同源或更高安全级别的请求中,会发送完整的 Referer 头。

2.3. X-Content-Type-Options

X-Content-Type-Options 头用于防止浏览器对响应内容进行 MIME 类型嗅探。

bash 复制代码
add_header X-Content-Type-Options nosniff;
  • nosniff: 强制浏览器按照 Content-Type 头指定的 MIME 类型来解析内容,而不进行猜测。

2.4. X-XSS-Protection

X-XSS-Protection 头用于启用浏览器的跨站脚本(XSS)过滤功能。

bash 复制代码
add_header X-XSS-Protection "1; mode=block";
  • 1; mode=block: 启用 XSS 过滤器,并在检测到潜在的 XSS 攻击时阻止页面加载。

2.5. X-Frame-Options

X-Frame-Options 头用于防止点击劫持攻击,通过限制页面是否可以被嵌入到其他页面的 <frame><iframe><object> 中。

bash 复制代码
add_header X-Frame-Options SAMEORIGIN;
  • SAMEORIGIN: 只允许页面在同一域名下被嵌入。

2.6. Content-Security-Policy (CSP)

Content-Security-Policy 头用于防止跨站脚本攻击(XSS)和其他代码注入攻击。

bash 复制代码
add_header Content-Security-Policy "default-src 'self' data:; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; frame-ancestors 'self'; object-src 'none';";

示例中给出的是一些常用的 CSP 指令,实际上还有更多的指令选项,具体请自行查阅。当然也可以在浏览器 Console 中查看报错内容,并添加相应的 CSP 指令。

  • default-src 'self': 允许从同一来源加载所有资源。
  • script-src 'self': 允许从同一来源加载脚本。
  • style-src 'self': 允许从同一来源加载样式表。
  • img-src 'self' data:: 允许从同一来源加载图像,并允许使用 Data URLs。
  • font-src 'self' data:: 允许从同一来源加载字体,并允许使用 Data URLs。
  • connect-src 'self': 允许从同一来源发起连接。
  • frame-ancestors 'self': 允许仅在同源页面中嵌入当前页面。
  • object-src 'none': 禁止加载任何对象。
  • 其他更多......

default-src 是一个通用设置,用于为所有未显式指定源的指令提供默认的来源策略。例如你确定所有的资源都是 'self' data:,那么可省略其他配置简化设置为 Content-Security-Policy: default-src 'self' data:;

下面示例是添加例外站点,以 "允许从 https://trusted.cdn.com 加载脚本" 为示例配置如下:

bash 复制代码
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self'; img-src 'self' data:; connect-src 'self'; frame-ancestors 'self'; object-src 'none';";

分号分隔了多种不同类型加载限制,每种类型都可以单独配置例外的站点,均可以配置多个例外站点。

总结

通过配置这些安全头,您可以显著提高网站的安全性。

其中,以下四个头适用于 HTTP 和 HTTPS 站点:

  • X-Content-Type-Options
  • X-XSS-Protection
  • X-Frame-Options
  • Content-Security-Policy

以下两个头特定于 HTTPS 站点:

  • Strict-Transport-Security
  • Referrer-Policy

(END)

相关推荐
萤丰信息3 小时前
数智重构生态:智慧园区引领城市高质量发展新范式
java·大数据·人工智能·安全·智慧城市
网安INF3 小时前
典型网络攻击分析:ARP欺骗与TCP劫持
网络·网络协议·tcp/ip·安全·网络安全
一RTOS一4 小时前
我国工业通信自主化突破催生“亿级”市场,筑牢新型工业化安全与发展基石
安全·鸿道操作系统·鸿道实时操作系统·国产嵌入式操作系统选型
爱编程的小吴4 小时前
华为云安全配置检查清单
安全·华为云
微爱帮监所写信寄信5 小时前
微爱帮监狱寄信写信小程序工单系统技术方案:智能投诉处理与问题解决平台
人工智能·网络协议·安全·小程序·内容审核·监狱寄信
谈思汽车6 小时前
车企如何拿到 ISO/PAS 8800 汽车AI安全流程认证!
人工智能·安全·ai·汽车·智能汽车
深盾安全6 小时前
Docker常用命令速查手册
安全
WZGL12306 小时前
从个体需求到整体守护,科技助力老人安全安心
大数据·人工智能·科技·安全·智能家居