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 passwordhtpasswd -n[imB25dps] [-C cost] [-r rounds] usernamehtpasswd -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权限,索引用户可以在这个目录下面创建文件和删除自己创建的文件,删除其他人创建的文件权限不被允许(比如共享目录)
操作符+:为文件或目录添加属性;-:移除文件或目录已有的某些属性;=:为文件或目录设定一些属性。

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

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

相关文章

6.8物联网RK3399项目开发实录-驱动开发之RTC实时时钟的使用(wulianjishu666)

90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】 链接:https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwdc53f RTC 使用 简介 AIO-3399J 开发板上有 一个集成于 RK808 上的RTC(Real Time Clock),主要功能有时钟&#xff0c…

Matlab安装完成后打开后闪退

官方解决办法,英文看着费劲 其中Problem #2和Problem #4大概率能解决问题我是使用Problem #4解决的,引发原因是Problem #3加密软件导致,只能先命令行再desktop才能打开软件 知乎绵绵给出的方法,和官方解决相同但是中文

【PowerDesigner】PGSQL反向工程过程已中断

问题 反向工程过程已中断,原因是某些字符无法通过ANSI–>UTF-16转换进行映射。pg导入sql时报错,一查询是power designer 反向工程过程已中断,某些字符无法通过ANSI–>UTF-16转换进行映射(会导致数据丢失) 处理 注…

代码随想录第28天| 131.分割回文串 93.复原IP地址 78.子集

131.分割回文串 131. 分割回文串 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 带你学透回溯算法-分割回文串(对应力扣题目:131.分割回文串)| 回溯法精讲!_哔哩哔哩_bilibili 给你一个字符串 s&…

armbian等linux系统修改fstab实现开机自动挂载磁盘(详解)

当 Linux 操作系统启动时,它会尝试挂载您的硬盘和其他存储设备上的分区。为了实现这一目标,系统使用 /etc/fstab 文件来确定应该如何挂载文件系统。/etc/fstab 文件是一个文本文件,包含了在系统引导期间将要挂载的所有文件系统的定义。它通过…

关于投标的细节

第一点: 进来的时候记住到达时间,这个时间只能是个参考。签到表时间填写要符合逻辑性,就是来的比你早的到达时间一定比你的晚,来的比你晚的到达时间一定比你迟。优先考虑的是先后而不是真实到达时间。除非你是第一个填写的 第二点…

如何创建自己的 Spring Boot Starter 并为其编写单元测试

当我们想要封装一些自定义功能给别人使用的时候,创建Spring Boot Starter的形式是最好的实现方式。如果您还不会构建自己的Spring Boot Starter的话,本文将带你一起创建一个自己的Spring Boot Starter。 快速入门 创建一个新的 Maven 项目。第三方封装的…

连接Redis不支持集群错误,ERR This instance has cluster support disabled,解决方案

1. 问题背景 调整redis的配置后,启动程序时, 会报如下错误: [redis://172.16.0.8xxx]: ERR This instance has cluster support disabledSuppressed: io.lettuce.core.RedisCommandExecutionException: ERR This instance has cluster supp…

TypeScript-数组、函数类型

1.数组类型 1.1类型 方括号 let arry:number[][5,2,0,1,3,1,4] 1.2 数组泛型 let arry2:Array<number>[5,2,0,1,3,1,4] 1.3接口类型 interface makeArryRule{[index:number]:number }let arry3:makeArryRule[5,2,0,1,3,1,4] 1.4伪数组 说明&#xff1a; argument…

MyBatis数据库逆向生成工具

使用Mybatis数据库逆向生成工具 1.在pom中引入通用mapper工具 <!-- 通用mapper逆向工具 --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>1.2.4</version></d…

苹果安卓双端短视频直播系统源码,带后台-支持二开和采集

搭建教程 1.PHP5.6-7.2 mysql 5.6 redis5.0 nginx1.15 2.宝塔就完全满足了 我刚开了台服务器&#xff0c;建议用阿里云的 我这个是腾讯云 先让服务器 自己装着 时间比较长 3.搭建前需要准备的东西 腾讯云直播、七牛存储、百度语音、腾讯地图等好多东西 七牛存储…

面试算法4/400-乘积小于 K 的子数组

题目 给定一个正整数数组 nums和整数 k &#xff0c;请找出该数组内乘积小于 k 的连续的子数组的个数。 示例 1: 输入: nums [10,5,2,6], k 100 输出: 8 解释: 8 个乘积小于 100 的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。 需要注意的是 [10,…

Micron FY24 Q2业绩强劲,凭内存实现翻盘

根据TechInsights数据显示&#xff0c;美光科技24财年第二季度业绩强劲&#xff0c;公司通过技术创新和产能优化&#xff0c;成功抓住了AI服务器和其他高性能应用带来的市场需求增长机遇。尽管短期内面临供应紧张的问题&#xff0c;但美光通过加大研发投入和产能转换力度&#…

蓝桥杯算法基础(30):尺取法的应用(hiho字符串),next数组应用(前缀周期性),后缀数组的应用

尺取法应用题hiho字符串 如果一个字符串恰好包含2个h,1个‘1’和1个‘0’&#xff0c;我们就称这个字符串是hiho字符串 例如"oihateher"、“hugeinputhugeoutput”都是hiho字符串 现在给定一个只包含小写字母的字符串S&#xff0c;小H想知道S的所有子串中&#xff0c…

Leetcode 322. 零钱兑换

心路历程&#xff1a; 这道题和上一道完全平方数的和基本上一摸一样&#xff0c;甚至比上一道题还简单&#xff0c;基于dp的建模&#xff1a; 状态&#xff1a;当前的目标总金额 动作&#xff1a;选哪一个硬币 返回值&#xff1a;凑成该目标总金额的最少硬币个数 这道题如果硬…

2024.4.2

模拟面试&#xff1a; 一、GPIO是什么&#xff1f; 答&#xff1a;通用输入输出接口&#xff0c;可以作为单片机和外部设备连接的桥梁。 二、VCC是什么? VCC通常是多少V? 答&#xff1a;电源&#xff0c;通常是3.3V和5V。 三、FreeRTOS任务有几种状态&#xff0c;分别是…

MATLAB科研绘图与学术图表绘制从入门到精通

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

二轮电动自行车充电桩开源系统

文章目录 一、产品功能部分截图1.手机端&#xff08;小程序、安卓、ios&#xff09;2.PC端 二、小程序体验账号以及PC后台体验账号1.小程序体验账号2.PC后台体验账号关注公众号获取最新资讯 三、产品简介&#xff1f;1. 充电桩云平台&#xff08;含硬件充电桩&#xff09;&…

`@Autowired`

Autowired 是Spring框架中的一个注解&#xff0c;用于实现依赖注入。当你在一个类的字段、构造函数或方法上使用Autowired注解时&#xff0c;Spring容器会在创建该类实例的过程中自动寻找匹配的bean&#xff0c;并将其注入到相应的位置。 这里是Autowired注解的一些使用场景和…

【xinference】(8):在autodl上,使用xinference部署qwen1.5大模型,速度特别快,同时还支持函数调用,测试成功!

1&#xff0c;关于xinference Xorbits Inference (Xinference) 是一个开源平台&#xff0c;用于简化各种 AI 模型的运行和集成。借助 Xinference&#xff0c;您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理&#xff0c;并创建强大的 AI 应用。 Xor…