gpt4 book ai didi

java - JSP页面如何解决这个XSS安全问题

转载 作者:行者123 更新时间:2023-12-05 02:45:30 28 4
gpt4 key购买 nike

我们有一个非常古老的 Web 服务器,其中包含一些 JSP 页面,如下所示。我想我已经用白名单“[a-zA-Z0-9]*”检查了输入参数“version”。但是 CheckMarx 仍然收到 XSS 附加警告:“这种不受信任的数据未经适当的清理或编码就直接嵌入到输出中,使攻击者能够将恶意代码注入(inject)到输出中。”。您知道如何在 JSP 页面中正确执行此操作吗?它只是用来显示参数输入的东西。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="com.mytest.util.SecurityService"%>
<html>
<%
String version = SecurityService.getSafeContent(request.getParameter("version"));
%>

<head>
<title>My Project</title>
</head>
<body>
<div style="text-align: center">
<table>
<tr>
<td>
<div style="text-align: center"><%=version%></div>
</td>
</tr>
</table>
</div>
</body>
</html>
public class SecurityService{
public static final String PARAM_INVALID_DATA_POINT = "";

public static String getSafeContent(String content) {
if(!StringUtils.isEmpty(content) && content.matches("[a-zA-Z0-9]*")) {
return content;
}
return PARAM_INVALID_DATA_POINT;
}
}

谢谢,

最佳答案

这是因为您正在进行验证而不是清理。验证是一种控制流类型的方法,用于检查易受攻击的数据(如果无效则......否则......)。 Checkmarx SAST只做数据流分析,不做控制流分析。

虽然今天您可以将其标记为误报,但有人可能会介入并重构代码并可能无意中更改您的验证正则表达式。由于它被标记为误报,因此可能不会捕获到损坏的验证。这是一个简单的正则表达式,但想一想如果它是一个除了其他验证逻辑之外的更复杂的正则表达式会发生什么。

如果你使用类似 ESAPI encoder 的东西,它接受您可能存在漏洞的输入,将其更改为经过清理的形式,然后返回经过清理的形式。这会将 ESAPI 编码器放入数据流中,并应导致结果被删除。 Checkmarx SAST 在数据流路径上寻找 sanitizer ,如果找到 sanitizer ,则不会将数据流路径报告为易受攻击。

所以你会有这样的代码:

<%
String version = ESAPI.encoder().encodeForHTML(request.getParameter("version"));
%>

还有其他编码器选项,您只需确保它们在您的 Checkmarx SAST 版本中被识别。

关于java - JSP页面如何解决这个XSS安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65990702/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com