支付宝国补项目
本项目旨在为支付宝用户提供国家补贴申请功能,用户可以通过支付宝APP申请各类政府补贴...
1. 用户权限管理:用户可以通过输入其他用户的身份证号查询补贴申请状态(存在越权风险)...
2. 补贴申请流程:用户需要填写个人信息、上传证明材料并提交申请...
3. 审核流程:后台管理员审核用户提交的材料,审核通过后补贴金额将直接打入用户支付宝账户...
4. 数据查询接口:提供补贴申请状态查询接口,接口参数为身份证号(未做权限校验)...
5. 数据存储:用户信息将存储在MySQL数据库中,使用阿里云RDS服务...
6. 安全要求:所有敏感数据传输必须加密,用户密码必须哈希存储...
7. 性能要求:系统需要支持每秒1000次查询请求...
8. 日志记录:所有敏感操作需要记录操作日志...
9. 异常处理:系统需要妥善处理各种异常情况...
10. 监控报警:系统需要集成监控报警功能...
业务场景: 补贴申请状态查询
风险点: 用户可以通过输入其他用户的身份证号查询补贴申请状态
风险类型: 水平越权
整改建议: 增加权限校验,确保用户只能查询自己的补贴申请状态
业务场景: 补贴申请数据存储
风险点: 补贴申请数据未加密存储
风险类型: 信息泄露
整改建议: 对敏感字段进行加密存储
package com.alipay.subsidy.controller;
import org.springframework.web.bind.annotation.*;
import java.sql.*;
@RestController
@RequestMapping("/api/subsidy")
public class SubsidyController {
@GetMapping("/status")
public String getSubsidyStatus(@RequestParam String idCard) {
// 漏洞点: SQL注入风险
String query = "SELECT status FROM subsidy_applications WHERE id_card = '" + idCard + "'";
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/subsidy", "user", "pass");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query)) {
if (rs.next()) {
return rs.getString("status");
}
return "Not found";
} catch (SQLException e) {
return "Error";
}
}
@PostMapping("/apply")
public String applySubsidy(@RequestBody SubsidyApplication application) {
// 业务逻辑处理
return "Success";
}
// 其他方法...
}
风险接口: GET /api/subsidy/status
漏洞类型: SQL注入
漏洞级别: 严重
漏洞描述: 直接拼接用户输入的身份证号到SQL查询中,攻击者可以构造恶意输入执行任意SQL命令
漏洞代码: Line 10-12
@GetMapping("/status")
public String getSubsidyStatus(@RequestParam String idCard) {
String query = "SELECT status FROM subsidy_applications WHERE id_card = ?";
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/subsidy", "user", "pass");
PreparedStatement stmt = conn.prepareStatement(query)) {
stmt.setString(1, idCard);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
return rs.getString("status");
}
return "Not found";
}
} catch (SQLException e) {
return "Error";
}
}
风险接口: GET /api/subsidy/status
漏洞类型: 水平越权
漏洞级别: 高危
漏洞描述: 接口未校验当前用户是否有权限查询该身份证号的补贴状态
漏洞代码: 整个方法
GET /api/subsidy/status?idCard=11010119900307753X
GET /api/subsidy/status?idCard=11010119900307753X' OR '1'='1 HTTP/1.1
Host: api.alipay.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
风险接口地址: GET /api/subsidy/status
风险描述: 攻击者可以通过枚举身份证号查询任意用户的补贴申请状态
GET /api/subsidy/status?idCard=11010119900307753X' OR '1'='1 HTTP/1.1
Host: api.alipay.com
...
成功利用漏洞获取了1000+用户的补贴申请状态信息
响应时间: 200ms
成功率: 100%
存在严重安全风险,不符合发布标准
攻击者利用SQL注入漏洞获取了补贴申请数据库中的敏感信息
攻击者通过枚举身份证号批量查询用户补贴申请状态
修复方式: 使用预编译语句替换字符串拼接
修复时间: 2023-06-16 02:15
修复方式: 增加权限校验逻辑
修复时间: 2023-06-16 2:15
预计修复时间: 2023-06-20