我已经使用Checkmarx工具扫描了一个java Web项目,并且分析在执行响应JSON的Web服务的方法中标记了XSS漏洞,该漏洞位于行中((输出= 编码.forJava(br.readLine())!= null) {
,特别是在br.readLine()中
。
Checkmarx说:
攻击者只需在用户输入< code>readLine中提供修改后的数据,就可以更改返回的网页,该数据由< code>NetClientPost方法读取。然后,该输入通过代码直接流向输出网页,无需净化。这可能会导致反射跨站点脚本(XSS)攻击。
我尝试了OWASP for Java,实现了方法Encode。forJava()
,但该漏洞继续出现在分析中。这是方法的实现:
public String NetClientPost (String urlSer, String param){
String result ="";
try {
InetAddress ip = InetAddress.getLocalHost();
String host = ip.getHostAddress();
doTrustToCertificates();
URL url = new URL(urlSer);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setConnectTimeout(2000);
String input = param;
String output = "";
try(OutputStream os = conn.getOutputStream()) {
os.write(input.getBytes());
os.flush();
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP code : " + conn.getResponseCode());
}
try (BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())))) {
while ((output = Encode.forJava(br.readLine())) != null) {//LINE OF CHECKMARX XSS
result += output;
}
}
}
conn.disconnect();
return result;
} catch (MalformedURLException e) {
return result;
} catch (IOException e) {
return result;
} catch (Exception e) {
return result;
}
}
有人知道如何解决这个问题吗?
尝试将传入的数据解析为JSON,然后在发送之前将其序列化回字符串。
这样,您可以确保您的方法只向客户端返回JSON。如果由于某种原因,传入的数据不是JSON,那么您的方法在解析JSON时会遇到错误,您可以适当地处理该错误。
< code>Encode.forJava在这里不是一个有用的方法:它用于对要插入到Java字符串文字中的字符串进行编码。
我不懂编码。我的第一个语言是Clojure。这是我关于stackoverflow的第一个问题。 我编写了一个Clj代码,在lein(Emacs/Cider)上测试了所有函数,我想编译以进行测试。但是Java方法返回了以下错误消息: (在项目文件夹中的终端上): (和getHeight、getRGB、setRGB、java.io.File、javax.imeageio.ImageIO、java.la
主要内容:1 Java8 方法参数反射的介绍,2 Method类,3 Method类的方法,4 Parameter类,5 Parameter类的方法,6 Java8 方法参数反射的案例1 Java8 方法参数反射的介绍 Java提供了一项新功能,您可以在其中获得任何方法或构造函数的形式参数的名称。java.lang.reflect包包含所有必需的类,例如Method和Parameter,可用于参数反射。 2 Method类 Method类提供有关类或接口上的单个方法的信息。反射的方法可以是类方法
我试图将现有类中的静态方法添加到。所有方法都位于同一类中,代码如下: 当我运行代码时,我得到了。有什么想法吗?
问题内容: 我在递归反射函数中调用方法时遇到麻烦。这里是: 我用以下函数调用该函数: 我希望获得的解析方法在我正在打印方法的地方,并针对它运行.Call()。相反,它是打印出来的:我不能反对。 我想我无法将每个方法的返回值都放在头上。我知道我必须使用ValueOf来提取值,但似乎我尝试了任何置换,都是从反射类本身获取方法的:-p 感叹 问题答案: 问题在于该方法在指针接收器上,但是该函数正在与赋值
要 动态获取一个对象方法的信息,首先需要通过下列方法之一创建一个 类型的对象或者数组。 getMethods() getMethods(String name,Class<?> …parameterTypes) getDeclaredMethods() getDeclaredMethods(String name,Class<?>...parameterTypes) 如果是访问指定的构造方法,需要
本文向大家介绍Go语言中使用反射的方法,包括了Go语言中使用反射的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Go语言中使用反射的方法。分享给大家供大家参考。具体实现方法如下: 创建实例如下: 完整代码如下: 希望本文所述对大家的Go语言程序设计有所帮助。