网站安全加固:优化 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)

相关推荐
Dxy12393102161 小时前
413 Request Entity Too Large 原因与解决方案
nginx
darkb1rd2 小时前
四、PHP文件包含漏洞深度解析
网络·安全·php
哆啦code梦2 小时前
2024 OWASP十大安全威胁解析
安全·系统安全·owasp top 10
CYpdpjRnUE2 小时前
光储一体机仿真模型搭建之旅
nginx
网络安全研究所4 小时前
AI安全提示词注入攻击如何操控你的智能助手?
人工智能·安全
海心焱4 小时前
安全之盾:深度解析 MCP 如何缝合企业级 SSO 身份验证体系,构建可信 AI 数据通道
人工智能·安全
程序员哈基耄6 小时前
纯客户端隐私工具集:在浏览器中守护你的数字安全
安全
darkb1rd8 小时前
五、PHP类型转换与类型安全
android·安全·php
中科三方9 小时前
域名转移详细指南:流程、材料、注意事项和常见问题全解析
网络·安全
Volunteer Technology11 小时前
FastDFS+Nginx
运维·nginx