Nginx漏洞之未授权访问和源码泄漏漏洞处理

一、漏洞描述

某次安全扫描,发现某平台存在资源:未授权访问和源码泄漏;攻击者可能获取到网站的配置文件、敏感数据存储位置和访问凭证等信息。这意味着攻击者可以获得对网站的完全或部分控制权,进而进行恶意篡改、删除或添加恶意代码,破坏网站的正常运行、导致数据丢失、影响用户访问或利用网站进行其他不法行为。

处理:该资源接口进行鉴权设置,禁止公网未授权直接访问。

二、SSO服务器

SSO(Single Sign On)是实现在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统;尤其在大型企业和政府部门等电子化系统办公场景中,一般办公系统会由多个不同的子系统构成,如果这些子系统直接暴漏,缺乏鉴权,就会出现上述的漏洞风险,那如何保证安全又不影响子系统业务交互呢?这个时候有一个SSO 单点登录就显得尤为重要了。但是注意,过多引入第三方SSO框架会让我们的异常错误可能出现:不在自己可控制的范围内的情况,可能不利于提高项目的健壮性及可持续发展。流程示意如下:
在这里插入图片描述
1)SSO建设选择

常用的13个开源免费单点登录SSO系统:

  • sa-token - 一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!
  • authelia - 是一个免费、开源、可私有化部署的单点登录(SSO)项目
  • BootstrapAdmin - 基于 RBAC 的 Net7 后台管理框架,权限管理,前后台分离,支持多站点单点登录,兼容所有主流浏览器
  • JustAuth - 如你所见,它仅仅是一个第三方授权登录的工具类库
  • MaxKey - 单点登录认证系统
  • jap - 一款开源的登录认证中间件,基于模块化设计,为所有需要登录认证的web应用提供一套标准的技术解决方案
  • eiam - 数字身份管控平台
  • CollectiveOAuth - 史上最全的整合第三方登录的开源库
  • Netnr.Login - 第三方 OAuth2 授权登录管理
  • keycloak - 是一个免费、开源身份认证和访问管理系统
  • SD.IdentitySystem - 统一身份认证/权限管理/角色管理/菜单管理/SSO/License授权
  • IdentityServer4 - 基于.NET 5+IdentityServer4+Vue+Sqlserver 的统一授权认证系统
  • cas - 是一个开源的企业级单点登录系统

2)Apereo CAS系统:

Apereo CAS是一个开源的企业级单点登录系统,是CAS项目的一部分。Apereo CAS开箱即用,并且提供多种协议支持,如:CAS(v1,v2和v3)、SAML(1.0和2.0)、OAuth(v2)、OpenID、OpenID Connect等,Apereo CAS支持使用多种身份证方法,包括:JAAS、LDAP、RDBMS、Radius、JWT等。Apereo CAS支持通过Due、YubiKey、RSA、Google Authenticator、U2F、WebAuten等进行身份验证。
在这里插入图片描述

相关资源:Github、官网、文档

1> 架构图
在这里插入图片描述
3)Keycloak

在这里插入图片描述
Keycloak是一个免费、开源身份认证和访问管理系统,支持高度可配置的单点登录(SSO)功能,旨在为现代的应用程序和服务,提供包含身份管理和访问管理功能的单点登录工具。Keycloak内置支持连接到现有的LDAP或Active Directory服务器。也可以自己实现与关系数据库中的用户数据对接。

Keycloak支持许多目前比较流行认证标准协议,如:OpenID Connect,OAuth 2.0、SAML 2.0等。它还支持多平台多种语言:Java、Python、Go、Node.js、Spring、Quarkus ,同时还有 CLI 、SDK 和 RESTful API。

相关资源:GitHUB、官网、

1> 安装

#docker方式部署,完成后,可以访问 http://localhost:8080 进行测试,用户名/密码:admin/admin
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -d quay.io/keycloak/keycloak:18.0.0 start-dev

2>配置keycloak

