nginx + confd + etcd 实现nginx动态白名单,防止请求host篡改注入攻击

news2024/11/17 15:43:14

众所周知,浏览器发送到后台请求header中携带的host是可能被修改的,为了防止这件事情发生,就很有必要给后台设置host请求白名单了,本次将介绍nginx如何配置,以及结合confd和etcd实现动态配置。

1. http/https请求的host参数

http/https请求的请求头header部分会携带Host参数,一般默认位访问地址url的服务地址,如下图所示,但是这个host参数是很容易被篡改的,如使用post请求工具 postman 、apipost、postwoman等,所以很有必要针对Host篡改的问题做拦截。
在这里插入图片描述

2.nginx如何过滤掉被篡改的Host请求

其实配置很简单,只要在nginx的配置文件配置好host白名单,然后再配置好判断,不在白名单内的host禁止访问就好了,配置如下

# host 白名单
map $http_host $nms_white_host {
    default "";
    111.121.13.14 1;
    111.121.13.15 1;
}
# ... 其他配置省略
server {
	if ($nms_white_host = "") {
	     return 403;
	}
}

解释下,$http_host 是nginx的内置参数,值为http请求的header中的Host参数,$nms_white_host是自定义变量,代表 $http_host 与 map中参数进行匹配后的值,如果匹配到 111.121.13.14111.121.13.15 , 那么 $nms_white_host的值是1,如果没有匹配的Host值,则 $nms_white_host的值为空字符串;结合下面的if判断,即可实现不在白名单内的Host禁止访问的功能。

3. 结合confd + nginx 实现动态启用白名单,动态配置白名单列表

confd的使用介绍参考之前的博客:confd 0.20.0 监听etcd动态更新nginx配置文件
下面代码是实现方案:
首先获取通过 etcd 的key值 /whitelist赋给 自定义变量 $whitelist,如果etcd没有配置/whitelist的值,则$whitelist是空值,那么就不会走白名单过滤,也就是没有开启白名单校验。
如果开启了则会根据etcd配置的值 /whitelist 动态配置nginx,实现动态配置nginx的Host过滤白名单功能。

{{ $whitelist := getv "/whitelist" "" }}

{{ if ne $whitelist "" }}
map $http_host $nms_white_host {
    default "";
    {{ $whitelist }}
}
{{ end }}

