提问者:小点点

修复Checkmarx XSS漏洞


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属性,我只是想知道是否有一种优雅的方法来编码它们以防止此漏洞。


共2个答案

匿名用户

试试这个--它对我很管用:)

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将通过您报告的问题。:)

希望它会有所帮助 - 如果有效,请投赞成票

匿名用户

您需要从中删除转义字符,例如Html / Js脚本。你需要使用Jsoup和阿帕奇共享资源库来转义HTML/Javascript代码。

例:

    String loggedUserId = Jsoup.clean( 
        org.apache.commons.lang.StringEscapeUtils.escapeHtml(
        org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(  
          request.getHeader("USER")
        )));

相关问题