当前位置: 首页 > 知识库问答 >
问题:

BufferedReader readLine()方法上的反射XSS

廉鸿运
2023-03-14

我已经使用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;
        }
    }

有人知道如何解决这个问题吗?

共有1个答案

太叔超英
2023-03-14

尝试将传入的数据解析为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语言程序设计有所帮助。