目录
一、背景
二、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响应头缺失
随着开发技术的发展及完善,一些网站系统会经常遭到各类XSS攻击、点劫持(ClickJacking、frame恶意引用等),从而造成重要信息的泄露以及服务器安全问题
该问题检测点在于 检测应用是否在请求目标站点时返回的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; } }
一般api接口配置,会要求使用某些指定的请求方式,比如post、get
配置如下示例
即仅仅让GET、POST类型请求通过,其余的请求方式返回403状态码
if ($request_method !~* GET|POST) { return 403; }
X-Frame-Options HTTP 响应头是微软提出来的一个HTTP响应头,主要用来给浏览器指示允许一个页面可否在 ,
点劫持概念:点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者利用透明的、不可见的iframe,覆盖在一个网页上,此时用户在不知情的情况下点击了这个透明的iframe页面。通过调整iframe页面的css样式,可以使用户恰好点击在iframe页面的一些功能性按钮上。
X-Frame-Options配置值释义
配置示例
add_header X-Frame-Options SAMEORIGIN; #add_header X-Frame-Options:ALLOW-FROM https://tongji.baidu.com; #add_header X-Frame-Options DENY;
web浏览器在响应头中缺少 X-Download-Options,这将导致浏览器提供的安全特性失效,更容易遭受 Web 前端黑客攻击的影响。
配置示例
add_header X-Download-Options "noopen";
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' | 针对 |
media-src | media.a.com | 针对 或 |
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() |
Web 服务器对于 HTTP 请求的响应头中缺少 Strict-Transport-Security,这将导致浏览器提供的安全特性失效。 当 Web 服务器的 HTTP 头中包含 Strict-Transport-Security 头时,浏览器将持续使用 HTTPS 来访问 Web 站点,可以用来对抗协议降级攻击和 Cookie 劫持攻击。
语法
1. strict-transport-security: max-age=2. strict-transport-security: max-age= ; includeSubDomains 3. strict-transport-security: max-age= ; includeSubDomains; preload
释义
配置示例
add_header Strict-Transport-Security 'max-age=15552000';
系统响应头缺少X-Permitted-Cross-Domain-Policies,将会导致浏览器的安全特性失效
配置值释义
配置示例
add_header X-Permitted-Cross-Domain-Policies 'none';
用来监管哪些访问来源信息——会在 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
释义
配置示例
add_header Referrer-Policy "no-referrer";
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=
释义
配置示例
add_header X-XSS-Protection '1;mode=block';
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 只应用于以下两种情况的请求将被阻止:
会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本、Applet等)获取到用户的cookie信息,造成用户cookie信息泄露,增加攻击者的跨站脚本攻击威胁。
释义
配置示例
add_header Set-Cookie "Path=/; HttpOnly; Secure";
注: 另一种配置是在ssl.conf或default.conf中添加下面的语法:
proxy_cookie_path / "/; HTTPOnly; Secure";