首页 / 常见问题 / Java程序安全加固之Web协议与配置运维安全指南
我们团队曾经遭遇过一次中间人攻击(MITM),虽然损失不大,但那是一次深刻的教训。当时我们只对登录页面启用了HTTPS,其余页面全是HTTP,导致用户的访问轨迹在局域网内被恶意嗅探。痛定思痛,我把目光从代码扩展到了Web协议层和运维配置层。这篇文章,我就从怎么配置安全的HTTPS、如何设置安全的响应头、以及如何在运维层面拦截攻击这几个方面,和大家聊聊Java应用在传输和部署阶段的安全加固心得。

以前觉得只要有SSL证书就行,现在回头看,细节全是坑。
在Spring Security中,配置响应头往往被忽视,但它是防御XSS、点击劫持的最廉价手段。
java http.headers() .contentSecurityPolicy("default-src 'self'; script-src 'self' https://trusted.cdn.com;") .and() .frameOptions().deny() // 防止点击劫持 .and() .xssProtection().block(true) // 启用XSS过滤 .and() .contentTypeOptions().disable(); // 防止MIME类型嗅探

我们配置了Content-Security-Policy(CSP)来限制外部资源加载,即使前端代码被注入恶意脚本,浏览器也会因为白名单限制而拒绝执行,大大降低了XSS危害。
Session ID是用户的身份令牌,必须用心保护。
在Spring Boot中,配置如下: properties server.servlet.session.cookie.http-only=true server.servlet.session.cookie.secure=true server.servlet.session.cookie.same-site=Lax
仅靠代码无法抵御所有流量攻击,我们引入了运维层面的防御手段。

| 接口类型 | 限流阈值(每秒) | 熔断策略 |
|---|---|---|
| 核心交易下单 | 200 | 失败率>50%则熔断,冷却30s |
| 商品查询 | 1000 | 失败率>30%则熔断,冷却10s |
| 管理后台导出 | 10 | 直接限流,返回429 |
在对比几种加密方案时,Jasypt因为轻量且与Spring Boot无缝集成,非常受中小团队青睐。但对于大型集团,HashiCorp Vault更适合,因为它能提供动态秘钥、自动租赁和细粒度权限控制。我们目前采用Jasypt配合K8s Secrets管理的混合方案。
此外,我还关注到几维安全在防篡改方面的能力。他们的加固方案能在运行时检测应用文件是否被修改,一旦发现被篡改,立即触发应急响应。这对于防止黑客在运维层替换JAR包或配置文件非常有用。我们虽然没直接采购,但这种“运行时自我保护”(RASP)的理念,给了我配置监控告警的新思路——监控/usr/local/app目录的文件Hash变化。
Q1:HSTS是什么?是否必须开启? HSTS(HTTP Strict Transport Security)强制浏览器使用HTTPS访问。它虽然不是必须的,但对于安全要求高的系统强烈推荐。开启后,浏览器会记住你的域名只能用HTTPS,从而杜绝SSL剥离攻击。
Q2:WAF误拦截业务正常流量怎么办? 观察WAF日志,找到误拦截的规则ID。如果是严格SQL注入规则误判了业务参数中的特殊字符,可以配置白名单URL或调整规则严重级别。建议先在“观察模式”下运行一周,再开启“拦截模式”。
Q3:Jasypt加密的密码怎么管理? 推荐使用环境变量或K8s Secrets注入,不要硬编码在启动脚本中。大型团队可对接HashiCorp Vault,实现密钥的集中管理、轮换和审计。
Q4:如何验证Cookie是否设置了Secure和HttpOnly? 打开浏览器开发者工具,进入Application/Cookies面板,查看对应Cookie的属性列是否显示Secure和HttpOnly标记。
Q5:接口限流阈值设置多少合适? 根据全链路压测结果。取过去一个月业务高峰期的平均QPS,乘以1.2的安全系数。比如峰值1000 QPS,限流设为1200。随着业务增长,定期(每月)复盘调整阈值。