软件开发进阶技能之性能与安全调优(四)

简介: 本节聚焦安全调优:严守最小权限原则,缩减攻击面。涵盖SQL注入(禁用拼接,用PreparedStatement/MyBatis #{})、XSS(输出编码+框架自动转义)、命令注入(白名单校验);JWT安全(强密钥、合理过期、防算法混淆);会话固定防护与bcrypt加盐哈希密码存储。

第二部分:安全调优
安全调优的目标是减少系统的攻击面,遵循最小权限原则,并对常见漏洞进行防御。

一. 输入验证与输出编码

1.1 防止 SQL 注入
绝对不要使用字符串拼接 SQL!

// 高危:拼接输入
String name = request.getParameter("name");
String sql = "SELECT * FROM users WHERE name = '" + name + "'";
// 输入:' OR '1'='1  --> 全表查询

// 正确:使用预编译语句(PreparedStatement)或 ORM 框架
String safeSql = "SELECT * FROM users WHERE name = ?";
PreparedStatement ps = connection.prepareStatement(safeSql);
ps.setString(1, name);
ResultSet rs = ps.executeQuery();

// 使用 MyBatis 时注意 #{} 和 ${} 的区别
// 正确:#{name}  错误:${name} (仍可能注入,仅用于动态表名/列名)

1.2 防止 XSS (跨站脚本攻击)
输出编码(Output Encoding)

// 使用 OWASP Java Encoder 对 HTML 上下文编码
import org.owasp.encoder.Encode;

String userInput = request.getParameter("comment");
// 输出到 HTML 中
response.getWriter().write(Encode.forHtml(userInput));

// 输出到 JavaScript 字符串中
response.getWriter().write(Encode.forJavaScript(userInput));

// 输出到 URL 参数中
String url = "/search?q=" + Encode.forUriComponent(userInput);

使用 Spring 的 HtmlUtils 或 Thymeleaf 默认自动转义,但要避免使用 th:utext(未转义文本)。

1.3 防止命令注入
避免 Runtime.exec() 或 ProcessBuilder 直接拼接用户输入。如果必须调用外部命令,使用白名单校验。

// 危险:用户输入 "127.0.0.1; rm -rf /"
String ip = request.getParameter("ip");
Runtime.getRuntime().exec("ping " + ip);

// 安全:使用正则校验 IP 格式
Pattern ipPattern = Pattern.compile("^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.");
if (ipPattern.matcher(ip).matches()) {
    // 校验通过后再执行
}

二. 身份认证与会话管理

2.1 JWT 安全使用
使用强密钥(HS256 密钥长度 ≥ 256 bits,RS256 密钥长度 ≥ 2048 bits)

设置合理的 wap588.net 过期时间(exp)

禁止将敏感信息如密码存入 JWT

防止算法混淆攻击(如果服务端接受 none 算法或允许修改 alg)

// JWT 生成(使用 Nimbus JOSE + JWT 库)
JWSSigner signer = new MACSigner(secretKeyBytes);
JWTClaimsSet claims = new JWTClaimsSet.Builder()
    .subject(userId)
    .issueTime(new Date())
    .expirationTime(new Date(System.currentTimeMillis() + 3600000)) // 1 小时
    .claim("role", "USER")
    .build();
SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.HS256), claims);
signedJWT.sign(signer);
String token = signedJWT.serialize();

2.2 会话固定攻击防护
登录成功后必须生成新的会话 ID。

// Servlet 中
HttpSession oldSession = request.getSession(false);
if (oldSession != null) {
    oldSession.invalidate();  // 销毁原会话
}
HttpSession newSession = request.getSession(true); // 创建新会话

Spring Security 默认已防护(sessionManagement().sessionFixation().migrateSession())。

2.3 密码存储
使用 bcrypt、scrypt 或 PBKDF2 加盐哈希,禁止 MD5/SHA1。

bcrypt 内置盐且计算慢,可防御彩虹表和暴力破解。

// Spring Security BCryptPasswordEncoder
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(10); // strength=10 迭代次数 2^10
String encodedPassword = encoder.encode("userPassword");
boolean matches = encoder.matches("rawPassword", encodedPassword);
相关文章
|
1天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
7848 34
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
1天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
668 145
|
1天前
|
人工智能 缓存 自然语言处理
阿里Qwen3.7-Max评测:Agent能力显著提升,耗时与调用成本大幅下降
阿里云百炼推出面向智能体的旗舰大模型Qwen3.7-Max,具备长周期自主执行能力,显著提升编程、办公自动化等复杂任务处理水平;支持MCP集成与多框架兼容,并以限时5折+100万Tokens免费试用大幅降低使用门槛,助力企业高效落地AI应用。在阿里云百炼平台快速体验:https://t.aliyun.com/U/fPVHqY
1893 10
|
1天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
467 4
|
1天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1289 2
|
1天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
409 1
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
1天前
|
人工智能 弹性计算 运维
阿里云发布堡垒机智能运维Agent,运维交互进入自然语言新时代
支持自然语言运维,提升效率与安全双保障。
1178 1
|
1天前
|
存储 安全 Java
AgentScope Java 2.0:打造分布式、企业级智能体底座
AgentScope 2.0 面向分布式部署、稳定运行、权限安全等企业级需求全面升级,打造支持多租户隔离与长期稳定运行的企业级智能体底座。
|
1天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1331 4
|
1天前
|
人工智能 运维 API
2026年阿里云百炼通义千问Qwen3.7-plus深度介绍 功能特性、使用优势及618大促订阅方案指南
大模型技术的普及,让AI能力逐步融入个人办公、内容创作、代码编写、企业运营、教育培训等各类场景。不同定位的模型对应不同使用需求,旗舰级模型性能强劲但使用成本偏高,轻量化模型价格低廉却难以胜任复杂任务,而介于两者之间的中端主力模型,凭借均衡的能力、亲民的定价、广泛的场景适配性,成为绝大多数个人用户、小型团队、中小企业的首选。
566 1