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对象有很多字符串属性,我只是想知道是否有一种优雅的方法来对它们进行编码,以防止这种漏洞。
发布于 2020-10-01 10:45:03
试试这个--它对我有用:)
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会通过你报告的问题。:)
希望它能帮上忙。
发布于 2020-03-09 11:29:55
您需要从其中删除转义字符,如Html/Js脚本。您需要使用Jsoup和来转义Html/Javascript代码。
示例:
String loggedUserId = Jsoup.clean(
org.apache.commons.lang.StringEscapeUtils.escapeHtml(
org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(
request.getHeader("USER")
)));https://stackoverflow.com/questions/60159583
复制相似问题