生产上线需要注意的安全漏洞

一、关闭swagger

1、关闭swagger v3

# 需同时设置auto-startup=false,否则/v3/api-docs等接口仍能继续访问
springfox:documentation:enabled: falseauto-startup: falseswagger-ui:enabled: false

2、关闭swagger v2

# 只要不是true就不启用
swagger:enable: false
# 如不起作用,查看项目中的config,是否配置开关
@Configuration
@EnableSwagger2
@ConditionalOnProperty(name = "swagger.enable", havingValue = "true")
public class SwaggerConfig {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.xxx.controller")).paths(PathSelectors.any()).build();}//构建 api文档的详细信息函数,注意这里的注解引用的是哪个private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Swagger2 构建RESTful API").description("API 描述").contact(new Contact("xx", "", "xx@xxx.com")).version("1.0")          .build();}}

二、关闭SpringBoot actuator

management.endpoints.enabled-by-default = false

三、HTTP头信息泄露

为了隐藏这些不必要的头信息,有各种可能的方法:
    1.如果是经源代码编译而来的,可改源代码中的版本信息,具有一定的难度;
    2.通过配置对版本信息进行修改或者不显示,达到以假乱真的目的,比较简单;
    3.在服务器前加上反向代理软件,过滤掉这些会显示服务器版本信息的头,有些复杂。

以下主要就第2种方法,分别介绍一下常用的Web服务器如何去掉或修改Server头信息。

1>.Apache Web服务器版本号隐藏

# 找到配置文件apache2.conf或httpd.conf,修改其中的标记为:
ServerTokens ProductOnly
ServerSignature Off# 重启apache服务
# curl -I localhost
HTTP/1.1 200 OK
Server: Apache
Accept-Ranges: bytes
Content-Length: 97
Connection: close
Content-Type: text/html

2>.Nginx服务器版本号隐藏

# 修改nginx.conf
# 在其中的http节加上server_tokens off;
http {……省略配置sendfile on;tcp_nopush on;keepalive_timeout 65;tcp_nodelay on;server_tokens off;…….省略配置
}
# 重启Nginx后测试

四、敏感信息明文传输

1.网站负责人将网站地址提交到Gworg进行SSL证书认证。

2.然后将SSL证书配置到网站,并且开启强制HTTPS访问。

3.查看网站源码是否存在http地址调用的资源,例如:图片、视频、CSS、JS代码等,将这些代码地址改成https或者下载到本地网站服务器调用。

4.对于敏感信息,例如密码、秘钥进行加密;例如:前端md5加密传给服务端,服务端再次md5加密存入数据库;

五、重放攻击

短信轰炸

暴力破解

重放支付

如何防御

加随机数

加时间戳

加流水号

其他方法

1)挑战/应答:每次数据传输时,发送端都给接收端发送一个不同的“挑战”字串,接收端收到这个“挑战”字串后,做出相应的“应答”。

2)一次性口令:每次数据传输时,发送端都给接收端发送一个不同的“口令”,通信双方通过消息中的口令来判断消息的新鲜性。

3)页面可以编写防重复提交、后端自定义注解防止表单重复提交(RepeatableFilter);


六、敏感信息泄漏

1.不当的日志记录:如果日志文件中包含了敏感数据,比如用户密码、身份证号码等,且这些日志文件未经适当的保护,那么黑客可以随意访问这些文件来获取敏感数据

2.SQL注入攻击:如果应用程序的数据库查询语句是通过拼接字符串的方式构建的,存在SQL注入的风险。黑客可以通过输入特殊字符来修改或者获取数据库中的数据。

3.不正确的加密和解密:如果应用程序使用不安全的加密算法,或者密钥管理不当,黑客可以通过解密数据来获取敏感信息。

解决方案:

1.应用程序层面的解决方案
  a. 合理使用访问控制机制:对敏感数据的访问进行严格的认证和授权,确保只有授权用户能够访问敏感数据。
  b. 数据存储安全:将敏感数据以加密形式存储,确保数据在存储过程中不被黑客获取。
  c. 前端安全:编写安全的前端代码,对用户输入进行有效的验证和过滤,防止恶意代码注入。
  d. 安全的数据传输:使用安全的传输协议(如HTTPS)来传输敏感数据,确保数据在传输过程中不被黑客截取。
2.数据库层面的解决方案
  a. 使用参数化查询或预编译语句:确保输入的数据能够正确转义,防止SQL注入攻击。
  b. 数据库访问控制:对数据库的访问进行严格的认证和授权,只允许授权用户访问敏感数据。
  c. 定期备份和监控数据库:确保数据库备份完整可用,及时发现和处理异常访问行为。
3.加密和解密层面的解决方案
  a. 使用安全可靠的加密算法:确保加密算法足够强大,如AES、RSA等。
  b. 密钥管理:妥善管理密钥,确保密钥不泄露,定期更换密钥以提高安全性。

实战:

