首页 > 系统相关 >关于nginx HTTP安全响应问题

关于nginx HTTP安全响应问题

时间:2024-07-05 09:41:49浏览次数:15  
标签:src HTTP 请求 响应 nginx Policy Options 加载

目录

一、背景

二、http基本安全配置

2.1 host头攻击漏洞

2.2 http method 请求方式攻击漏洞

2.3 点劫持漏洞(X-Frame-Options)

2.4 X-Download-Options响应头缺失

2.5 Content-Security-Policy响应头缺失

2.6 Strict-Transport-Security响应头缺失

2.7 X-Permitted-Cross-Domain-Policies响应头缺失

2.8 Referrer-Policy响应头缺失

2.9 X-XSS-Protection响应头缺失

2.10 X-Content-Type-Options响应头缺失

2.11 会话cookie中缺少HttpOnly属性

一、背景
随着开发技术的发展及完善,一些网站系统会经常遭到各类XSS攻击、点劫持(ClickJacking、frame恶意引用等),从而造成重要信息的泄露以及服务器安全问题

二、http基本安全配置
2.1 host头攻击漏洞
该问题检测点在于 检测应用是否在请求目标站点时返回的URL是直接将Host头拼接在URI前

该漏洞的防御主要是限制IP地址,

配置示例

通过指定一个SERVER_NAME名单,只有这符合条件的允许通过,不符合条件的返回403状态码

server {
        listen 7200;
        server_name 127.0.0.1 192.168.10.188;
        if ($http_Host !~* ^192.168.10.188|127.0.0.1$)
        {
            return 403;
        }                
    }
2.2 http method 请求方式攻击漏洞

一般api接口配置,会要求使用某些指定的请求方式,比如post、get

配置如下示例

即仅仅让GET、POST类型请求通过,其余的请求方式返回403状态码

if ($request_method !~* GET|POST) {
            return 403;
  }

2.3 点劫持漏洞(X-Frame-Options)
X-Frame-Options HTTP 响应头是微软提出来的一个HTTP响应头,主要用来给浏览器指示允许一个页面可否在 ,
或者 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (ClickJacking)
的攻击

点劫持概念:点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者利用透明的、不可见的iframe,覆盖在一个网页上,此时用户在不知情的情况下点击了这个透明的iframe页面。通过调整iframe页面的css样式,可以使用户恰好点击在iframe页面的一些功能性按钮上。

X-Frame-Options配置值释义

DENY:不能被嵌入到任何iframe或者frame中。
SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中。
ALLOW-FROM url:只能被嵌入到指定域名的框架中。
配置示例

add_header X-Frame-Options SAMEORIGIN;
#add_header X-Frame-Options:ALLOW-FROM https://tongji.baidu.com;
#add_header X-Frame-Options DENY;

 

2.4 X-Download-Options响应头缺失

web浏览器在响应头中缺少 X-Download-Options,这将导致浏览器提供的安全特性失效,更容易遭受 Web 前端黑客攻击的影响。

配置示例

add_header X-Download-Options "noopen";

 

2.5 Content-Security-Policy响应头缺失
HTTP 响应头Content-Security-
Policy允许站点管理者控制用户代理能够为指定的页面加载哪些资源。除了少数例外情况,设置的政策主要涉及指定服务器的源和脚本结束点。
Content-Security-Policy响应头的缺失使得目标URL更易遭受跨站脚本攻击。

配置示例

add_header Content-Security-Policy "script-src * 'unsafe-inline' 'unsafe-eval'";

 

指令值示例

