【问题标题】:Reflected XSS on BufferedReader readLine() methodBufferedReader readLine() 方法上的反射 XSS
【发布时间】:2020-12-18 18:42:59
【问题描述】:

我用Checkmarx工具扫描了一个java web项目,分析在一个响应JSON的web服务执行的方法中标记了一个XSS漏洞,漏洞在while((output = Encode.forJava(br.readLine())) != null) {这一行,具体在@987654322 @。

Checkmarx 说:

攻击者可以通过简单地更改返回的网页 在用户输入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;
        }
    }

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

【问题讨论】:

    标签: java xss bufferedreader encoder checkmarx


    【解决方案1】:

    尝试将传入的数据解析为 JSON,然后在发送之前将其序列化回字符串。

    这样你就可以确保你的方法只返回 JSON 给客户端。如果由于某种原因,您的传入数据不是 JSON,那么您的方法在解析 JSON 时会遇到错误,然后您可以对其进行适当处理。

    Encode.forJava 在这里不是一个有用的方法:它用于编码要插入到 Java 字符串文字中的字符串。

    【讨论】:

    • 这对我有用。进行此修复后,我的 Checkmarx 工具错误全部消失。我刚刚将字符串转换为 Json(使用 ObjectMapper)并再次转换为字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 2013-03-09
    • 2016-01-08
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多