有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java修复XSS漏洞

Checkmarx为我的控制器类中的以下方法提供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对象有很多字符串属性,我只是想知道是否有一种优雅的方式对它们进行编码以防止这种漏洞


共 (2) 个答案

  1. # 1 楼答案

    您需要从中删除转义字符,如Html/Js脚本。 您需要使用Jsoup和apachecommons库来转义Html/Javascript代码

    示例:

        String loggedUserId = Jsoup.clean( 
            org.apache.commons.lang.StringEscapeUtils.escapeHtml(
            org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(  
              request.getHeader("USER")
            )));
    
  2. # 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将通过您报告的问题。:)

    希望这将有助于提高投票率,如果成功的话