如何解决在 BufferedReader readLine() 方法上反射 XSS
我用 Checkmarx 工具扫描了一个 java web 项目,分析在执行 web 服务响应 JSON 的方法中标记了一个 XSS 漏洞,该漏洞在 while((output = Encode.forJava(br.readLine())) != null) {
行中,特别是在br.readLine()
。
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;
}
}
有人知道如何解决这个问题吗?
解决方法
尝试将传入的数据解析为 JSON,然后在发送之前将其序列化回字符串。
这样您就可以确保您的方法只向客户端返回 JSON。如果由于某种原因,您的传入数据不是 JSON,那么您的方法在解析 JSON 时会遇到错误,然后您可以适当地处理该错误。
Encode.forJava
在这里不是一个有用的方法:它用于对要插入到 Java 字符串文字中的字符串进行编码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。