【Java代码审计 | 第五篇】XSS漏洞成因+实战案例

未经许可,不得转载。

文章目录

    • XSS
    • 漏洞成因
      • 1、直接输出用户输入
      • 2、在JSP中使用EL表达式输出用户输入
      • 3、在Thymeleaf模板中输出用户输入
      • 4、在JavaScript中嵌入用户输入
    • 实战案例
      • 案例1
      • 案例2
      • 案例3

在这里插入图片描述

XSS

XSS(跨站脚本攻击,Cross-Site Scripting) 是一种常见的Web安全漏洞,攻击者通过在网页中注入恶意脚本,使得这些脚本在用户的浏览器中执行。

XSS攻击通常分为以下三种类型
1、存储型XSS:恶意脚本被永久存储在目标服务器上(如数据库),当用户访问包含该脚本的页面时,脚本被执行。
2、反射型XSS:恶意脚本作为请求的一部分发送到服务器,服务器将脚本嵌入到响应中返回给用户,脚本在用户浏览器中执行。
3、DOM型XSS:恶意脚本通过修改页面的DOM结构来执行,不经过服务器处理。

漏洞成因

在 Java Web 应用中,XSS 漏洞通常源于对用户输入缺乏适当的过滤和处理,使得恶意脚本能够被注入并在浏览器中执行。

1、直接输出用户输入

String userInput = request.getParameter("input");
out.println(userInput);  // 直接输出用户输入,可能导致XSS

2、在JSP中使用EL表达式输出用户输入

${param.input}

3、在Thymeleaf模板中输出用户输入

<p th:text="${input}">p>  

4、在JavaScript中嵌入用户输入

String userInput = request.getParameter("input");
out.println("");  // 直接嵌入用户输入到JS中,可导致XSS

此外,还有多种写法导致XSS,例如过滤不全被绕过等。

实战案例

案例1

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
//这一行是JSP的指令,用于指定页面属性:告诉浏览器这个页面是 HTML 格式;指定页面的字符编码为 UTF-8,可以正确显示中文等非 ASCII 字符;JSP 代码使用的语言是 Java。
<!DOCTYPE html>
<html>
<head

你可能感兴趣的:(Java代码审计,java,xss)