攻击JavaWeb应用[2]-CS交互安全
字数 1553 2025-08-29 08:31:42
JavaWeb应用安全:CS交互安全详解
0x00 请求与响应(Request & Response)
基本概念
- Web开发的核心是Request和Response,它们完成了客户端和服务器端的交互
- 服务器主要工作是处理客户端请求(Request)并生成响应(Response)
请求头信息
- 请求头包含客户端信息:浏览器类型、操作系统、请求地址等
- Java中通过HttpServletRequest获取请求头:
Enumeration e = request.getHeaderNames();
while (e.hasMoreElements()) {
String name = (String) e.nextElement();
String value = request.getHeader(name);
out.println(name + "=" + value + "<br>");
}
请求头伪造与安全风险
- 伪造方法:
- 使用FireFox插件(Tamper Data/Modify Headers)修改请求头
- Java代码伪造:
URL realUrl = new URL(url);
URLConnection connection = realUrl.openConnection();
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
- 安全风险:
- 存储型XSS:当程序将请求头信息存入数据库而未过滤时
- SQL注入:请求头信息直接拼接到SQL语句中
- 典型案例:xss.tw平台因未处理请求头导致存储型XSS
0x01 Session安全
Session基础
- Session是存储在服务器内存中的会话信息
- 设置Session:
session.setAttribute("name", name); // 存储用户名
session.setAttribute("ip", request.getRemoteAddr()); // 存储IP
Session生命周期
- 默认过期时间:30分钟(可配置,最大1440分钟/24小时)
- 服务器重启或关闭会导致Session失效
- 浏览器关闭不会使Session失效,只是客户端不再携带SessionID
Session安全问题
-
Session劫持:
- 通过XSS获取SessionID(JSESSIONID)
- 攻击者可以伪造SessionID获取用户会话
-
Session固定攻击(Session Fixation):
- 攻击者诱导用户使用已知的SessionID
- 用户登录后,攻击者可使用该SessionID
防御措施
- 用户登录后生成新的SessionID
- Session会话绑定IP地址
- 设置合理的Session过期时间
- 对程序员进行安全意识培训
0x02 Cookie安全
Cookie基础
- Cookie是以文件形式缓存在客户端的凭证
- 创建Cookie:
Cookie cookies = new Cookie("name", name);
cookies.setMaxAge(60*60*24*30); // 设置有效期(30天)
cookies.setDomain(".example.com"); // 设置有效域
response.addCookie(cookies); // 添加到响应
Cookie安全问题
- 明文存储:敏感信息(如账号密码)直接存储在Cookie中
- Cookie窃取:
- 通过XSS获取:
javascript:document.write(document.cookie) - 通过伪造Cookie访问系统
- 通过XSS获取:
0x03 HttpOnly
作用与原理
- 防止通过JavaScript访问Cookie(document.cookie)
- 设置后Cookie格式:
Cookie: jsessionid=...; HttpOnly;
设置方法
- Servlet 3.0+:
Cookie cookie = new Cookie("name", "value");
cookie.setHttpOnly(true);
response.addCookie(cookie);
- web.xml配置(Servlet 3.0):
<session-config>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
<session-timeout>30</session-timeout>
</session-config>
0x04 CSRF(跨站请求伪造)
攻击原理
- 黑客借助受害者的cookie骗取服务器信任
- 攻击者无法获取cookie内容,只能伪造请求
典型攻击流程
- 用户已登录目标网站(如银行系统)
- 攻击者构造恶意请求URL(如转账操作)
- 诱导用户点击或通过XSS触发请求
- 服务器执行恶意请求(如转账)
防御措施
- 验证HTTP Referer字段
- 在请求中添加token并验证
- 在HTTP头中自定义属性并验证
- 使用验证码
- 关键操作使用POST而非GET
总结
-
请求响应安全:
- 不要信任任何客户端数据,包括请求头
- 对所有用户输入进行过滤和验证
-
Session安全:
- 登录后重置SessionID
- 绑定Session与IP
- 设置合理过期时间
-
Cookie安全:
- 敏感信息不要存储在Cookie中
- 启用HttpOnly属性
- 考虑启用Secure属性(仅HTTPS)
-
CSRF防御:
- 使用Anti-CSRF Token
- 关键操作增加二次验证
- 区分GET和POST的用途
通过全面实施这些安全措施,可以显著提高JavaWeb应用的安全性,防范常见的客户端-服务器交互攻击。