我的项目(基于JSP,Struts,hibernate构建)从用户处获取输入并将其保存在数据库中。为了确保我的应用程序安全,我使用了ESAPI jar。
我正在例外
org.owasp.esapi.errors.IntrusionException:输入验证失败
使用方法ESAPI.encoder().canonicalize();
当我们从Skype,MS Word等复制和粘贴数据时,通常会发生这种异常。
当我从Skype Messenger中复制粘贴字符串时,它会自动添加带有div,meta,p等(所有HTML标记)的额外样式数据,这会导致添加许多特殊字符,这可能会导致上述异常。 / p>
但是当我从记事本中复制字符串时,它不会给出异常。
如何忽略此异常,以便添加数据? ESAPI.properties或validation.properties中是否有需要修改的内容?您对此有何看法?
答案 0 :(得分:0)
我认为,当您从(例如)MS Word中粘贴某些内容而不是从诸如记事本之类的简单内容中粘贴内容时,您的怪异问题与其他编码有关。当您使用Word时,它会拾取一些其他元数据,并且“ MS Word”中的默认“粘贴”实际上是“特殊粘贴”。这样做是为了使您可以将文本从一个Office应用程序复制到另一个(例如,Word到Outlook)并“保留格式”。我认为正是这些额外的元数据让您感到困惑,因为ESAPI看起来像是经过多编码的,或者它认为使用了混合编码。
也就是说,如果要进行验证,则实际上应该使用Validator.isValidInput()或Validator.getValidInput()方法之一。默认情况下,此调用为Encoder.canonicalize()(除非您使用'develop'分支中的最新ESAPI,在该分支中您实际上可以禁用规范化-最近的错误修复)。
-凯文