网页中与脚本相关的HTML标记的中和不正确(XSS)

时间:2017-12-01 08:33:16

标签: java veracode

任何人都可以帮助我理解什么是错的。

 @ResponseBody
 @RequestMapping(value = "/compare", method = RequestMethod.POST, 
                                     produces = { "application/json" })
    public List<A> compareDocument(HttpServletRequest request,
            @RequestBody B b) {

        C c = new C();
        c.setSourceContactCode(b.getTargetContactID());
        c.setSourceProfileID(b.getTargetProfileID());
        B b= this.Service.getAllPortfolio(c);
        List<A> targetDocument = b.getDocuments();
        return this.Service.compareDocument(b, targetDocument);
            }

veracode正在向我显示错误:

         c.setSourceProfileID(b.getTargetProfileID());

B和C是值对象(Vo),其实例是JSON属性。所有getter和setter方法都返回/使用String。

1 个答案:

答案 0 :(得分:0)

(B)b对象来自请求(用户输入),因此Veracode将其视为不受信任的数据。有人可以把脚本代码放在那里可以执行。例如:

<script>alert('Collect data and send to my server or other actions');</script>

当您记录此数据并通过某些html工具查看或将此数据放在网站页面上时,它可以在加载时执行并导致攻击。 Veracode希望你逃脱像'&lt;'这样的特殊字符和'&gt;'。 可以使用ESAPI工具完成,例如:

String encodedForHtml = ESAPI.encoder().encodeForHTML(b.getTargetProfileID());
c.setSourceProfileID(encodedForHtml);

这将转义特殊字符,字符串将作为字符串打印,但不作为html页面的一部分。