我希望有人可以帮助我解决一些问题。
我将 OWASP ESAPI 2.1.0 与 JavaEE 一起使用,以帮助我验证 Web 应用程序中的某些条目。在某些时候,我需要验证 Windows 文件路径,因此我在“validation.properties”中添加了一个新的属性条目,如下所示:
Validator.PathFile=^([a-zA-Z]:)?(\\\\[\\w. -]+)+$
Run Code Online (Sandbox Code Playgroud)
例如,当我尝试通过 ESAPI 验证像“C:\TEMP\file.txt”这样的字符串时,我得到一个 ValidationException:
ESAPI.validator().getValidInput("PathFile", "C:\\TEMP\\file.txt", "PathFile", 100, false);
Run Code Online (Sandbox Code Playgroud)
或者,我还尝试使用java.util.regex.Pattern类来测试具有相同字符串示例的相同正则表达式,并且它工作正常:
Pattern.matches("^([a-zA-Z]:)?(\\\\[\\w. -]+)+$", "C:\\TEMP\\file.txt")
Run Code Online (Sandbox Code Playgroud)
我必须说我在“validation.properties”中添加了其他正则表达式并且工作正常。为什么这个这么难?谁能帮我解决这个问题?
我有两个模块将使用具有相同属性文件的ESAPI(ESAPI和validation.properties).
这些模块输出到耳朵中包含的战争.
我在其中一个war文件中有属性文件,在服务器启动时可以找到它们.另一个war文件似乎工作正常,并没有抱怨它无法在日志中找到属性文件.
我正在使用ESAPI来清理html和url参数 - 我想知道我是否甚至需要这些属性文件才能被第二个模块访问,或者任何一个,因为没有配置,一切都是使用默认值完成的.
对某些字符使用 EncodeForHTML 时遇到问题(在这种情况下是表情符号)
在这种情况下的文本是: ??abc ???????
现在如果我只是一个直接的输出
<cfoutput>#txt#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
它显示正确,没有问题,但如果我先使用 EncodeForHTML
<cfoutput>#EncodeForHTML(txt)#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
我明白了??a??b??c?? ???????? ???????????????????????? ??
我也使用 EncodeForXML 和 esapiEncode 对其进行了测试以确保;所有人都给了我相同的结果。我已经验证了 Lucee 中的编码设置是 UTF-8,并且元字符集标记也设置为 UTF-8。我找不到任何文档 re: EncodeForHTML 说它是否对字符编码进行了任何更改,是否需要字符编码是特定的,或者它是否有任何已知的表情符号或某些代码点问题。
我感谢任何人可以提供的任何帮助或澄清。
编辑:谢谢大家。希望我能接受多个答案。
我们在 Spring Web 应用程序中添加了一个过滤器,用于检查所有传入请求是否存在可能导致 XSS 漏洞的内容。但是,当它尝试写入日志时,我们得到以下堆栈跟踪:
com.blah.blah.web.controllers.ExceptionLoggingController - ERROR: Exception: code=500,uri=/post.html,servlet=dispatch,class=org.owasp.esapi.errors.ConfigurationException,from=1.2.3.4,message=Request processing failed; nested exception is org.owasp.esapi.errors.ConfigurationException: java.lang.IllegalArgumentException: Classname cannot be null or empty. HTTPUtilities type name cannot be null or empty.
org.owasp.esapi.errors.ConfigurationException: java.lang.IllegalArgumentException: Classname cannot be null or empty. HTTPUtilities type name cannot be null or empty.
at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:105)
at org.owasp.esapi.ESAPI.httpUtilities(ESAPI.java:121)
at org.owasp.esapi.ESAPI.currentRequest(ESAPI.java:70)
at org.owasp.esapi.reference.JavaLogFactory$JavaLogger.log(JavaLogFactory.java:308)
at org.owasp.esapi.reference.JavaLogFactory$JavaLogger.warning(JavaLogFactory.java:242)
at org.owasp.esapi.reference.DefaultEncoder.canonicalize(DefaultEncoder.java:181)
at org.owasp.esapi.reference.DefaultEncoder.canonicalize(DefaultEncoder.java:120)
at com.blah.blah.web.MyFilter.removeXSS(MyFilter.java:26)
Run Code Online (Sandbox Code Playgroud)
我在类路径上有 ESAPI.properties,这似乎可以正常工作,并且确实配置了“丢失”的类:
ESAPI.HTTPUtilities=org.owasp.esapi.reference.DefaultHTTPUtilities
Run Code Online (Sandbox Code Playgroud)
DefaultHTTPUtilities 也在类路径上。
我想防止我的 web 应用程序中的 XSS 攻击,所以我想在将用户输入的数据保存在数据库中以在另一个 JSP 页面中显示之前对表单中输入的数据进行转义,并且我在两种方法之间犹豫不决:
StringEscapeUtils.escapeHtml(),对于输入REGGAETON / SALSA给我相同的结果,但对于ESAPI.encoder().encodeForHTML()相同的输入,输出将是REGGAETON & #x2f; 莎莎舞
我无法使用在ESAPI类“ 下存在的方法”
java.lang.String getValidInput(java.lang.String context,
java.lang.String input,
java.lang.String type,
int maxLength,
boolean allowNull)
throws ValidationException,
IntrusionException
Parameters:
type - The regular expression name that maps to the actual regular expression from "ESAPI.properties".
Run Code Online (Sandbox Code Playgroud)
如何从ESAPI.properties文件传递参数类型?我可以参考使用属性文件值的任何示例吗?