登陆keycloak 管理控制台,创建一个租户:在 keycloak 中,一个 realm 相当于一个租户,它允许创建独立的应用程序和用户组。master 是keycloak 中默认的 realm,master 是专用于管理 keycloak的,不建议用于自己的应用程序。要应用于自己的应用程序时,一般最好建立一个自己指定名称的 realm,在master下面单机 Add realm创建。

在这里插入图片描述
在新创建的 realm 中创建一个user:

在这里插入图片描述
保存成功后,设置初始密码,点击 Credentials,其中Temporary 处点击为 OFF,完成密码重置。

完成后,配置要单点的应用程序。Keycloak管理控制台Clients新建客户端: 用上面Keycloak 实例注册一个应用程序:

3>修改grafana配置:

编辑 /etc/grafana/grafana.ini,修改以下配置:


[server]
root_url = http://localhost:3000/
[auth.generic_oauth]
allow_sign_up = true
api_url = http://localhost:8080/realms/grafana/protocol/openid-connect/userinfo
auth_url = http://localhost:8080/realms/grafana/protocol/openid-connect/auth
client_id = grafana
client_secret = B1dllYApv88FHkkLQDqCwv2aRH5hHwoU
enabled = true
name = grafana
role_attribute_path = role
root_url = http://localhost:3000/
scopes = openid email
token_url = http://localhost:8080/realms/grafana/protocol/openid-connect/token

在 keycloak 中配置好正确的 用户名、密码 后,重新访问 grafana,就可以看到类似如下界面:

在这里插入图片描述
4)nginx密码限制访问

#安装 htpasswd 工具
yum -y install httpd-tools  #或npm install -g htpasswd
#如果报错:“error: unpacking of archive failed on file /usr/bin/xxxx: cpio: open Failed”,请检查/usr/bin目录是否设置特殊权限
chattr -i /usr/bin  #再次安装即可
which htpasswd  #/usr/bin/htpasswd
#htpasswd用法及参数
htpasswd [-cimB25dpsDv] [-C cost] [-r rounds] passwordfile username
htpasswd -b[cmB25dpsDv] [-C cost] [-r rounds] passwordfile username password

	htpasswd -n[imB25dps] [-C cost] [-r rounds] username
	htpasswd -nb[mB25dps] [-C cost] [-r rounds] username password
 -c  Create a new file.
 -n  Don't update file; display results on stdout.
 -b  Use the password from the command line rather than prompting for it.
 -i  Read password from stdin without verification (for script usage).
 -m  Force MD5 encryption of the password (default).
 -2  Force SHA-256 crypt() hash of the password (secure).
 -5  Force SHA-512 crypt() hash of the password (secure).
 -B  Force bcrypt aencryption of the password (very secure).
 -C  Set the computing time used for the bcrypt algorithm
     (higher is more secure but slower, default: 5, valid: 4 to 31).
 -r  Set the number of rounds used for the SHA-256, SHA-512 algorithms
     (higher is more secure but slower, default: 5000).
 -d  Force CRYPT encryption of the password (8 chars max, insecure).
 -s  Force SHA-1 encryption of the password (insecure).
 -p  Do not encrypt the password (plaintext, insecure).
 -D  Delete the specified user.
 -v  Verify password for the specified user.

#创建认证用户 ,会在/etx/nginx/passwd.db文件中生成用户名和加密的密码,格式类似: admin:YlmaHlkJnzhxG
htpasswd -c lip_htpasswd.db admin //输入密码,生成的数据文件建议放入web运行目录,比如nginx配置文件目录下,注意这种交互式输入密码可能会出现配置无效的情况,报错如下:
htpasswd后{"message": "invalid username or password","traceID":""}
#用一下命令重新生成,注意-d采用,因Nginx采用解密,如果不兼容,即使能看到了 Auth 提示,但当输入了正确的密码,也会收到 403或401,500,400等错误。
htpasswd -cbd lip_htpasswd.db admin password #用 crypt()函数加密,但密码不能超狗8位;或
openssl passwd -crypt "password"  

