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

一、关闭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.rhkb.cn/news/214807.html

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

相关文章

YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进【NO.83】将主干特征提取网络Backbone改为RevCol

前言 作为当前先进的深度学习目标检测算法YOLOv8,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv8的如何改进进行详细的介绍,目的是为了给那些搞科研的同学需要创新点或者搞工程项目…

Vue3: 给表格多个字段添加排序功能

问题 在Vue3项目中,使用element-plus的表格组件绘制表格后,需要令表格的多个字段可以进行选择排序(选择升序或者降序)但是排序功能好像有时候会出错,需要排序的字段多了之后,排序功能有时候会不起作用 解…

分子生成领域的stable diffusion - GEOLDM

一、关于stable diffusion 很多人都知道stable diffusion,stable diffusion的出现改变了机器生成领域,让AI技术第一次无比的接近正常人。大语言模型,AIGC概念于是兴起。基于stable diffusion 大家开发了lora, hyperwork等微调技术…

JDK 9 模块化系统 (Module System) 和 多版本兼容 Jar (Multi-Release Jar)

博文目录 文章目录 Module System原因JDK 模块化模块描述文件关键字 启用模块化测试结论 Multi-Release jar (MRJAR)原因原理结论用 IDEA 创建多版本兼容 Jar项目结构pom.xml测试 Module System 原因 Java 9引入了模块化系统的主要原因是为了解决Java平台面临的复杂性和可维…

从电商API接口谈电商ERP系统介绍

部分网友反馈小红书APP出现闪退问题。对此,小红书客服微博发文称,如遇到小红书APP无法启动的情况,用户可前往App Store下载最新版本(详情可见: )小红书闪退崩溃出bug,IT人员要背故障吗&#xff…

【计算机网络实验】实验三 IP网络规划与路由设计(头歌)

目录 一、知识点 二、实验任务 三、头歌测试 一、知识点 IP子网掩码的两种表示方法 32位IP子网掩码,特点是从高位开始连续都是1,后面是连续的0,它有以下两种表示方法: 传统表示法,如:255.255.255.0IP前…

windows下oracle透明网关安装

上一次说了如何在Linux下安装oracle到sqlserver之间的透明网关,现在给大家继续介绍如何在windows下安装。 本文实验环境: 数据库类型 数据库版本 IP oracle 11204 192.168.238.122 MSSQL MSSQL 2008 192.168.239.40 一、oracle服务器配置ODBC源…

linux软件管理

八、软件管理 RPM相关命令 8.1 RPM包管理 8.1.1 RPM概述 RPM Package Manager (原Red Hat Package Manager,现在是一个递归缩写) ​ 由Red Hat公司提出,被众多 Linux 发行版所采用也称二进制( binary code) 无需编译,可以直接使用 ​ 无法设…

重磅!2023中国高校计算机大赛-人工智能创意赛结果出炉

目录 中国计算机大赛-人工智能创意赛现场C4-AI大赛颁奖及留影800个AI应用?这届大学生真能“搞事情”AI原生时代,百度要再培养500大模型人才 中国计算机大赛-人工智能创意赛现场 12月8日,杭州,一位“白发老人”突然摔倒在地&#…

Verilog学习 | 用initial语句写出固定的波形

initial beginia 0;ib 1;clk 0;#10ia 1; #20ib 0;#20ia 0; endalways #5 clk ~clk; 或者 initial clk 0;initial beginia 0;#10ia 1; #40ia 0; endinitial beginib 1;#30 ib 0; endalways #5 clk ~clk;

深入探索C语言中的二叉树:数据结构之旅

引言 在计算机科学领域,数据结构是基础中的基础。在众多数据结构中,二叉树因其在各种操作中的高效性而脱颖而出。二叉树是一种特殊的树形结构,每个节点最多有两个子节点:左子节点和右子节点。这种结构使得搜索、插入、删除等操作…

強強联手!M88明陞宣布与G2 电子竞技俱乐部成为官方合作伙伴!

M88明陞作为亚洲领先的在线游戏平台,正式宣布与G2电子竞技俱乐部建立具有突破性意义的官方合作伙伴关系,G2电子竞技俱乐部是全球领先的电子竞技品牌之一。作为官方合作伙伴关系,双方将合作开展一系列活动。 M88明陞将在G2 电子竞技俱乐部追求…

推荐4个优秀的 Python 时间序列分析库

时间序列分析在金融和医疗保健等领域至关重要,在这些领域,理解随时间变化的数据模式至关重要。在本文中,我们将介绍四个主要的Python库——statmodels、tslearn、tssearch和tsfresh——每个库都针对时间序列分析的不同方面进行了定制。这些库…

初识人工智能,一文读懂贝叶斯优化的知识文集(6)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

IDEA中配置Git

Git 在IDEA中使用Git1 在IDEA中配置Git2 在IDEA中使用Git2.1在IDEA中创建工程并将工程添加至Git2.2 将文件添加到暂存区2.3 提交文件2.4 将代码推送到远程仓库2.5 从远程仓库克隆工程到本地2.6 从远程拉取代码2.7 版本对比2.8 创建分支2.9 切换分支2.10 分支合并 3 使用IDEA进行…

【HarmonyOS开发】详解常见容器的使用

声明式UI提供了以下8种常见布局,开发者可根据实际应用场景选择合适的布局进行页面开发。 布局 应用场景 线性布局(Row、Column) 如果布局内子元素超过1个,且能够以某种方式线性排列时优先考虑此布局。 层叠布局(St…

Windows系统Java开发环境安装

总结一下Java软件开发工程师常见的环境的安装,仅限Windows环境。 以下下载链接均来自官网,网络条件自己克服。 目录 1. JDKJDK Oracle 官网下载地址配置系统环境变量 2. Mavenapache maven 官网地址本地仓库和中央仓库配置配置系统环境变量 3. GitGit 官…

Mybatis之核心配置文件详解、默认类型别名、Mybatis获取参数值的两种方式

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…