指令 指令值示例 说明
default-src ‘self’ cnd.a.com 定义针对所有类型(js、image、css、web font,ajax
请求,iframe,多媒体等)资源的默认加载策略,某类型资源如果没有单独定义策略,就使用默认的
script-src ‘self’ js.a.com 定义针对 JavaScript 的加载策略
style-src ‘self’ css.a.com 定义针对样式的加载策略
img-src ‘self’ img.a.com 定义针对图片的加载策略
connect-src ‘self’ 针对 Ajax、WebSocket 等请求的加载策略。不允许的情况下,浏览器会模拟一个状态为 400 的响应
font-src font.a.com 针对 WebFont 的加载策略
object-src ‘self’ 针对 、 或 等标签引入的 flash 等插件的加载策略
media-src media.a.com 针对 或 等标签引入的 HTML 多媒体的加载策略
frame-src ‘self’ 针对 frame 的加载策略
sandbox allow-forms 对请求的资源启用 sandbox(类似于 iframe 的 sandbox 属性)
report-uri /report-uri 告诉浏览器如果请求的资源不被策略允许时,往哪个地址提交日志信息。
特别的:如果想让浏览器只汇报日志,不阻止任何内容,可以改用 Content-Security-Policy-Report-Only 头。

 

指令值内容组成

指令 指令值示例 说明
img-src 允许任何内容
‘none’ img-src ‘none’ 不允许任何内容略
‘self’ img-src ‘self’ 允许来自相同来源的内容(相同的协议、域名和端口)
data: img-src data: 允许 data: 协议(如 base64 编码的图片)
www.a.com img-src img.a.com 允许加载指定域名的资源
.a.com img-src .a.com 允许加载 a.com 任何子域的资源
https://img.com img-src
https://img.com 允许加载 img.com 的 https 资源(协议需匹配)
https: img-src https: 允许加载 https 资源
‘unsafe-inline’ script-src ‘unsafe-inline’ 允许加载 inline 资源(例如常见的 style
属性,onclick,inline js 和 inline css 等等)
‘unsafe-eval’ cript-src ‘unsafe-eval’ 允许加载动态 js 代码,例如 eval()

 

2.6 Strict-Transport-Security响应头缺失
Web 服务器对于 HTTP 请求的响应头中缺少 Strict-Transport-Security,这将导致浏览器提供的安全特性失效。 当 Web
服务器的 HTTP 头中包含 Strict-Transport-Security 头时,浏览器将持续使用 HTTPS 来访问 Web
站点,可以用来对抗协议降级攻击和 Cookie 劫持攻击。

语法

1. strict-transport-security: max-age=<expire-time>
2. strict-transport-security: max-age=<expire-time>; includeSubDomains
3. strict-transport-security: max-age=<expire-time>; includeSubDomains; preload

释义

  • max-age=: 设置在浏览器收到这个请求后的 秒的时间内凡是访问这个域名下的请求都使用 HTTPS 请求。
  • includeSubDomains :可选,如果这个可选的参数被指定,那么说明此规则也适用于该网站的所有子域名。
  • preload: 可选,加入预加载列表

配置示例

add_header Strict-Transport-Security 'max-age=15552000';

 

2.7 X-Permitted-Cross-Domain-Policies响应头缺失
系统响应头缺少X-Permitted-Cross-Domain-Policies,将会导致浏览器的安全特性失效

配置值释义

none:不允许使用loadPolicyFile方法加载任何策略文件,包括此主策略文件。
master-only:只允许使用主策略文件[默认值]。
by-content-type:只允许使用loadPolicyFile方法加载HTTP/HTTPS协议下Content-Type 为text/x-cross-domain-policy的文件作为跨域策略文件。
by-ftp-filename:只允许使用loadPolicyFile方法加载FTP协议下文件名为 crossdomain.xml的文件作为跨域策略文件。
all:可使用loadPolicyFile方法加载目标域上的任何文件作为跨域策略文件,甚至是一 个JPG也可被加载为策略文件。
配置示例

add_header X-Permitted-Cross-Domain-Policies 'none';

 

2.8 Referrer-Policy响应头缺失
用来监管哪些访问来源信息——会在 Referer 中发送——应该被包含在生成的请求当中,增加隐私保护。

