2013-05-02 60 views
1

我是有点咸菜:安全缺陷:如何避免它们?

我有很多我在Java中的豆正在设置的值,然后我得到他们的JavaScript和JSP使用scriplets这样的:

在我的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文件,然后我使用本地Java编码器和解码器是这样的:

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

这完美的作品对这些方案,但如果我已经在java中设置了我的变量,然后尝试按照上述方式在javascript或jsp中检索它们,但它失败了。我已经尝试了JSTL的方式,但无法使其工作,似乎JSTL不适合在javascript中获取值。现在这个脚本已被许多人标记为安全问题。由于它是一个庞大的代码库,所以很难改变它。

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

+0

为什么这是一个安全缺陷?您的JavaScript正在构建在服务器上,通过执行<%= results.getListValue()%>来推送到客户端。您要在服务器上运行此服务器之前,它将转到客户端。当然你希望客户端能够真正看到屏幕上的值......我没有看到编码服务器端和解码客户端的重点。如果您希望此连接安全,请使用https(ssl)。 – TheKingDave 2013-05-02 08:54:55

+0

那么根据安全人员的说法,在这里可以进行一些恶意值注入,以防使用脚本编码来检索值,从而拖动。 – 2013-05-02 09:13:11

+0

这:<%= results.getListValue()%>是在服务器上,所以没有代码注入,除非服务器代码有注入错误。如果你的意思是,当这些值返回到服务器,他们可以被修改,如果这是一个输入字段,那么用户可以改变这个点的值?如果你的意思是介于这两者之间,那么无论这个代码如何,情况总是如此,使用https进行连接可以阻止这个问题。如果您有权访问其数据所在的管道,则可以随时监听客户端数据并更改任何数据。使用https连接意味着很难修改。 – TheKingDave 2013-05-02 10:39:27

回答

2

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

首先逃脱的JavaScript您使用转义库ESAPI参考实现把它的请求之前:

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"%> 
+0

是的,这听起来是正确的。我要马上检查一下。非常感谢 。 – 2013-05-02 14:01:09

+0

非常感谢,如果我能把它投票100次,我会有的。向上投票并被接受。 – 2013-05-02 14:24:21

+0

没问题,很高兴它解决了。 – clav 2013-05-02 20:41:09