gpt4 book ai didi

java - 安全漏洞 : How to avert them?

转载 作者:行者123 更新时间:2023-11-30 18:03:32 24 4
gpt4 key购买 nike

我有点困惑:

我有很多值,我在 java 的 bean 中设置,然后我在 javascript 和 jsp 中使用像这样的 scriplet 获取它们:

在我的 Bean.java 中:

public void setListValue(String s) {   listValue = s;    }
public String getListValue() { return listValue; }

现在在我的 jsp 中(在 javascript 函数中):

input = $input({type:'hidden',id:'ListVal',name:'ListVal',
value: '<%= results.getListValue() %>'});

有时我也在使用 scriplet 代码来检索 jsp 中的参数。

通常,如果参数从 java 文件传递​​到 java 文件或从 jsp 文件传递​​到 jsp 文件,那么我会像这样使用 native java 编码器和解码器:

     EncodedHere = URLEncoder.encode(encodedStr,"UTF-8");
DecodedHere = URLDecoder.decode(EncodedHere,"UTF-8");

这对于那些场景来说是完美的,但是如果我已经在 java 中设置了我的变量,然后我尝试像前面提到的那样在 javascript 或 jsp 中检索它们,它就会失败。我也尝试过 JSTL 方式,但无法使其工作,似乎 JSTL 不适合在 javascript 中获取值。现在这个 scriplet 已被许多人标记为安全问题。由于它是一个巨大的代码库,因此也很难对其进行更改。

是否有人有任何想法以某种方式避免此安全漏洞。换句话说,有没有一种方法可以在 java 中对变量进行编码,然后在 jsp 和 javascript 中获取编码后的字符串,然后对其进行解码?

最佳答案

听起来您的安全人员担心 XSS(跨站点脚本)攻击,这意味着重新显示在页面上的用户输入的数据可能包含恶意代码。如果是这种情况,您实际上不想对数据进行 URL 编码,您希望对其进行 XML 转义,即替换潜在危险的字符,如 <与它们相应的字符实体,如 &lt; .要在 JSP 中执行此操作,您可以使用 <c:out>标签或 fn:escapeXML EL函数。这在 javascript 代码中工作得很好,即使它有点难看。在您的情况下,它看起来像这样:

在使用 ESAPI 引用实现的转义库将其置于请求之前首先转义 javascript:

String jsEscapedValue = ESAPI.encoder().encodeForJavaScript(results.getListValue());
request.setAttribute("listValue", jsEscapedValue);

然后在页面上使用<c:out>标记为 HTML/XML 转义它:

var myJsValue = '<c:out value="${listValue}"/>';

确保 jSTL.jar 位于类路径中,并确保在页面顶部包含正确的标记库。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

关于java - 安全漏洞 : How to avert them?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16333806/

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