bufferedreader readline()方法上的反射xss

frebpwbc  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(506)

我用checkmarx工具扫描了一个javaweb项目,分析标记了一个方法中的xss漏洞,在该方法中,一个响应json的web服务被执行,该漏洞位于 while((output = Encode.forJava(br.readLine())) != null) { ,特别是在 br.readLine() .
马克思说:
攻击者只需在用户输入中提供修改过的数据,就可以更改返回的网页 readLine ,由 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;
        }
    }

你知道怎么解决这个问题吗?

rur96b6h

rur96b6h1#

尝试将传入的数据解析为json,然后在发送之前将其序列化为字符串。
这样您就可以确保您的方法只向客户机返回json。如果由于某种原因,传入的数据不是json,那么您的方法在解析json时会遇到错误,您可以适当地处理该错误。 Encode.forJava 在这里不是一个有用的方法:它用于编码要插入到java字符串文本中的字符串。

相关问题