#nginx的ngx_http_auth_basic_module可以帮助我们在 http 资源没有任何保护的情况下,添加基础的认证;修改配置,增加: auth_basic 和 auth_basic_user_file 
vim /usr/local/nginx/conf/nginx.conf 
……
server { 
listen 80; 
server_name local.server.com;
#auth_basic "Please input password"; #这里是验证时的提示信息
#auth_basic_user_file /usr/local/nginx/conf/third_htpasswd.db;
location / { 
	root /data/www; #或如下
	auth_basic "Please input password"; #这里是验证时的提示信息
	auth_basic_user_file /usr/local/nginx/conf/third_htpasswd.db;
	index index.html; 
	rewrite ^/$  https://new_uri permanent;
 } 
location /public {
proxy_buffering on;
          proxy_buffer_size 4k;
          proxy_buffers 8 4M;
          proxy_busy_buffers_size 4M;
        # websocket处理
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          proxy_set_header X-Real-IP $remote_addr;
          add_header Access-Control-Allow-Origin *;
          add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
          #add_header Access-Control-Allow-Credentials true;
          proxy_set_header Authorization "Bearer grafana_API_token";
          auth_basic "Please input password"; #这里是验证时的提示信息
          auth_basic_user_file third_htpasswd.db;
          proxy_pass http://grafana_ip:3000;
         }

}
#重启nginx服务 
nginx -s reload

#grafana配置调整
sed -i "s/;allow_embedding = false/allow_embedding = true/g" /etc/grafana/grafana.ini 
cat /etc/grafana/grafana.ini  | grep allow_embedding
systemctl restart grafana-server

Grafana配置新增服务账户API:
在这里插入图片描述
在这里插入图片描述

#验证
curl -H "Authorization: Bearer eyJrIjoiRnJjVmNURW1vdnlxQkdOTExqM29DcnJJV3g4TnQ0SEwiLCJuIjoid2Vidmlld2VyIiwiaWQiOjF9" http://grafana_ip:3000/api/dashboards/home
#防火墙
firewall-cmd --permanent --zone=public --remove-port=80/tcp
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address='你的网站ip' port port="80" protocol="tcp" accept'
firewall-cmd --reload
#配置主页,安装插件yesoreyeram-boomtheme-panel
grafana-cli plugins install yesoreyeram-boomtheme-panel  #或
grafana-cli --pluginUrl https://github.com/yesoreyeram/yesoreyeram-boomtheme-panel/releases/download/v0.2.1/yesoreyeram-boomtheme-panel-0.2.1.zip plugins install yesoreyeram-boomtheme-panel
cd /usr/share/grafana/public  #grafana插件位置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面能添加外部CSS地址,地址栏输入:https://github.com/gilbN/theme.park/tree/master/CSS/themes/grafana或https://github.com/GilbN/theme.park/tree/master/css/theme-options就会看到多个CSS:

https://gilbn.github.io/theme.park/CSS/themes/grafana/hotline.css
https://gilbn.github.io/theme.park/CSS/themes/grafana/aquamarine.css
https://gilbn.github.io/theme.park/CSS/themes/grafana/organizr-dark.css
https://gilbn.github.io/theme.park/CSS/themes/grafana/organizr-dashboard.css
https://gilbn.github.io/theme.park/CSS/themes/grafana/plex.css
https://gilbn.github.io/theme.park/CSS/themes/grafana/space-gray.css

在这里插入图片描述

#优化css加载速度
wget https://gilbn.github.io/theme.park/CSS/themes/grafana/hotline.css
然后重新配置grafana的CSS,修改成本地的地址,比如:/public/css/hotline.css

在这里插入图片描述

三、SSO服务器配置

1)应用场景一

四、附录

4.1、常见文件属性回顾