当我们点击一个连接时,会产生一个http请求去获取新页面的内容,在该请求的header中会有一个referrer用以说明该请求是从哪个页面跳转过来的。如果缺少该字段会导致浏览器的安全特性消失,使我们的系统更容易受到攻击。

语法

1. Referrer-Policy: no-referrer
2. Referrer-Policy: no-referrer-when-downgrade
3. Referrer-Policy: origin
4. Referrer-Policy: origin-when-cross-origin
5. Referrer-Policy: same-origin
6. Referrer-Policy: strict-origin
7. Referrer-Policy: strict-origin-when-cross-origin
8. Referrer-Policy: unsafe-url

 

释义

no-referrer:整个 Referer 首部会被移除。访问来源信息不随着请求一起发送。
no-referrer-when-downgrade :(默认值) 在没有指定任何策略的情况下用户代理的默认行为。在同等安全级别的情况下(HTTPS->HTTPS),引用页面的地址会被发送,但是在降级的情况下 (HTTPS->HTTP)不会被发送。
origin:在任何情况下,仅发送文件的源作为引用地址。例如 https://example.com/page.html 会将 https://example.com/ 作为引用地址。
origin-when-cross-origin:对于同源的请求,会发送完整的URL作为引用地址,但是对于非同源请求仅发送文件的源。
same-origin:对于同源的请求会发送引用地址,但是对于非同源请求则不发送引用地址信息。
strict-origin:在同等安全级别的情况下(HTTPS->HTTPS),发送文件的源作为引用地址,但是在降级的情况下(HTTPS->HTTP)不会发送 。
strict-origin-when-cross-origin:对于同源的请求,会发送完整的URL作为引用地址;对于非同源,在同等安全级别的情况下(HTTPS->HTTPS),发送文件的源作为引用地址;在降级的情况下(HTTPS->HTTP)不发送此首部。
unsafe-url:无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。 这项设置会将受 TLS 安全协议保
配置示例

add_header Referrer-Policy "no-referrer";

 

2.9 X-XSS-Protection响应头缺失
HTTP X-XSS-Protection 响应头是 Internet Explorer,Chrome 和 Safari 的一个特性,当检测到跨站脚本攻击
(XSS)时,浏览器将停止加载页面。

X-XSS-Protection响应头的缺失使得目标URL更易遭受跨站脚本攻击。

语法

1.X-XSS-Protection: 0
2.X-XSS-Protection: 1
3.X-XSS-Protection: 1; mode=block
4.X-XSS-Protection: 1; report=<reporting-uri>

 

释义

0:禁止 XSS 过滤。
1:启用 XSS 过滤(通常浏览器是默认的)。 如果检测到跨站脚本攻击,浏览器将清除页面(删除不安全的部分)。
1; mode=block:启用 XSS 过滤。 如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。
1; report= (Chromium only):启用 XSS 过滤。如果检测到跨站脚本攻击,浏览器将清除页面并使用 CSP report-uri 指令的功能发送违规报告。
配置示例

add_header X-XSS-Protection '1;mode=block';

 

2.10 X-Content-Type-Options响应头缺失
Web 服务器对于 HTTP 请求的响应头缺少 X-Content-Type-Options,这意味着此网站更易遭受跨站脚本攻击(XSS)。

X-Content-Type-Options 响应头相当于一个提示标志,被服务器用来提示客户端一定要遵循在 Content-Type 首部中对 MIME
类型 的设定,而不能对其进行修改,这就禁用了客户端的 MIME 类型嗅探行为。

X-Content-Type-Options响应头的缺失使得目标URL更易遭受跨站脚本攻击。

配置示例

add_header X-Content-Type-Options 'nosniff';

 

nosniff 只应用于以下两种情况的请求将被阻止:

请求类型是 style 但是 MIME 类型不是 text/css。
请求类型是 script 但是 MIME 类型不是 JavaScript MIME 类型。
2.11 会话cookie中缺少HttpOnly属性
会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本、Applet等)获取到用户的cookie信息,造成用户cookie信息泄露,增加攻击者的跨站脚本攻击威胁。

