Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JSP页面中解决这个XSS安全问题_Java_Security_Jsp_Xss_Checkmarx - Fatal编程技术网

Java 如何在JSP页面中解决这个XSS安全问题

Java 如何在JSP页面中解决这个XSS安全问题,java,security,jsp,xss,checkmarx,Java,Security,Jsp,Xss,Checkmarx,我们有一个非常旧的web服务器,其中包含一些JSP页面,如下所示。我想我已经用白名单“[a-zA-Z0-9]*”检查了输入参数“version”。但CheckMarx仍然收到XSS attach警告:“这些不受信任的数据未经适当的清理或编码就直接嵌入到输出中,从而使攻击者能够向输出中注入恶意代码。”。 您知道如何在JSP页面中正确执行此操作吗?它只是用来显示参数输入的内容 <%@ page language="java" contentType="text/h

我们有一个非常旧的web服务器,其中包含一些JSP页面,如下所示。我想我已经用白名单“[a-zA-Z0-9]*”检查了输入参数“version”。但CheckMarx仍然收到XSS attach警告:“这些不受信任的数据未经适当的清理或编码就直接嵌入到输出中,从而使攻击者能够向输出中注入恶意代码。”。 您知道如何在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>

谢谢,

根据您的情况,您的后端做了严格的输入限制,因此不能使用XSS。此警告是误报,请忽略。

根据您的情况,您的后端执行了严格的输入限制,因此不能使用XSS。此警告为假阳性,请忽略。

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

虽然今天您可能会将其标记为假阳性,但有人可能会进来重构代码,可能会无意中更改您的验证正则表达式。因为它被标记为假阳性,所以有可能无法捕获被破坏的验证。这是一个简单的正则表达式,但是想想如果它是一个更复杂的正则表达式,除了其他验证逻辑,会发生什么

如果您使用类似的内容,它会接受您可能存在漏洞的输入,将其更改为经过清理的表单,然后返回经过清理的表单。这将把ESAPI编码器放入数据流中,并将导致结果被删除。Checkmarx SAST在数据流路径上查找消毒器,如果找到消毒器,则不会将数据流路径报告为易受攻击

因此,您的代码如下所示:

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


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

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

虽然今天您可能会将其标记为假阳性,但有人可能会进来重构代码,可能会无意中更改您的验证正则表达式。因为它被标记为假阳性,所以有可能无法捕获被破坏的验证。这是一个简单的正则表达式,但是想想如果它是一个更复杂的正则表达式,除了其他验证逻辑,会发生什么

如果您使用类似的内容,它会接受您可能存在漏洞的输入,将其更改为经过清理的表单,然后返回经过清理的表单。这将把ESAPI编码器放入数据流中,并将导致结果被删除。Checkmarx SAST在数据流路径上查找消毒器,如果找到消毒器,则不会将数据流路径报告为易受攻击

因此,您的代码如下所示:

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


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

我认为您是对的,谢谢。我认为您是对的,谢谢。