任何人都可以帮助我理解什么是错的。
@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。
答案 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页面的一部分。