我的项目(在JSP,Struts,Hibernate上构建)获取来自用户的输入,并将其保存在数据库中。为了使我的应用程序安全,我使用了Esapi Jar。
我得到异常
org.owasp.esapi.errors.intrusionException:输入验证失败
在方法ESAPI.encoder().canonicalize();
当我们从Skype,MS Word等复制和粘贴数据时,通常会出现此异常。
当我从Skype Messenger复制粘贴字符串时,它会自动添加DIV,META,P等(所有HTML标签)的额外样式数据,这会导致添加许多特殊字符,这些特殊字符可能导致上述例外。<<<<<<<<<<<<<<<<<<
但是,当我从记事本复制字符串时,它不会给出异常。
如何忽略此异常,以便添加数据?在esapi.properties或验证中,是否可以修改一些东西?您的观点是什么?
我认为您的怪异问题与您粘贴(例如)MS Word的某些内容而不是简单的notepad之类的东西时,与其他编码有关。当您说话时,它会拾取一些额外的元数据,而" ms word"中的默认"粘贴"确实是"粘贴的特殊"。这样做是为了使您可以将文本从一个Office应用程序复制到另一个办公室应用程序(例如Word to Outlook)和"保留格式"。我认为您正在获得的所有其他元数据都使您感到困惑,因为它可能看起来像Esapi,就像它是多模拟的,或者认为使用了混合编码。
也就是说,如果您想进行验证,则您确实应该使用验证器.isvalidInput()或validator.getValidInput()方法之一。默认情况下,此调用concoder.caronicalize()(除非您使用"开发"分支的最新ESAPI,否则您可以在其中实际上禁用规范化 - 最近的错误修复了)。
-kevin