Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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 安全缺陷:如何避免?_Java_Javascript_Security_Jsp_Jstl - Fatal编程技术网

Java 安全缺陷:如何避免?

Java 安全缺陷:如何避免?,java,javascript,security,jsp,jstl,Java,Javascript,Security,Jsp,Jstl,我有点为难: 我在java中的bean中设置了很多值,然后使用如下scriplets在javascript和jsp中获取它们: EncodedHere = URLEncoder.encode(encodedStr,"UTF-8"); DecodedHere = URLDecoder.decode(EncodedHere,"UTF-8"); 在mybean.java中: public void setListValue(String s) { listValue = s;

我有点为难:

我在java中的bean中设置了很多值,然后使用如下scriplets在javascript和jsp中获取它们:

     EncodedHere = URLEncoder.encode(encodedStr,"UTF-8");
     DecodedHere = URLDecoder.decode(EncodedHere,"UTF-8");
在mybean.java中:

public void setListValue(String s) {   listValue = s;    }
public String getListValue()       {   return listValue;     } 
input = $input({type:'hidden',id:'ListVal',name:'ListVal',
value: '<%= results.getListValue() %>'});
现在在我的jsp中(在javascript函数中):

public void setListValue(String s) {   listValue = s;    }
public String getListValue()       {   return listValue;     } 
input = $input({type:'hidden',id:'ListVal',name:'ListVal',
value: '<%= results.getListValue() %>'});
这对于那些场景来说是完美的,但是如果我用java设置了变量,然后像上面提到的那样尝试用javascript或jsp检索它们,它就会失败。我也尝试了JSTL方法,但没有成功,似乎JSTL不适合在javascript中获取值。现在,许多人都把这张便笺作为安全隐患。因为它是一个庞大的代码库,所以很难改变它


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

听起来您的安全人员担心XSS(跨站点脚本)攻击,这意味着用户输入的数据在页面上重新显示时可能包含恶意代码。如果是这种情况,您实际上不希望对数据进行URL编码,那么您希望对其进行XML转义,即替换潜在的危险字符,如
,为什么这是一个安全漏洞?您的javascript是在服务器上构建的,通过这样做将其推送到客户机,您的意思是在服务器上运行javascript,然后再将其推送到客户机。当然,您希望客户端能够在屏幕上看到这些值。。。我看不出编码服务器端和解码客户端的意义。如果您希望此连接是安全的,请使用https(ssl)。根据安全人员的说法,可以在此处进行一些恶意的值注入,以防scriplet编码用于检索值,从而导致拖动。此:位于服务器上,因此,除非服务器代码存在注入错误,否则不会进行代码注入。如果您的意思是,当这些值返回到服务器时,它们可以被修改,如果这是一个输入字段,那么用户可以更改值,这就是重点?如果您的意思是介于两者之间,那么无论是否使用此代码,都会出现这种情况,使用https进行连接会停止此问题。如果您有权访问客户端数据所在的管道,则始终可以窥探客户端数据并更改任何数据。使用https连接意味着很难修改。这与跨站点的布鲁斯有关。啊,是的,xss,你只需要正确地避开它。如果我知道我以为你在谈论其他东西,那就好了。在我目前工作的地方,他们担心有人侵入请求和更改数据,所以这是我最关心的问题。很抱歉造成混乱。是的,确实如此,这听起来是正确的。我马上去查一下。非常感谢。非常感谢,伙计,如果我能投100票,我会的。向上投票并接受。如果输出为JavaScript字符串文字,则需要的转义是JS转义,而不是XML/HTML转义。(虽然如果JavaScript本身是HTML格式的,以后可能还需要进行HTML转义…)例如,如果字符串中的最后一个字符是“`”,则不会进行转义,字符串文本将被打开,从而破坏脚本。JS编码最简单的方法是使用JSON编码器。bobince是绝对正确的,在将值放到请求中之前,您还希望javascript转义该值。一个好的XSS转义库是。我更新了答案,加入了一个例子。请查看这篇文章,了解如何防止XSS攻击。@clav:非常感谢,非常感谢。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>