属性说明
i对文件设置i属性,不允许对文件进行删除、重命名,也不能添加和修改数据。
对目录设置i属性,只能修改目录下文件中的数据,但不允许新建和删除文件。文件权限中,大写的 I 表示不可变属性,而小写的 i 表示不可变文件。不可变属性仅保护文件的特定属性,而不可变文件保护整个文件。其中,不可变文件是不可变属性的一种更严格的形式。
a对文件设置a属性,只能在文件中新增数据,但是不能删除和修改数据。
对目录设置a属性,只能在目录中新增和修改文件,但是不允许删除文件。
u对文件或目录设置u属性,在删除时,其内容会被保存,以保证后期能够恢复,一般用来防止意外删除文件或目录。
s对文件或目录设置s属性,在删除文件或目录时,会被彻底删除,不可恢复。
eLinux中绝大多数的文件都默认拥有e属性,表示该文件是使用ext文件系统进行存储的。
大写i标记文件或目录的某些属性为不可变,防止意外更改。仅当文件或目录的所属用户具有超级用户权限时,才能更改不可变属性。典型的不可变属性包括:a(存档位)c(压缩位)t(尾部锁定位)S(安全不可变位)
tt设置粘着位,一般针对权限是777的文件夹设置权限。如果文件设置了t权限则只有属主和root有删除文件的权限;777的目录设置t权限,索引用户可以在这个目录下面创建文件和删除自己创建的文件,删除其他人创建的文件权限不被允许(比如共享目录)
操作符+:为文件或目录添加属性;-:移除文件或目录已有的某些属性;=:为文件或目录设定一些属性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

交换机MSTP (多生成树防环协议)基础配置

MSTP 基础配置 在所有交换机上创建 VLAN10、20、30、40、50、60、70、80,配置 MSTP 域 hcip,并创建 两个新的实例:Instance 1、Instance 2,将 VLAN10、30、50、70 映射到 Instance 1,将 VLAN20、40、60、80 映射到 Ins…

win11下,RTMP流媒体服务器保姆级教程

本片博客将详细介绍如何搭建一个RTMP流媒体服务器,包含源码下载,编译常见问题解决方法以及流媒体测试,最后讲解了如何利用obs软件实现推流。 服务器:SRS 3.0(Simple Realtime Server,支持RTMP、HTTP-FLV、HLS、WebRTC) 推流端&…

利用甘特图实现精细化项目管控

在项目管理中,通过精细化管控,项目经理能够有效规划、监督和协调各项任务,从而最大限度控制风险,优化资源配置,并确保按时、按质、按量完成项目目标。而在众多项目管理工具中,甘特图无疑是实现精细化项目管控的利器。zz-plan 是一个非常好用的在线甘特图制作工具,一…

Go 源码之互斥锁 Mutex

文章目录 一、总结二、源码(一)Mutex(二) Lock(三)Unlock 三、常见问题有劳各位看官 点赞、关注➕收藏 ,你们的支持是我最大的动力!!!接下来会不断更新 golan…

是否有替代U盘,可安全交换的医院文件摆渡方案?

医院内部网络存储着大量的敏感医疗数据,包括患者的个人信息、病历记录、诊断结果等。网络隔离可以有效防止未经授权的访问和数据泄露,确保这些敏感信息的安全。随着法律法规的不断完善,如《网络安全法》、《个人信息保护法》等,医…

计算机网络: 点对点协议 PPP

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

提高三维模型的立面出图技术

提高三维模型的立面出图技术 摘要:立面出图是三维模型应用中常见的需求,它能够将三维模型呈现为平面立面图,用于建筑设计、室内装饰等领域。本文将介绍几种常用的立面出图技术,包括投影法、剖面法和渲染技术,并分析它们…

yolov8逐步分解(1)--默认参数超参配置文件加载

本章节将介绍yolov8算法训练过程中的第一步:加载默认训练参数以及超参的配置文件default.yaml。 Yolov8 训练的入口文件为train.py,文件结构如下图所示: 1. 执行train函数,函数默认配置参数为cfgDEFAULT_CFG &#xff0c…

前端 - 基础 表单标签 - 表单元素 input - (name Value checked maxlength )属性详解