XssFilter 过滤sql参数;

七、账号枚举漏洞

1.对接口登录页面的判断回显提示信息修改为一致:账号或密码错误(模糊提示);不要精确报账号不存在、密码错误等提示语。
2.增加动态验证码机制,避免被探测工具批量枚举用户名。

八、CORS 信任任意来源漏洞

1   如果返回头是以下情况,那么就是高危漏洞,这种情况下漏洞最好利用:

Access-Control-Allow-Origin: https://www.attacker.com

Access-Control-Allow-Credentials: true

 2   如果返回头是以下情况,那么也可以认为是高危漏洞,只是利用起来麻烦一些:

Access-Control-Allow-Origin: null

Access-Control-Allow-Credentials: true

 3   如果返回以下,则不存在漏洞,因为Null必须是小写才存在漏洞:

Access-Control-Allow-Origin: Null

Access-Control-Allow-Credentials: true

 4   如果返回以下,可认为不存在漏洞,因为CORS安全机制阻止了这种情况下的漏洞利用,也可以写上低危的CORS配置错误问题。

Access-Control-Allow-Origin: *

Access-Control-Allow-Credentials: true

 5   如果返回以下,可认为不存在漏洞,也可以写上低危的CORS配置错误问题。

Access-Control-Allow-Origin: *

解决办法:

1. Access-Control-Allow-Origin中指定的来源只能是受信任的站点,避免使用Access-Control-Allow-Origin: *,避免使用Access-Control-Allow-Origin: null,否则攻击者可以伪造来源请求实现跨域资源窃取。

2. 严格校验“Origin”值,校验的正则表达式一定要编写完善,避免出现绕过的情况。

3. 减少“Access-Control-Allow-Methods”所允许的请求方法。

4. 除了正确配置CORS之外,Web服务器还应继续对敏感数据进行保护,例如身份验证和会话管理等。

5.后端服务禁止使用下边代码,使用nginx代理配置跨域:

    @Beanpublic CorsFilter corsFilter(){UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration config = new CorsConfiguration();config.setAllowCredentials(true);// 设置访问源地址config.addAllowedOrigin("*");// 设置访问源请求头config.addAllowedHeader("*");// 设置访问源请求方法config.addAllowedMethod("*");// 对接口配置跨域设置source.registerCorsConfiguration("/**", config);return new CorsFilter(source);}

九、未授权访问

【网络安全】常见未授权访问漏洞汇总

十、默认口令漏洞

所有中间件、组件密钥都不得使用默认,修改为复杂的随机密码;

后端对新增、修改密钥前,可以加入PasswordCheckUtil,进行复杂校验:

检测密码中字符长度检查密码中是否包含数字检查密码中是否包含字母(不区分大小写)检查密码中是否包含特殊字符键盘规则匹配器 横斜向规则检测评估a-z,z-a这样的连续字符评估aaaa, 1111这样的相同连续字符检测常用词库用户名校验(LeetSpeak字符)

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

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

相关文章

深度解读:淘客返利机器人无限制与免费版的差异

深度解读:淘客返利机器人无限制与免费版的差异 在数字时代,人工智能和大数据技术的飞速发展正在改变我们的生活方式,尤其在购物领域,各种优惠工具如雨后春笋般涌现。其中,淘客返利机器人和微赚淘客系统以其独特的优势&#xff0c…

Python核心编程之序列下篇

目录 十二、列表 如何创建列表类型数据并给它赋值 如何访问列表中的值

代立冬:基于Apache Doris+SeaTunnel 实现多源实时数据仓库解决方案探索实践

大家好,我是白鲸开源的联合创始人代立冬,同时担任 Apache DolphinScheduler 的 PMC chair 和 SeaTunnel 的 PMC。作为 Apache Foundation 的成员和孵化器导师,我积极参与推动多个开源项目的发展,帮助它们通过孵化器成长为 Apache …

如何访问内部网络做内网穿透

项目:https://github.com/ehang-io/nps 有个公网服务器,搭建服务端。 然后客户端使用: -server是服务端的访问方式。-vkey是秘钥。 ./npc -server192.227.19.12:8024 -vkeyoies8gq3wml -typetcp然后在服务端配置TCP隧道即可。

某度旋转验证码v2 逆向分析

v2主要依据是核心 JS 文件mkd_v2.js 版本,如下图所示: 第一次 https://passport.baidu.com/cap/init 接口,请求的 ak 是固定值,当然不同场景不同网站是不一样的,_ 时间戳,ver1,返回值 as、tk 都…

大数据的技术栈-逐步完善

目录 1.hadoop a.HDFS分布式文件系统 b.Yarn集群资源管理器 c.MapReduce sql引擎 d.Impala sql引擎 e.工具概观 2.数据仓库知识 a.Hive数据库 1)Hive Sql 2)数据库结构 b.Doris数据库 3.混合处理框架SPARK a.Spark b.集群架构 4.数仓模型知识 5.开发工具 a.Dbeaver b.Idea…

