禁用危险的API: banned.h

本文介绍了一种在C/C++中禁用危险API的方法,通过包含banned.h文件并利用#pragma deprecated指令,可以有效地通知编译器对特定危险API进行错误报告。

上一篇有关C/C++禁用危险的API的一文里面没有提到:如果在编译中禁止使用这些危险的API<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

很简单,

#include "banned.h"

即可。

用户可以从以下链接中直接下载http://download.microsoft.com/download/2/e/b/2ebac853-63b7-49b4-b66f-9fd85f37c0f5/banned.h

如果打开banner.h,可以看到,里面有

# pragma deprecated (strlen, wcslen, _mbslen, _mbstrlen, StrLen, lstrlen)

通过这种方法,就可以通知编译器对调用危险API报告错误信息。

该警告表明 **Activiti 依赖传递引入了存在漏洞的 Spring Boot 2.1.12.RELEASE**(如 [CVE-2022-22965](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22965) 等)。以下是解决方案: --- ### **1. 问题根源** - **漏洞版本**:Spring Boot 2.1.12.RELEASE 存在多个高危漏洞(如 Spring4Shell 漏洞)。 - **传递路径**:Activiti 7.x 默认依赖旧版 Spring Boot(通过 `activiti-spring-boot-starter` 或间接依赖)。 --- ### **2. 解决方案** #### **方案 1:升级 Activiti 到兼容 Spring Boot 2.7.x/3.x 的版本(推荐)** - **Activiti 7.1.0+** 默认兼容 Spring Boot 2.7.x,**Activiti 8.x** 兼容 Spring Boot 3.x。 - 在父 POM 中显式指定版本: ```xml <properties> <activiti.version>7.1.0.M6</activiti.version> <!-- 或 8.x --> <spring-boot.version>2.7.18</spring-boot.version> <!-- 或 3.2.0 --> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-dependencies</artifactId> <version>${activiti.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` #### **方案 2:排除 Spring Boot 传递依赖** 如果无法升级 Activiti,手动排除漏洞版本并引入安全版本: ```xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M6</version> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <!-- 排除旧版 --> </exclusion> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </exclusion> </exclusions> </dependency> <!-- 显式引入安全版本 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>2.7.18</version> <!-- 或 3.2.0 --> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.7.18</version> </dependency> ``` #### **方案 3:使用 Maven Enforcer 插件禁止漏洞版本** 在 `pom.xml` 中添加规则,阻止构建时引入 Spring Boot 2.1.x: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <id>enforce-banned-dependencies</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <bannedDependencies> <excludes> <exclude>org.springframework.boot:spring-boot:[2.1.0,2.2.0)</exclude> </excludes> <message>禁止使用 Spring Boot 2.1.x,请升级到 2.7.x/3.x</message> </bannedDependencies> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` --- ### **3. 验证修复** 1. **检查依赖树**: ```bash mvn dependency:tree -Dincludes=org.springframework.boot:spring-boot ``` - 确认输出版本为 `2.7.18` 或 `3.2.0`。 2. **扫描漏洞**: - 使用 OWASP Dependency-Check: ```bash mvn org.owasp:dependency-check-maven:check ``` - 或通过 IDE 的漏洞扫描工具(如 IntelliJ IDEA 的 `Maven > Show Dependencies`)。 --- ### **4. 兼容性注意事项** | Activiti 版本 | 推荐 Spring Boot 版本 | 注意事项 | |----------------|----------------------|----------| | 7.1.x | 2.7.x | 需排除旧版 Spring 依赖 | | 8.x | 3.x | 支持 Jakarta EE 9+ | - **Activiti 7.x + Spring Boot 3.x**:需额外排除 `javax.*` 依赖并引入 `jakarta.*` 替代包。 - **Activiti 8.x**:默认基于 Spring Boot 3.x,但需检查与现有库的兼容性。 --- ### **5. 扩展问题** #### **Q1:如何快速定位所有传递依赖中的漏洞版本?** - 使用 `mvn dependency:tree -Dverbose` 显示完整依赖路径,结合 `grep` 过滤: ```bash mvn dependency:tree | grep "spring-boot.*2.1.12.RELEASE" ``` #### **Q2:为什么排除后仍出现旧版 Spring Boot?** - 可能原因: 1. 其他依赖(如 `spring-cloud-dependencies`)强制引入旧版。 2. 依赖范围(`<scope>test</scope>`)未被排除。 3. 存在多个版本的 Spring Boot 冲突(通过 `mvn dependency:analyze` 检查)。 #### **Q3:如何强制所有模块使用统一 Spring Boot 版本?** - 在父 POM 的 `<dependencyManagement>` 中声明版本,子模块通过 `<dependencies>` 引入(不指定版本): ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.7.18</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` #### **Q4:升级 Spring Boot 后出现类冲突怎么办?** - 使用 `mvn dependency:tree` 分析冲突,通过 `<exclusions>` 排除重复依赖: ```xml <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </exclusions> ``` #### **Q5:如何自动化阻止漏洞依赖进入构建?** - 集成 [OWASP Dependency-Check](https://owasp.org/www-project-dependency-check/) 到 CI/CD 流程: ```xml <plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>8.4.0</version> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin> ``` --- ### **总结** | 方案 | 适用场景 | 操作复杂度 | |------|----------|------------| | 升级 Activiti | 可接受版本升级 | ⭐⭐ | | 排除依赖 + 显式引入 | 需保持现有 Activiti 版本 | ⭐⭐⭐ | | Maven Enforcer 插件 | 强制团队规范 | ⭐⭐ | **推荐操作**:优先升级到 **Activiti 7.1.x + Spring Boot 2.7.x** 或 **Activiti 8.x + Spring Boot 3.x**,并通过 `dependency:tree` 和漏洞扫描工具验证。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值