目录 name 属性 Value 属性 Checked 属性 Maxlength 属性 场景问答 # <input> 标签 除了 type 属性外&#xff0c;还有其他常用属性 >>> name 属性 在上一节 我们遇到的 单选按钮 &#xff0c;为什么 本应该 多选一 结果成了 多选多的问题 就…

深度学习_NLP常用库报错问题解决

1、SpaCy can‘t find model ‘zh_core_web_sm‘. It doesn‘t seem to be a python package or a valid path to a data 或者 can‘t find model ‘en_core_web_sm‘. It doesn‘t seem to be a python package or a valid path to a data 安装最新的版本&#xff1a; en_…

卡通纸箱空空如也404源码

源码介绍 卡通纸箱空空如也404源码&#xff0c;喜欢的小伙伴可以下方预览看看&#xff0c;满意之后下载放到任何目录都可以使用&#xff01; 源码下载 卡通纸箱空空如也404源码

Vue2.x安装Tinymce依赖冲突解决

Vue2.x安装Tinymce依赖冲突原因 使用vue整合tinymce富文本编辑器&#xff0c;安装依赖时报错 报错的原因是下载版本与vue的版本对不上vue2.x版本应该使用如下指定版本依赖更合适 npm install --save "tinymce/tinymce-vue^3.1"额外依赖为 npm install --save &quo…

【漏洞复现】通天星CMSV6车载视频监控平台Druid弱口令漏洞

Nx01 产品简介 通天星车载视频监控平台软件拥有多种语言版本&#xff0c;应用于公交车车载视频监控、校车车载视频监控、大巴车车载视频监控、物流车载监控、油品运输车载监控等公共交通上。 Nx02 漏洞描述 通天星车载视频监控平台存在Druid弱口令漏洞&#xff0c;攻击者可以通…

【Kotlin】委托模式

1 委托模式简介 委托模式的类图结构如下。 对应的 Kotlin 代码如下。 fun main() {var baseImpl BaseImpl()var baseWrapper BaseWrapper(baseImpl)baseWrapper.myFun1() // 打印: BaseImpl, myFun1baseWrapper.myFun2() // 打印: BaseImpl, myFun2 }interface Base {fun my…

yolov5 v7.0打包exe文件,使用C++调用

cd到yolo5文件夹下 pyinstaller -p 当前路径 -i logo图标 detect.py问题汇总 运行detect.exe找不到default.yaml 这个是yolov8里的文件 1 复制权重文件到exe所在目录。 2 根据报错提示的配置文件路径&#xff0c;把default.yaml复制放到相应的路径下。&#xff08;缺少相应…

【C++入门】类和对象

目录 类的引入 类的定义 类的访问限定符及封装 访问限定符 封装 类的作用域 类的实例化 this指针 this指针的特性 两个经典问题 类的引入 在C语言的结构体中&#xff0c;只能定义变量。C在此基础上进行了升级&#xff0c;在C中&#xff0c;结构体内既可以定义变量&a…

【Leetcode】top 100 二分查找

35 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 基础写法&#xff01;&#xff01;&#xff01;牢记…

SAP 批次号过期了不让过账配置 OMCQ - M7 667 671消息号设置为E

系统默认&#xff0c;批次到期过账时只是警告&#xff0c;仓库希望直接卡死 这种不需要增强&#xff0c;直接配置就好了 OMCQ 找到 M7 667 编号&#xff0c;把W改成E就可以了 改成E之后&#xff0c;这个过账就直接报错了 保险起见&#xff0c;把667和671都设置为E

C++ | Leetcode C++题解之第3题无重复字符的最长子串

题目&#xff1a; 题解&#xff1a; class Solution { public:int lengthOfLongestSubstring(string s) {// 哈希集合&#xff0c;记录每个字符是否出现过unordered_set<char> occ;int n s.size();// 右指针&#xff0c;初始值为 -1&#xff0c;相当于我们在字符串的左…