我是有点咸菜:安全缺陷:如何避免它们?
我有很多我在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中获取编码后的字符串,然后解码它?
为什么这是一个安全缺陷?您的JavaScript正在构建在服务器上,通过执行<%= results.getListValue()%>来推送到客户端。您要在服务器上运行此服务器之前,它将转到客户端。当然你希望客户端能够真正看到屏幕上的值......我没有看到编码服务器端和解码客户端的重点。如果您希望此连接安全,请使用https(ssl)。 – TheKingDave 2013-05-02 08:54:55
那么根据安全人员的说法,在这里可以进行一些恶意值注入,以防使用脚本编码来检索值,从而拖动。 – 2013-05-02 09:13:11
这:<%= results.getListValue()%>是在服务器上,所以没有代码注入,除非服务器代码有注入错误。如果你的意思是,当这些值返回到服务器,他们可以被修改,如果这是一个输入字段,那么用户可以改变这个点的值?如果你的意思是介于这两者之间,那么无论这个代码如何,情况总是如此,使用https进行连接可以阻止这个问题。如果您有权访问其数据所在的管道,则可以随时监听客户端数据并更改任何数据。使用https连接意味着很难修改。 – TheKingDave 2013-05-02 10:39:27