攻击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>");
}

请求头伪造与安全风险

  1. 伪造方法
    • 使用FireFox插件(Tamper Data/Modify Headers)修改请求头
    • Java代码伪造:
URL realUrl = new URL(url);
URLConnection connection = realUrl.openConnection();
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
  1. 安全风险
    • 存储型XSS:当程序将请求头信息存入数据库而未过滤时
    • SQL注入:请求头信息直接拼接到SQL语句中
    • 典型案例:xss.tw平台因未处理请求头导致存储型XSS

0x01 Session安全

Session基础

  • Session是存储在服务器内存中的会话信息
  • 设置Session:
session.setAttribute("name", name);  // 存储用户名
session.setAttribute("ip", request.getRemoteAddr());  // 存储IP

Session生命周期

  1. 默认过期时间:30分钟(可配置,最大1440分钟/24小时)
  2. 服务器重启或关闭会导致Session失效
  3. 浏览器关闭不会使Session失效,只是客户端不再携带SessionID

Session安全问题

  1. Session劫持

    • 通过XSS获取SessionID(JSESSIONID)
    • 攻击者可以伪造SessionID获取用户会话
  2. Session固定攻击(Session Fixation)

    • 攻击者诱导用户使用已知的SessionID
    • 用户登录后,攻击者可使用该SessionID

防御措施

  1. 用户登录后生成新的SessionID
  2. Session会话绑定IP地址
  3. 设置合理的Session过期时间
  4. 对程序员进行安全意识培训

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安全问题

  1. 明文存储:敏感信息(如账号密码)直接存储在Cookie中
  2. Cookie窃取
    • 通过XSS获取:javascript:document.write(document.cookie)
    • 通过伪造Cookie访问系统

0x03 HttpOnly

作用与原理

  • 防止通过JavaScript访问Cookie(document.cookie)
  • 设置后Cookie格式:Cookie: jsessionid=...; HttpOnly;

设置方法

  1. Servlet 3.0+
Cookie cookie = new Cookie("name", "value");
cookie.setHttpOnly(true);
response.addCookie(cookie);
  1. 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内容,只能伪造请求

典型攻击流程

  1. 用户已登录目标网站(如银行系统)
  2. 攻击者构造恶意请求URL(如转账操作)
  3. 诱导用户点击或通过XSS触发请求
  4. 服务器执行恶意请求(如转账)

防御措施

  1. 验证HTTP Referer字段
  2. 在请求中添加token并验证
  3. 在HTTP头中自定义属性并验证
  4. 使用验证码
  5. 关键操作使用POST而非GET

总结

  1. 请求响应安全

    • 不要信任任何客户端数据,包括请求头
    • 对所有用户输入进行过滤和验证
  2. Session安全

    • 登录后重置SessionID
    • 绑定Session与IP
    • 设置合理过期时间
  3. Cookie安全

    • 敏感信息不要存储在Cookie中
    • 启用HttpOnly属性
    • 考虑启用Secure属性(仅HTTPS)
  4. CSRF防御

    • 使用Anti-CSRF Token
    • 关键操作增加二次验证
    • 区分GET和POST的用途

通过全面实施这些安全措施,可以显著提高JavaWeb应用的安全性,防范常见的客户端-服务器交互攻击。

JavaWeb应用安全:CS交互安全详解 0x00 请求与响应(Request & Response) 基本概念 Web开发的核心是Request和Response,它们完成了客户端和服务器端的交互 服务器主要工作是处理客户端请求(Request)并生成响应(Response) 请求头信息 请求头包含客户端信息:浏览器类型、操作系统、请求地址等 Java中通过HttpServletRequest获取请求头: 请求头伪造与安全风险 伪造方法 : 使用FireFox插件(Tamper Data/Modify Headers)修改请求头 Java代码伪造: 安全风险 : 存储型XSS:当程序将请求头信息存入数据库而未过滤时 SQL注入:请求头信息直接拼接到SQL语句中 典型案例:xss.tw平台因未处理请求头导致存储型XSS 0x01 Session安全 Session基础 Session是存储在服务器内存中的会话信息 设置Session: 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安全问题 明文存储 :敏感信息(如账号密码)直接存储在Cookie中 Cookie窃取 : 通过XSS获取: javascript:document.write(document.cookie) 通过伪造Cookie访问系统 0x03 HttpOnly 作用与原理 防止通过JavaScript访问Cookie(document.cookie) 设置后Cookie格式: Cookie: jsessionid=...; HttpOnly; 设置方法 Servlet 3.0+ : web.xml配置 (Servlet 3.0): 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应用的安全性,防范常见的客户端-服务器交互攻击。