释义

secure属性当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。
HttpOnly属性如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。

配置示例

add_header Set-Cookie "Path=/; HttpOnly; Secure";

注: 另一种配置是在ssl.conf或default.conf中添加下面的语法:

proxy_cookie_path / “/; HTTPOnly; Secure”;

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/Karka_/article/details/139028173

 

标签:src,HTTP,请求,响应,nginx,Policy,Options,加载
From: https://www.cnblogs.com/fengjian2016/p/18285155

相关文章

  • Nginx主要应用场景(必读)
    本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,这里是根据个人使用过和了解到过总结出来的。所以还请见谅,同时欢迎留言交流。Nginx能做什么?反向代理负载均衡HTTP服务器(包含动静分离)正向代理以上......
  • HTTPS 与 JWT 认证的关系
    HTTPS(HyperTextTransferProtocolSecure)和JWT(JSONWebToken)是Web安全领域中常用的两个不同的技术,它们在一起工作以确保数据的安全传输和认证。下面是它们各自的作用及相互关系的详细说明:HTTPS定义:HTTPS是HTTP的安全版本,通过SSL/TLS(SecureSocketsLayer/Transport......
  • JWT可以用在非HTTPS通信中(也就是HTTP通信中吗)?
    虽然JWT可以在非HTTPS的HTTP通信中使用,但这样做是不安全的。以下是详细原因及建议:安全性风险数据泄露:明文传输:在HTTP中,所有数据都是明文传输的。如果使用JWT,令牌在网络中传输时可能会被中间人(如网络监听者)截获。JWT中通常包含用户信息和身份验证数据,这些信息一旦......
  • 如何将自己的网站从 HTTP 的转换为 HTTPS 的
    1.获取SSL/TLS证书首先,你需要获得一个SSL/TLS证书。你可以从以下来源之一获取证书:免费证书:Let'sEncrypt:一个免费的、自动化的证书颁发机构(CA),广泛使用且受信任。付费证书:著名的CA:如DigiCert、GlobalSign、Comodo、Symantec等提供的付费证书,通常提供更高的信任......
  • 【HTTP协议】
    [python爬虫笔记]......
  • 获取请求响应的进度百分比,两种方法
            前段时间做了loading动画,增加用户体验,不至于请求时间误认为程序卡死。后来发现当网络不好或者数据过大时,请求时间比较长,没有返回完结果之前,loading一直在加载,于是改做成百分比显示进度,让客户实时感觉到程序在运行。就像下面这样。本文用两种请求方法'Xhr'......
  • Winform中使用HttpClient实现调用http的post接口并设置传参content-type为application
    场景Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124157296上面使用HttpClient调用post接口时使用的HttpContent的格式为application/x-www-form-urlencoded对应的代码......
  • 解决 .NET Core 和 nginx 双重配置 CORS 问题
    解决.NETCore和nginx双重配置CORS问题在开发基于.NETCore的Web应用时,经常会遇到跨域资源共享(CORS)的问题。跨域请求是指浏览器从一个不同的域、协议或端口访问资源。在现代Web开发中,跨域请求非常常见,但为了安全,浏览器会阻止这些请求,除非服务器明确允许。最近在配置......
  • HTTP协议
    URL是什么呢?HTTP协议GET、POST、PUT以及DELETE代表什么含义呢?HTTP:请求头HTTP请求-请求体HTTP响应-状态行HTTP响应-响应头HTTP响应-响应体HTTP响应-常见响应状态码......
  • HttpServletRequest和ServletRequest
    ServletRequest:这是JavaServletAPI中的一个基础接口,位于javax.servlet包中。它定义了处理客户端请求的基本方法。HttpServletRequest:这个接口继承自ServletRequest接口,并且添加了与HTTP协议相关的方法。它位于javax.servlet.http包中,用于封装客户端(如Web浏览器)通过HTTP协议发......