Checkmarx在我的Controller类中为以下方法提供了XSS漏洞。 具体来说:此元素的值(ResultsVO)随后会在代码中流过,而没有得到适当的清理或验证,最终会通过以下方法向用户显示:
@RequestMapping(value = "/getresults", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public ResultsVO getConfigResults(@RequestBody ResultsVO resultsVO, HttpServletRequest request)
throws OverrideApplicationException {
String loggedUserId = request.getHeader("USER");
return resultsService.getConfigResults(resultsVO, loggedUserId);
}
ResultsVO对象具有很多String属性,我只是想知道是否有一种优雅的方法来对它们进行编码以防止这种漏洞。
答案 0 :(得分:0)
您需要从其中删除转义字符,例如Html / Js脚本。 您需要使用Jsoup和apache-commons库来转义HTML / Javascript代码。
示例:
String loggedUserId = Jsoup.clean(
org.apache.commons.lang.StringEscapeUtils.escapeHtml(
org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(
request.getHeader("USER")
)));
答案 1 :(得分:0)
尝试一下-对我有用:)
resultsVO = SecurityUtil.sanitizeObject(resultsVO, ResultsVO.class);
public static <T> T sanitizeObject(Object object, Class<T> classOfT){
Gson gson = new Gson();
String json = Jsoup.clean(StringEscapeUtils.escapeHtml4(gson.toJson(object)), Whitelist.basic());
return gson.fromJson(json, classOfT);
}
Checkmarx将通过您报告的问题。 :)
希望这会有所帮助-如果可行,请进行投票