【Java代码审计 | 第六篇】XSS防范
文章目录
- XSS防范
- 使用HTML转义
- 使用Content Security Policy (CSP)
- 输入验证
- 使用安全的库和框架
- 避免直接使用用户输入构建JavaScript代码

XSS防范
使用HTML转义
在输出用户输入时,对特殊字符进行转义,防止它们被解释为HTML或JavaScript代码。
例如,使用StringEscapeUtils:
import org.apache.commons.text.StringEscapeUtils;String userInput = request.getParameter("input");
String safeInput = StringEscapeUtils.escapeHtml4(userInput); // 转义HTML
out.println(safeInput);
举个例子,以下是漏洞代码:
<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>XSS 测试</title>
</head>
<body>
<h1>在JavaScript中直接使用用户输入导致XSS</h1>
<form action="index.jsp" method="get"><label>请输入内容:</label><input type="text" name="input"><button type="submit">提交</button>
</form>
<h2>输出结果:</h2>
<p><%String userInput = request.getParameter("input");if(userInput != null){out.println("<script>var input = '" + userInput + "';</script>");}%>
</p>
</body>
</html>
代码直接将用户输入插入JavaScript中,导致XSS:

使用StringEscapeUtils进行转义可有效防止XSS:
<%@ page import="org.apache.commons.text.StringEscapeUtils" contentType="text/html; charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>XSS 测试</title>
</head>
<body>
<h1>在JavaScript中直接使用用户输入导致XSS</h1>
<form action="index.jsp" method="get"><label>请输入内容:</label><input type="text" name="input"><button type="submit">提交</button>
</form>
<h2>输出结果:</h2>
<p><%String userInput = request.getParameter("input");String safeInput = StringEscapeUtils.escapeHtml4(userInput); // 转义HTMLif(userInput != null){out.println("<script>var input = '" + safeInput + "';</script>");}%>
</p>
</body>
</html>
JSP中可以使用JSTL的<c:out>标签实现转义:
<c:out value="${param.input}" escapeXml="true"/> <!-- 自动转义HTML -->
Thymeleaf框架能够自动转义:
<p th:text="${input}"></p> <!-- Thymeleaf默认会自动转义 -->
使用Content Security Policy (CSP)
CSP是一种浏览器安全机制,可以通过HTTP头来限制页面中可以执行的脚本来源,从而减少XSS攻击的风险。
response.setHeader("Content-Security-Policy", "default-src 'self'; script-src 'self'");
输入验证
对用户输入进行严格验证,确保其符合预期的格式和类型。例如,使用正则表达式检查输入是否为合法的电子邮件地址或电话号码:
String userInput = request.getParameter("input");
if (!userInput.matches("[a-zA-Z0-9]+")) {// 输入不合法,拒绝处理
}
使用安全的库和框架
许多现代框架提供了内置的XSS防护机制。例如,Spring框架的HtmlUtils可以安全处理用户输入:
import org.springframework.web.util.HtmlUtils;String userInput = request.getParameter("input");
String safeInput = HtmlUtils.htmlEscape(userInput); // 使用Spring的HtmlUtils进行转义
out.println(safeInput);
避免直接使用用户输入构建JavaScript代码
尽量避免将用户输入直接嵌入JavaScript代码中。如果必须这样做,应进行适当的转义。
String userInput = request.getParameter("input");
String safeInput = StringEscapeUtils.escapeEcmaScript(userInput); // 转义JavaScript
out.println("<script>var input = '" + safeInput + "';</script>");
相关文章:
【Java代码审计 | 第六篇】XSS防范
文章目录 XSS防范使用HTML转义使用Content Security Policy (CSP)输入验证使用安全的库和框架避免直接使用用户输入构建JavaScript代码 XSS防范 使用HTML转义 在输出用户输入时,对特殊字符进行转义,防止它们被解释为HTML或JavaScript代码。 例如&…...
Android WebSocket工具类:重连、心跳、消息队列一站式解决方案
依赖库 使用 OkHttp 的WebSocket支持。 在 build.gradle 中添加依赖: implementation com.squareup.okhttp3:okhttp:4.9.3WebSocket工具类实现 import okhttp3.*; import android.os.Handler; import android.os.Looper; import android.util.Log;import java.ut…...
认识vue2脚手架
1.认识脚手架结构 使用VSCode将vue项目打开: package.json:包的说明书(包的名字,包的版本,依赖哪些库)。该文件里有webpack的短命令: serve(启动内置服务器) build命令…...
【STM32】STM32系列产品以及新手入门的STM32F103
📢 STM32F103xC/D/E 系列是一款高性能、低功耗的 32 位 MCU,适用于工业、汽车、消费电子等领域;基于 ARM Cortex-M3,主频最高 72MHz,支持 512KB Flash、64KB SRAM,适合复杂嵌入式应用,提供丰富的…...
<建模软件安装教程1>Blender4.2系列
Blender4.2安装教程 0注意:Windows环境下安装 第一步,百度网盘提取安装包。百度网盘链接:通过网盘分享的文件:blender.zip 链接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取码: 0309 --来自百度网盘超级会员v3的分…...
CentOS Docker 安装指南
CentOS Docker 安装指南 引言 Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker 容器是完全使用沙箱机制,相互之…...
分布式ID生成方案:数据库号段、Redis与第三方开源实现
分布式ID生成方案:数据库号段、Redis与第三方开源实现 引言 在分布式系统中,全局唯一ID生成是核心基础能力之一。本文针对三种主流分布式ID生成方案(数据库号段模式、Redis方案、第三方开源框架)进行解析,从实现原理…...
tcc编译器教程2 编译lua解释器
本文主要介绍了使用tcc编译器编译lua解释器源码。 1 介绍 lua是一门编程语言,开源且源码很容易编译,我平时用来测试C语言编程环境时经常使用。一般能编译成功就说明编程环境设置正常。下面用之前设置好的tcc编程环境进行测试。 2 获取源码 我一般有保留多个版本的lua源码进…...
利用 requestrepo 工具验证 XML外部实体注入漏洞
1. 前言 在数字化浪潮席卷的当下,网络安全的重要性愈发凸显。应用程序在便捷生活与工作的同时,也可能暗藏安全风险。XXE(XML外部实体)漏洞作为其中的典型代表,攻击者一旦利用它,便能窃取敏感信息、掌控服务…...
在 Maven 中使用 <scope> 元素:全面指南
目录 前言 在 Maven 中, 元素用于定义依赖项的作用范围,即依赖项在项目生命周期中的使用方式。正确使用 可以帮助我们优化项目的构建过程,减少不必要的依赖冲突,并提高构建效率。本文将详细介绍 的使用步骤、常见作用范围、代码…...
uni_app实现下拉刷新
1. 在页面配置中启用下拉刷新 首先,你需要在页面的 pages.json 文件中启用下拉刷新功能。 {"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首页","enablePull…...
PCIe协议之RCB、MPS、MRRS详解
✨前言: PCIe总线的存储器写请求、存储器读完成等TLP中含有数据负载,即Data Payload。Data Payload的长度和MPS(Max Payload Size)、MRRS(Max Read Request Size)和RCB(Read Completion Bounda…...
达梦数据库在Linux,信创云 安装,备份,还原
(一)系统环境检查 1操作系统:确认使用的是国产麒麟操作系统,检查系统版本是否兼容达梦数据库 V8。可以通过以下命令查看系统版本: cat /etc/os-release 2硬件资源:确保服务器具备足够的硬件资源࿰…...
使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile
比起容器、镜像来说,Dockerfile 非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会生成一个 Layer,而 Docker 顺序执行这个文件里的所有步骤&…...
爬虫案例九js逆向爬取CBA中国篮球网
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、CBA网站分析二、代码 前言 提示:这里可以添加本文要记录的大概内容: 爬取CBA中国篮球网 提示:以下是本篇文章正文内容…...
【DeepSeek】Ubuntu快速部署DeepSeek(Ollama方式)
文章目录 人人都该学习的DeepSeekDeepSeek不同版本功能差异DeepSeek与硬件直接的关系DeepSeek系统兼容性部署方式选择部署步骤(Ollama方式)1.选定适合的deepseek版本2.环境准备3.安装Ollama4.部署deepseek5.测试使用 人人都该学习的DeepSeek DeepSeek 作…...
C++后端服务器开发技术栈有哪些?有哪些资源或开源库拿来用?
一、 C后台服务器开发是一个涉及多方面技术选择的复杂领域,特别是在高性能、高并发的场景下。以下是C后台服务器开发的一种常见技术路线,涵盖了从基础到高级的技术栈。 1. 基础技术栈 C标准库 C11/C14/C17/C20:使用现代C特性,如…...
基于SpringBoot的餐厅点餐管理系统设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
服务端和客户端通信(TCP)
服务端 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks;namespace TeachTcpServer {class Program{static void Main(string[] args){#region 知识点一 …...
Java 大视界 -- Java 大数据在智能体育赛事运动员表现分析与训练优化中的应用(122)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
提示工程架构师用Agentic AI,为智能城市提升品质生活
提示工程架构师:借助Agentic AI提升智慧城市品质生活 一、引言 (Introduction) 钩子 (The Hook) 想象一下,你生活在这样一个城市:每天清晨,你的智能设备会根据当天的天气、你的日程安排,精准推荐最适宜的衣物和出行方式…...
如何用JSON Crack将复杂数据一键转化为交互式图表:新手必备的可视化指南
如何用JSON Crack将复杂数据一键转化为交互式图表:新手必备的可视化指南 【免费下载链接】jsoncrack.com ✨ Innovative and open-source visualization application that transforms various data formats, such as JSON, YAML, XML, CSV and more, into interacti…...
Polars 2.0快速接入全链路拆解(含Benchmark实测:比Pandas快42.6×,比Dask低68%内存)
第一章:Polars 2.0快速接入全链路概览Polars 2.0 是一个高性能、内存友好的 DataFrame 库,专为现代多核 CPU 和列式分析场景设计。它通过 Rust 编写核心引擎,Python 接口(polars-py)提供零拷贝数据交互能力,…...
Windows下OpenClaw安装指南:一键对接nanobot超轻量镜像
Windows下OpenClaw安装指南:一键对接nanobot超轻量镜像 1. 为什么选择OpenClaw nanobot组合 作为一个长期在Windows环境下折腾自动化工具的技术爱好者,我一直在寻找一个既轻量又强大的本地AI助手方案。直到遇到OpenClaw和nanobot的组合,才…...
VSCode安装与应用
vscode官网:https://code.visualstudio.com/Download 点击下一步 注意:这里将创建桌面快捷和下面的1、2勾选,3取消掉(以便后续VSCode能右键快捷打开相关文件,3若不取消会将改变文件默认图标为VSCode,并且打…...
人形机器人强化学习实战:从奖励设计到PPO算法优化
1. 人形机器人强化学习入门:为什么奖励设计是关键 第一次接触人形机器人强化学习时,我被一个简单问题困扰了很久:为什么同样的算法,换个任务就要重新调参?后来发现问题的核心在于奖励函数设计。就像教小孩学走路&#…...
基于51单片机与HX711的智能电子秤Proteus仿真与计价系统实现
1. 项目背景与核心功能 最近在整理实验室材料时,发现很多同学对电子秤项目的仿真实现存在困惑。这个基于51单片机和HX711的智能电子秤系统,不仅能够完成基础称重,还能实现商品计价、LCD显示等完整超市电子秤功能。我在实际调试中发现…...
RLT火了,但拧螺丝的真问题真是它解决的吗?
先说结论RLT的核心价值在于“分工”:让笨重但泛化好的VLA做感知和粗规划,让轻快但专精的小网络做在线微调,这是一种计算和样本成本的折中架构。它没有解决数据收集的根本成本,而是优化了“数据利用率”和“策略更新效率”…...
技术深度解析:ER-Save-Editor如何实现跨平台艾尔登法环存档编辑
技术深度解析:ER-Save-Editor如何实现跨平台艾尔登法环存档编辑 【免费下载链接】ER-Save-Editor Elden Ring Save Editor. Compatible with PC and Playstation saves. 项目地址: https://gitcode.com/GitHub_Trending/er/ER-Save-Editor 艾尔登法环存档编辑…...
CameraFileCopy:重新定义无网络文件传输的安卓应用
CameraFileCopy:重新定义无网络文件传输的安卓应用 【免费下载链接】cfc Demo/test android app for libcimbar. Copy files over the cell phone camera! 项目地址: https://gitcode.com/gh_mirrors/cfc/cfc 在移动设备普及的今天,我们依然经常面…...
