我们有一个 Web 应用程序,它使用 ESAPI 2.1.0 jar 来验证 URL 和查询字符串(例如http://www.example.com/?keyword=<script>alert("hacking")</script>
请求。我们已经实现了一个新的过滤器类实现基本过滤器以在 doFilter 方法中实现相同的功能。
我们看到了同样的主要性能问题。下面使用的代码
示例 1:
StringBuffer requestUrl = httpServletRequest.getRequestURL();
String queryString = httpServletRequest.getQueryString();
if (StringUtils.isNotBlank(queryString)) {
requestUrl.append('?').append(queryString);
}
String url = requestUrl.toString();
boolean isSafe = ESAPI.validator().isValidInput("URL", url, "URL", url.length(), true, false);
if (!isSafe) {
logger.error("uNSAFE : URL contain scripting elements .sOMEONE TRYING TO MANIPULATE THE url");
validation.properties:
Validator.URL=^(ht|f)tp(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0- 9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\:\\'\\/\\\\\\+=&%\\$#_]*)?$
示例 2:(也尝试了以下)创建了一个带有 main 函数的简单程序
List<String> myList = myset(); (the list size is 700 which holds valid and malformed/invalid url)
System.out.println("Total Size of URLS" +myList.size());
for (int i = 0; i < myList.size(); i++) {
System.out.println("Item No" +i);
boolean isSafe = ESAPI.validator().isValidInput(
"URL", validation(myList.get(i)), "URL", url1.length(),false,false);
}
您能否帮助了解我们对使用上述逻辑的性能影响?(示例 1 和示例 2)我们还观察到不安全 URL 的性能非常缓慢。