如何在Nginx中配置安全头信息

在我的上一篇博客中,我们谈到了如何将Nginx配置为一个负载平衡器,今天我们要谈的是Nginx的六个头,用来增加安全层。HTTP严格传输安全(HSTS)内容安全政策(CSP)X-XSS-Protect

如何在Nginx中配置安全头信息

在我的上一篇博客中,我们谈到了如何将Nginx配置为一个负载平衡器,今天我们要谈的是Nginx的六个头,用来增加安全层。

  1. HTTP严格传输安全(HSTS)
  2. 内容安全政策(CSP)
  3. X-XSS-Protection
  4. X-Frame-Options
  5. X-Content-Type-Options
  6. 访问控制-允许-起源

确保每次修改后都要用这个命令重新启动Nginx

nginx -s reload

当用户手动输入一个网站域名(提供没有http:// 或 https:// 前缀的域名)或跟踪一个普通的http:// 链接时,向该网站发出的第一个请求是未加密的,使用普通的HTTP。大多数安全的网站会立即发回重定向,将用户升级到HTTPS连接,但位置良好的攻击者可以发动中间人(MITM)攻击,拦截最初的HTTP请求,并可以从那时起控制用户的会话。 HSTS试图通过指示浏览器只能使用HTTPS访问一个域名来处理这个潜在的漏洞。即使用户输入或跟踪一个普通的HTTP链接,浏览器也会严格将连接升级为HTTPS

在服务器块中添加下面这一行,一旦完成,保存你的修改,并重新加载Nginx。

add_header Strict-Transport-Security \"max-age=31536000; includeSubDomains\"

Nginx的配置文件应该像这样锁定。

upstream portal {      server localhost:8080;}server {  listen 80;     server_name portal.test;     add_header Strict-Transport-Security \"max-age=31536000\";     location / {               proxy_pass http://portal;     }}

CSP是一个额外的安全层,有助于检测和缓解某些类型的攻击,包括跨站脚本(XSS)和数据注入攻击。这些攻击被用于从数据窃取、网站污损到恶意软件传播等各种用途。

将下面这一行添加到服务器块中,一旦完成,保存你的修改并重新加载Nginx。

add_header Content-Security-Policy \"default-src \'self\';\" always;

Nginx的配置是这样的,在我的案例中,我把Nginx作为本地的一个负载平衡器,请看我的博客 如何配置Nginx作为一个负载平衡器

upstream portal {      server localhost:8080;}server {      listen 80;      server_name portal.test;      add_header Content-Security-Policy \"default-src \'self\';\" always;     location / {               proxy_pass http://portal;     }}

X-XSS也被称为跨站脚本头,用于防御跨站脚本攻击。XSS过滤器在现代网络浏览器(如Chrome、IE和Safari)中默认启用。这个标头在检测到反射的跨站脚本(XSS)攻击时,会阻止页面加载。

你可以根据具体需要,使用三个选项来实现XSS保护。

  1. X-XSS-Protection: 0: 这将完全禁用该过滤器。
  2. X-XSS-Protection: 1: 这将启用过滤器,但只对潜在的恶意脚本进行消毒。
  3. X-XSS-Protection: 1; mode=block: 这将启用过滤器并完全阻止该页面。

要在Nginx网站服务器中启用X-XSS-Protection头,请在配置文件中添加以下一行,完成后,保存修改并重新加载Nginx。

add_header X-XSS-Protection \"1; mode=block\";

Nginx的配置看起来像这样。

upstream portal {      server localhost:8080;}server {      listen 80;      server_name portal.test;      add_header X-XSS-Protection \"1; mode=block\";      location / {                proxy_pass http://portal;      }}

要验证这一点,请使用curl -I,以便看到所有的请求头信息

如何在Nginx中配置安全头信息

X-Frame-Options标头用于通过禁用网站上的iframe来保护你的网站免受点击劫持攻击。目前,它被所有主要的网络浏览器所支持。通过这个头,你告诉浏览器不要将你的网页嵌入框架/iframe中。

有三种方法来配置X-Frame-Options。

  1. DENY: 这将完全禁用iframe功能。
  2. SAMEORIGIN:iframe只能由同源的人使用。
  3. ALLOW-FROM。这将允许网页只从特定的URL放入iframes。

要在Nginx网站服务器中启用X-Frame-Options头,请在配置文件中添加以下一行,完成后,保存修改并重新加载Nginx。

add_header X-Frame-Options \"DENY\";

Nginx的配置看起来像这样。

upstream portal {      server localhost:9004;}server {     listen 80;     server_name portal.test;     add_header X-Frame-Options \"DENY\";     location / {               proxy_pass http://portal;     }}

为了验证页眉是否工作,我创建了一个带有iframe标签的index.html,加载我的域名http://portal.test。

                   medium  omarelfarsaoui                      

然后在浏览器中打开index.html文件,并检查DevTools。

如何在Nginx中配置安全头信息

如果响应指定了不正确的内容类型,那么浏览器可能会以意外的方式处理该响应。如果内容类型被指定为可呈现的基于文本的格式,那么浏览器通常会试图将响应解释为该格式,而不管响应的实际内容如何。此外,由于特定浏览器的怪癖,其他一些指定的内容类型有时可能被解释为HTML。这种行为可能会导致其他 \"安全 \"的内容,如图像被解释为HTML,从而在某些情况下实现跨站脚本攻击。

要在Nginx网站服务器中启用X-Content-Type-Options头,请在配置文件中添加以下一行,完成后,保存修改并重新加载Nginx。

add_header X-Content-Type-Options \"nosniff\"

Nginx的配置看起来像这样。

upstream portal {      server localhost:9004;}server {  listen 80;     server_name portal.test;     add_header X-Content-Type-Options \"nosniff\"     location / {               proxy_pass http://portal;     }}

跨源资源共享(CORS)是一种基于HTTP头的机制,它允许服务器指出除其自身以外的任何源(域、方案或端口),浏览器应允许从这些源加载资源。CORS还依赖于一种机制,浏览器通过该机制向托管跨源资源的服务器发出 \"预检 \"请求,以检查该服务器是否允许实际请求。在该预检中,浏览器会发送头信息,表明实际请求中会使用的HTTP方法和头信息。

要在Nginx网络服务器中启用CORS头,请在配置文件中添加以下一行,完成后,保存修改并重新加载Nginx。

add_header \'Access-Control-Allow-Origin\' \'https://foo.example\' always;add_header \'Access-Control-Allow-Methods\' \'GET, POST, OPTIONS\' always;add_header \'Access-Control-Allow-Headers\' \'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range\' always;

Nginx的配置看起来像这样。

upstream portal {      server localhost:9004;}server {  listen 80;     server_name portal.test;     add_header \'Access-Control-Allow-Origin\' \'https://foo.example\' always;  add_header \'Access-Control-Allow-Methods\' \'GET, POST, OPTIONS\' always;  add_header \'Access-Control-Allow-Headers\' \'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range\' always;  location / {            proxy_pass http://portal;  }}

让我们用我的朋友curl命令来验证一下

如何在Nginx中配置安全头信息

本文来自于头条号作者:吉祥庄钢铁侠,本站旨在传播优质文章,无商业用途。

本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
投稿

用PowerShell释放Kubectl快捷键的潜力

2023-2-19 17:43:59

投稿

代理和反向代理有什么区别?为什么我们需要它?

2023-2-19 17:44:02

搜索