# ... 其他配置省略
server {
	{{ if ne $whitelist "" }}
        if ($nms_white_host = "") {
              return 403;
        }
	{{ end }}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1700285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flink cdc mysql整理与总结

文章目录 一、业务中常见的需要数据同步的场景CDC是什么FlinkCDC是什么CDC原理为什么是FlinkCDC业务场景flink cdc对应flink的版本 二、模拟案例1.阿里云flink sql2.开源flink sql(单机模式)flink 安装安装mysql3.flink datastream 三、总结 提示:以下是本篇文章正文…

MFC扩展库BCGControlBar Pro v34.1新版亮点:日历和计划表等功能升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v34.1已正式发布了,这个版本包含了对Windows 10/11字体图标的支持、功能区和…

huggingface 笔记:查看GPU占用情况

0 准备部分 0.1 创建虚拟数据 import numpy as npfrom datasets import Datasetseq_len, dataset_size 512, 512 dummy_data {"input_ids": np.random.randint(100, 30000, (dataset_size, seq_len)),"labels": np.random.randint(0, 1, (dataset_size…

PHP+Lucky+Baby母婴用品网站的设计与实现75554-计算机毕业设计项目选题推荐(附源码)

摘 要 近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用。简单的流程、便捷可靠的支付方式、快捷畅通的物流快递、安全的信息保护都使得电子商务越来越赢得网民们的青睐。现…

中国低调海外巨头,实力超乎想象!

在全球化的浪潮中,中国公司正以前所未有的速度和规模走向世界。他们或许低调,但却实力非凡,在国际市场上掀起了一股不可小觑的“中国风暴”。今天,就让我们揭开那些在国外牛逼到爆炸的中国公司的神秘面纱,深度解析他们…

IP编址、进制转换、IP地址分类、变长子网掩码VLSM、无类域间路由CIDR

前言 网络层位于数据链路层与传输层之间。网络层中包含了许多协议,其中最为重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外,还必须理解IP编址以及如何合理地使用IP地址来设计网络。 IP编址 每个网段上都有两…

滤波电路应用笔记

滤波器 什么是滤波器? 滤波器是一种使某些频率或频带上的电信号通过而阻止其他信号通过的装置。 滤波电路的作用是尽可能减少脉动直流电压中的交流分量,保持其直流分量,降低输出电压的纹波系数,并使波形相对平滑。整流电路的输出…

商标注册申请名称的概率,多想名称选通过率好的!

近日给深圳客户申请的商标初审下来了,两个类别都下的初审,和当初的判断基本一致,普推知产老杨当时沟通说需要做担保申请注册也可以,后面选择了管家注册,最近大量的帮客户检索商标名称,分享下经验。 两个字基…

PC端应用订阅SDK接入攻略

本文档介绍了联想应用联运sdk接入操作指南,您可在了解文档内容后,自行接入应用联运sdk。 1. 接入前准备 1. 请先与联想商务达成合作意向。 2. 联系联想运营,提供应用和公司信息,并获取商户id、app id、key(公私钥、…

【设计模式深度剖析】【4】【结构型】【组合模式】| 以文件系统为例加深理解

👈️上一篇:适配器模式 设计模式深度剖析-专栏👈️ 目 录 组合模式定义英文原话直译如何理解? 3个角色UML类图代码示例 组合模式的优点组合模式的使用场景示例解析:文件系统 组合模式 组合模式(Composite Pattern&a…

【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档

这篇发表于2020 WWW 上的会议论文,提出一种MNS方式的负样本采样方法。众所周知,MF方法难以解决冷启动问题,于是进化出双塔模型,但是以双塔模型为基础的召回模型的好坏十分依赖负样本的选取。为了解决Batch内负样本带来的选择性偏差…

IT廉连看——UniApp——条件渲染

IT廉连看——UniApp——条件渲染 什么是条件渲染? 顾名思义,满足一定的条件他才会进行渲染。 这是我们上节事件绑定保留的代码。 一、现在我有这样一个需求: 增加一个按钮,当我点击这个按钮,这里的文本&#xff0…

ICML 2024 | 即插即用!无需训练!基于球面高斯约束引导的条件扩散模型

©PaperWeekly 原创 作者 | 杨凌霄 单位 | 上海科技大学信息学院 论文标题: Guidance with Spherical Gaussian Constraint for Conditional Diffusion 论文作者: 杨凌霄、丁枢桐、蔡逸凡、虞晶怡、汪婧雅、石野 通讯作者: 石野 论文链接…

【数据结构】二叉树-堆(上)

个人主页~ 二叉树-堆 一、树的概念及结构1、概念2、相关概念3、树的表示4、树的实际应用 二、二叉树的概念和结构1、概念2、特殊二叉树3、二叉树的性质4、二叉树的存储结构(1)顺序存储(2)链式存储 三、二叉树的顺序结构以及实现1、…

【Linux-时间管理和内核定时器】

Linux-时间管理和内核定时器 ■ 设置系统节拍率■ 高节拍率和低节拍率的优缺点:■ jiffies 系统节拍数■ get_jiffies_64 这个函数可以获取 jiffies_64 的值■ 处理绕回■ 使用 jiffies 判断超时 ■ jiffies 和 ms、 us、 ns 之间的转换函数在这里插入代码片■ 内核…

pytest:指定测试用例执行顺序

在自动化测试中,测试用例的执行顺序有时对测试结果具有重要影响。本文将介绍如何在pytest框架中使用pytest-ordering插件以及Collection hooks来控制测试用例的执行顺序。 方式1: 使用pytest-ordering插件控制执行顺序 1.1 安装pytest-ordering插件 首…

Android Studio开发之路(十三)主题影响Button颜色问题解决及button自定义样式

一、问题描述 在开发过程中发现安卓的默认主题色是紫色,并且会导致button也是紫色,有时直接在xml布局文件中直接设置button的背景色或者设置背景图片不起效果 方案一、如果是app,可以直接设置主题颜色 比如,将主题设置为白色&a…

【STM32】 独立看门狗配置方法

什么是看门狗 看门狗(watchdog)指的是一种监控系统或程序,用于定期检测和监控其他系统或程序的运行状态,并在出现问题或故障时采取相应的措施。它可以是硬件设备,也可以是软件程序。 在计算机领域中,看门狗…

Java Swing + MySQL图书借阅管理系统

系列文章目录 Java Swing MySQL 图书管理系统 Java Swing MySQL 图书借阅管理系统 文章目录 系列文章目录前言一、项目展示二、部分代码1.Book2.BookDao3.DBUtil4.BookAddInternalFrame5.Login 三、配置 前言 项目是使用Java swing开发,界面设计比较简洁、适合作…

Taipy快速打造数据驱动的Web应用

Taipy: 用Taipy,让数据洞察与应用开发无缝对接- 精选真开源,释放新价值。 概览 Taipy快速打造数据驱动的 Web 应用。这是一个基于 Python 和 Flask 的项目,结合了 React 等前端技术,为开发者提供了一个简洁、高效的开…