我用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;
}
}
你知道怎么解决这个问题吗?
1条答案
按热度按时间rur96b6h1#
尝试将传入的数据解析为json,然后在发送之前将其序列化为字符串。
这样您就可以确保您的方法只向客户机返回json。如果由于某种原因,传入的数据不是json,那么您的方法在解析json时会遇到错误,您可以适当地处理该错误。
Encode.forJava
在这里不是一个有用的方法:它用于编码要插入到java字符串文本中的字符串。