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

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 本节聚焦安全调优:严守最小权限原则,缩减攻击面。涵盖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);
相关文章
|
21天前
|
SQL 人工智能 自然语言处理
Vibe Coding 是什么?当“感觉编程”遇上数据库
Vibe Coding是2026年编程圈最火的概念之一,指开发者通过自然语言描述“感觉”或“意图”,由AI自动生成代码、调试、优化。本文从Vibe Coding的起源讲起,分析它如何改变数据库开发方式:从手写SQL到自然语言查询、从人工调索引到AI推荐、从经验运维到智能诊断。探讨这项趋势对DBA职业的影响,并给出拥抱变化的实用建议。技术会变,但人的判断力、审美和业务理解才是长期竞争力。
|
NoSQL Java 关系型数据库
【AgentScope Java新手村系列】(5)记忆与会话管理
记忆与会话管理 — AgentState 管理上下文窗口,AgentStateStore 持久化,RuntimeContext.sessionId 隔离多用户会话。
240 0
|
21天前
|
缓存 前端开发 JavaScript
阿里云 OSS 实战:从零搭建静态网站托管 + CDN 加速完整指南
本文分享阿里云OSS+CDN托管静态站点的实战方案:省去服务器运维,提升国内访问速度至50ms内;涵盖Bucket配置、SPA路由适配、自动化部署(CLI/GitHub Actions)、HTTPS与CDN缓存策略,并附成本估算(约¥18/月)和常见坑点解析,适合前端开发者快速落地。
|
21天前
|
弹性计算 负载均衡 安全
阿里云负载均衡(SLB)从入门到精通:完整配置流程与最佳实践
本文详细讲解阿里云负载均衡(SLB)的完整配置流程,涵盖实例创建、服务器组配置、监听设置、健康检查、安全策略及优化实践,同时包含常见问题解答,帮助用户快速掌握SLB部署与运维核心技能。
|
21天前
|
缓存 人工智能 API
阿里云百炼Token Plan团队版与Coding Plan核心差异全解析 附团队版全场景常见问题完整答疑
随着大模型在研发、办公、企业自动化场景常态化落地,不同使用者群体的算力消耗特征出现明显分化:数十人多岗位协同的企业团队,存在多角色额度分配、跨业务线统一计费、月度预算锁定、高峰算力保障等综合管理需求;而独立程序员、外包开发小组、学生研发爱好者,绝大多数算力消耗集中在代码生成、调试、项目重构、脚本编写等开发场景,对文档分析、多模态图文处理需求极低,更看重轻量化低价订阅、代码专属折扣、编程工具配套权益。
230 0
|
21天前
|
缓存 人工智能 自然语言处理
阿里云百炼通义千问Qwen3.6-Flash完整实操指南:轻量化旗舰功能特性、落地优势与分层优惠订阅方案详解
当前AI应用落地场景分化愈发明显,除复杂智能体、百万字长文档、全栈大型工程开发等高门槛业务外,大量企业存在高频轻量问答、实时客服对话、短文本批量生成、简单数据提取、前端实时交互等标准化轻量化需求。这类场景单日调用频次可达数万乃至数十万次,对接口响应延迟、单轮调用成本、并发承载能力有极高要求,若选用高规格旗舰模型会造成算力预算严重浪费,而普通基础轻量化模型又存在逻辑推理弱、工具调用不稳定、短文本输出质量差等短板。
301 4
|
21天前
|
存储 人工智能 算法
Claude Code自我进化系统解析:AI编程助手持久化记忆与行为学习实现方案
在日常使用Claude Code开展编程工作时,多数用户都会遇到一个普遍痛点:每开启一次全新会话,AI都会清空此前的对话内容、项目认知与个人编码习惯。此前沟通的项目架构、反复确认的代码规范、调试总结的经验教训都需要重新讲解,不仅耗费大量时间,还会降低整体开发效率。针对这一问题,业内技术团队基于Claude Code原生能力,搭建了一套完整的持久化记忆与自我进化系统,让这款AI编程助手能够跨会话留存信息、自主学习用户行为规律,逐步适配个人与团队的开发模式。本文将完整拆解这套系统的整体架构、核心模块、技术实现、运行流程以及落地效果,同时讲解设计思路与优化细节,为AI编程工具的深度定制提供参考。
198 4
|
21天前
|
缓存 人工智能 运维
阿里云百炼Qwen3.7-Max全解:旗舰模型核心能力、技术优势与优惠订阅方案实操指南
AI智能体技术进入规模化落地阶段后,市场对大模型的长文本承载、多步骤自主推理、工具链式调用、全栈代码开发能力提出前所未有的高标准。传统轻量化对话模型仅能满足基础问答,无法支撑企业级长周期自动化任务、复杂软件工程、海量文档深度分析等高价值场景。阿里云依托自研通义千问技术体系,在百炼大模型服务平台正式推出Qwen3.7-Max旗舰大模型,作为当前千问3.7系列综合性能天花板,全面对标国际头部闭源旗舰模型,专为智能体全链路工作流深度优化,兼顾推理精度、并发稳定性、多模态理解与成本可控性,同时配套分层订阅优惠计划,覆盖个人开发者、小微团队、中大型集团企业全维度使用需求。本文将完整拆解Qwen3.7-M
326 1
|
21天前
|
SQL 人工智能 自然语言处理
开放语义模型:构建企业级数据语义层
过去二十年,企业围绕数据建设逐步形成了一套成熟的方法体系,形成了数据仓库(中台),通过BI和报表进行业务赋能。然而,在智能化时代,这些是远远不够的,现在的数据治理体系并不足以让AI真正理解企业业务。换句话说,不能被AI通过消耗Token方式消费的数据平台,是没有未来的。本文介绍另一种受到广泛关注的知识管理的方法,就是(逻辑)语义模型。
|
21天前
|
人工智能 缓存 运维
阿里云百炼通义千问Qwen3.7-Plus完整指南:全维度功能特性、落地优势与优惠订阅方案实操手册
AI应用规模化落地进程中,绝大多数企业与开发者面临性能与成本难以平衡的核心难题:轻量化模型推理、图文解析、长文档处理能力不足,无法支撑中等复杂度智能体任务;旗舰级模型长期高频调用成本偏高,中小团队难以持续投入算力预算。依托自研通义千问技术体系打造的Qwen3.7-Plus,是阿里云百炼平台推出的中端全能型多模态大模型,精准填补轻量化模型与旗舰模型之间的市场空白,在保留百万级上下文、原生图文多模态、全链路工具调用、通用代码生成全套核心能力的基础上,大幅下调调用单价,适配个人开发者、小微创业团队、中小企业全层级使用需求。
514 1

热门文章

最新文章