android项目实战之使用框架 集成多图片、视频的上传

效果图 实现方式,本功能使用PictureSelector 第三方库 。作者项目地址:https://github.com/LuckSiege/PictureSelector 1. builder.gradle 增加 implementation io.github.lucksiege:pictureselector:v3.11.1implementation com.tbruyelle.rxpermissio…

线性回归实战

3.1 使用正规方程进行求解 3.1.1 简单线性回归 公式 : y w x b y wx b ywxb 一元一次方程,在机器学习中一元表示一个特征,b表示截距,y表示目标值。 使用代码进行实现: 导入包 import numpy as np import matp…

中缀表达式转后缀表达式与后缀表达式计算(详解)

**中缀表达式转后缀表达式的一般步骤如下: 1:创建一个空的栈和一个空的输出列表。 2:从左到右扫描中缀表达式的每个字符。 3:如果当前字符是操作数,则直接将其加入到输出列表中。 4:如果当前字符是运算符&a…

QNX usleep测试

QNX usleep测试 结论 usleep时间在QNX上没有ubuntu上运行准确&#xff0c;但是10ms以上误差不大。 测试代码 testsleep.cpp的代码如下&#xff1a; #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <time.h>double usleep_…

sklearn 笔记:neighbors.NearestNeighbors 自定义metric

1 数据 假设我们有这样的一个数据tst_lst&#xff0c;表示的是5条轨迹的墨卡托坐标&#xff0c;我们希望算出逐点的曼哈顿距离之和&#xff0c;作为两条轨迹的距离 [array([[11549759.51313693, 148744.89246911],[11549751.49813359, 148732.97804463],[11549757.620705…

Linux 常用命令汇总

1 linux定时任务 查看定时任务&#xff1a;crontab -l 每晚一点半执行定时任务&#xff1a; 30 1 * * * sh /var/lib/pgsql/pg_db_backup.sh >> /var/lib/pgsql/pg_db_backup.log 2>&1 配置定时任务&#xff1a;crontab -e 2 linux 内核版本查询 cat /etc/r…

P5744 【深基7.习9】培训

题目描述 某培训机构的学员有如下信息&#xff1a; 姓名&#xff08;字符串&#xff09;年龄&#xff08;周岁&#xff0c;整数&#xff09;去年 NOIP 成绩&#xff08;整数&#xff0c;且保证是 5 5 5 的倍数&#xff09; 经过为期一年的培训&#xff0c;所有同学的成绩都…

学习-java多线程

线程的创建 *继承Tread,重写run *实现Runnable接口,重写run() [匿名内部类] *实现callable接口(有结果返回) 线程的常用方法 调用join保证这个方法先执行完成, 线程安全 并发编程 进程&#xff1a;就相当一个程序的实例线程&#xff1a;就是指令流&#xff08;一个进程包含多…

无重复字符的最长子串-中等

leetcode地址 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2:输入: s "bbbbb" 输出: 1 …

我有才打造私域流量的知识付费小程序平台

在当今数字化时代&#xff0c;知识付费市场正在迅速崛起&#xff0c;而私域流量的概念也日益受到重视。私域流量指的是企业通过自有渠道获取的、能够自由支配的流量&#xff0c;这种流量具有更高的用户粘性和转化率。因此&#xff0c;打造一个基于私域流量的知识付费小程序平台…

实现:切换页面切换标题,扩展 vue-router 的类型

布局容器-页面标题 网址&#xff1a;https://router.vuejs.org/zh/guide/advanced/meta 给每一个路由添加 元信息 数据 router/index.ts const router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{ path: /login, component: () > im…

问题:数组对象去重

问题&#xff1a;数组对象去重 var arr [{name: ‘a’,id: 1}, {name: ‘a’,id: 2}, {name: ‘b’,id: 3}, {name: ‘c’,id: 4}, {name: ‘c’,id: 6}, {name: ‘b’,id: 6}, {name: ‘d’,id: 7}]; 对数组对象name进行去重处理&#xff0c; 结果显示为&#xff1a; [{name…

第一启富金:新添澳大利亚(ASIC)牌照

第一启富金&#xff1a;澳大利亞證券及投資委員會&#xff08;ASIC&#xff09; GOLDWELL GLOBAL PTY LTD 是 WHOLESALE INVESTOR SERVICES PTY LTD&#xff08;CAR 編號 001304943&#xff09;的企業授權代表開發澳大利亞客戶&#xff0c;WHOLESALE INVESTOR SERVICES PTY LT…

XML是什么

XML是是什么&#xff1f; XML&#xff08;Extensible Markup Language&#xff09;&#xff0c;中文是可扩展标记语言&#xff0c;是标准通用标记语言的子集。它是一种标记语言&#xff0c;用于标记电子文档&#xff0c;使其结构化。 XML可以用来标记数据&#xff0c;定义数据…