Author: jacopoc
Date: Mon Dec 29 09:24:46 2014 New Revision: 1648298 URL: http://svn.apache.org/r1648298 Log: A series of cleanup to the integration with OWASP ESAPI. Isolated dependencies on the external OWASP ESAPI jar into the StringUtil class. Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilHttp.java ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/StringUtilTests.java ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizContentTransform.java ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelManagerFactory.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java (original) +++ ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java Mon Dec 29 09:24:46 2014 @@ -39,7 +39,6 @@ import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericValue; import org.ofbiz.entity.util.EntityQuery; import org.ofbiz.webapp.control.ContextFilter; -import org.owasp.esapi.errors.EncodingException; public class ContentUrlFilter extends ContextFilter { public final static String module = ContentUrlFilter.class.getName(); @@ -118,14 +117,10 @@ public class ContentUrlFilter extends Co .queryFirst(); if (contentAssocDataResource != null) { url = contentAssocDataResource.getString("drObjectInfo"); - try { - url = StringUtil.defaultWebEncoder.decodeFromURL(url); - String mountPoint = request.getContextPath(); - if (!(mountPoint.equals("/")) && !(mountPoint.equals(""))) { - url = mountPoint + url; - } - } catch (EncodingException e) { - Debug.logError(e, module); + url = StringUtil.getDecoder("url").decode(url); + String mountPoint = request.getContextPath(); + if (!(mountPoint.equals("/")) && !(mountPoint.equals(""))) { + url = mountPoint + url; } } } catch (Exception e) { Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java Mon Dec 29 09:24:46 2014 @@ -36,14 +36,12 @@ import java.util.regex.Pattern; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Hex; import org.ofbiz.base.lang.Appender; -import org.owasp.esapi.ValidationErrorList; -import org.owasp.esapi.Validator; import org.owasp.esapi.codecs.Codec; import org.owasp.esapi.codecs.HTMLEntityCodec; import org.owasp.esapi.codecs.PercentCodec; +import org.owasp.esapi.errors.EncodingException; import org.owasp.esapi.errors.IntrusionException; import org.owasp.esapi.reference.DefaultEncoder; -import org.owasp.esapi.reference.DefaultValidator; /** * Misc String Utility Functions @@ -56,15 +54,11 @@ public class StringUtil { // FIXME: Not thread safe protected static final Map<String, Pattern> substitutionPatternMap; - /** OWASP ESAPI canonicalize strict flag; setting false so we only get warnings about double encoding, etc; can be set to true for exceptions and more security */ - public static final boolean esapiCanonicalizeStrict = false; - public static final DefaultEncoder defaultWebEncoder; - public static final Validator defaultWebValidator; + private static final DefaultEncoder defaultWebEncoder; static { // possible codecs: CSSCodec, HTMLEntityCodec, JavaScriptCodec, MySQLCodec, OracleCodec, PercentCodec, UnixCodec, VBScriptCodec, WindowsCodec List<Codec> codecList = Arrays.asList(new HTMLEntityCodec(), new PercentCodec()); defaultWebEncoder = new DefaultEncoder(codecList); - defaultWebValidator = new DefaultValidator(); substitutionPatternMap = new HashMap<String, Pattern>(); substitutionPatternMap.put("&&", Pattern.compile("@and", Pattern.LITERAL)); substitutionPatternMap.put("||", Pattern.compile("@or", Pattern.LITERAL)); @@ -74,9 +68,10 @@ public class StringUtil { substitutionPatternMap.put(">", Pattern.compile("@gt", Pattern.LITERAL)); } - public static final SimpleEncoder htmlEncoder = new HtmlEncoder(); - public static final SimpleEncoder xmlEncoder = new XmlEncoder(); - public static final SimpleEncoder stringEncoder = new StringEncoder(); + private static final HtmlEncoder htmlEncoder = new HtmlEncoder(); + private static final XmlEncoder xmlEncoder = new XmlEncoder(); + private static final StringEncoder stringEncoder = new StringEncoder(); + private static final UrlEncoder urlEncoder = new UrlEncoder(); private StringUtil() { } @@ -85,6 +80,10 @@ public class StringUtil { public String encode(String original); } + public static interface SimpleDecoder { + public String decode(String original); + } + public static class HtmlEncoder implements SimpleEncoder { public String encode(String original) { return StringUtil.defaultWebEncoder.encodeForHTML(original); @@ -97,6 +96,26 @@ public class StringUtil { } } + public static class UrlEncoder implements SimpleEncoder, SimpleDecoder { + public String encode(String original) { + try { + return StringUtil.defaultWebEncoder.encodeForURL(original); + } catch (EncodingException ee) { + Debug.logError(ee, module); + return null; + } + } + + public String decode(String original) { + try { + return StringUtil.defaultWebEncoder.decodeFromURL(original); + } catch (EncodingException ee) { + Debug.logError(ee, module); + return null; + } + } + } + public static class StringEncoder implements SimpleEncoder { public String encode(String original) { if (original != null) { @@ -109,7 +128,9 @@ public class StringUtil { // ================== Begin General Functions ================== public static SimpleEncoder getEncoder(String type) { - if ("xml".equals(type)) { + if ("url".equals(type)) { + return StringUtil.urlEncoder; + } else if ("xml".equals(type)) { return StringUtil.xmlEncoder; } else if ("html".equals(type)) { return StringUtil.htmlEncoder; @@ -120,6 +141,14 @@ public class StringUtil { } } + public static SimpleDecoder getDecoder(String type) { + if ("url".equals(type)) { + return StringUtil.urlEncoder; + } else { + return null; + } + } + public static String internString(String value) { return value != null ? value.intern() : null; } @@ -594,6 +623,13 @@ public class StringUtil { return result; } + public static String canonicalize(String value) throws IntrusionException { + return defaultWebEncoder.canonicalize(value); + } + + public static String canonicalize(String value, boolean strict) throws IntrusionException { + return defaultWebEncoder.canonicalize(value, strict); + } /** * Uses a black-list approach for necessary characters for HTML. * Does not allow various characters (after canonicalization), including "<", ">", "&" (if not followed by a space), and "%" (if not followed by a space). @@ -606,7 +642,7 @@ public class StringUtil { // canonicalize, strict (error on double-encoding) try { - value = defaultWebEncoder.canonicalize(value, true); + value = canonicalize(value, true); } catch (IntrusionException e) { // NOTE: using different log and user targeted error messages to allow the end-user message to be less technical Debug.logError("Canonicalization (format consistency, character escaping that is mixed or double, etc) error for attribute named [" + valueName + "], String [" + value + "]: " + e.toString(), module); @@ -651,21 +687,6 @@ public class StringUtil { return value; } - /** - * Uses a white-list approach to check for safe HTML. - * Based on the ESAPI validator configured in the antisamy-esapi.xml file. - * - * @param value - * @param errorMessageList - * @return String with updated value if needed for safer HTML. - */ - public static String checkStringForHtmlSafeOnly(String valueName, String value, List<String> errorMessageList) { - ValidationErrorList vel = new ValidationErrorList(); - value = defaultWebValidator.getValidSafeHTML(valueName, value, Integer.MAX_VALUE, true, vel); - errorMessageList.addAll(UtilGenerics.checkList(vel.errors(), String.class)); - return value; - } - /** * Remove/collapse multiple newline characters * Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilHttp.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilHttp.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilHttp.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilHttp.java Mon Dec 29 09:24:46 2014 @@ -53,8 +53,6 @@ import org.apache.oro.text.regex.Malform import org.apache.oro.text.regex.Pattern; import org.apache.oro.text.regex.PatternMatcher; import org.apache.oro.text.regex.Perl5Matcher; -import org.owasp.esapi.errors.EncodingException; -import org.owasp.esapi.errors.IntrusionException; import com.ibm.icu.util.Calendar; @@ -251,10 +249,11 @@ public class UtilHttp { public static String canonicalizeParameter(String paramValue) { try { - String cannedStr = StringUtil.defaultWebEncoder.canonicalize(paramValue, StringUtil.esapiCanonicalizeStrict); + /** calling canonicalize with strict flag set to false so we only get warnings about double encoding, etc; can be set to true for exceptions and more security */ + String cannedStr = StringUtil.canonicalize(paramValue, false); if (Debug.verboseOn()) Debug.logVerbose("Canonicalized parameter with " + (cannedStr.equals(paramValue) ? "no " : "") + "change: original [" + paramValue + "] canned [" + cannedStr + "]", module); return cannedStr; - } catch (IntrusionException e) { + } catch (Exception e) { Debug.logError(e, "Error in canonicalize parameter value [" + paramValue + "]: " + e.toString(), module); return paramValue; } @@ -791,22 +790,14 @@ public class UtilHttp { buf.append("&"); } } - try { - buf.append(StringUtil.defaultWebEncoder.encodeForURL(name)); - } catch (EncodingException e) { - Debug.logError(e, module); - } + buf.append(StringUtil.getEncoder("url").encode(name)); /* the old way: try { buf.append(URLEncoder.encode(name, "UTF-8")); } catch (UnsupportedEncodingException e) { Debug.logError(e, module); } */ buf.append('='); - try { - buf.append(StringUtil.defaultWebEncoder.encodeForURL(valueStr)); - } catch (EncodingException e) { - Debug.logError(e, module); - } + buf.append(StringUtil.getEncoder("url").encode(valueStr)); /* the old way: try { buf.append(URLEncoder.encode(valueStr, "UTF-8")); } catch (UnsupportedEncodingException e) { Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/StringUtilTests.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/StringUtilTests.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/StringUtilTests.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/StringUtilTests.java Mon Dec 29 09:24:46 2014 @@ -303,9 +303,6 @@ public class StringUtilTests extends Gen checkStringForHtmlStrictNone_test("double-encoding", "%2%353Cscript", "%2%353Cscript", "In field [double-encoding] found character escaping (mixed or double) that is not allowed or other format consistency error: org.owasp.esapi.errors.IntrusionException: Input validation failure"); } - public void testCheckStringForHtmlSafeOnly() { - } - public void testCollapseNewlines() { } Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java (original) +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java Mon Dec 29 09:24:46 2014 @@ -64,7 +64,6 @@ import org.ofbiz.service.ModelService; import org.ofbiz.service.ServiceSynchronization; import org.ofbiz.service.ServiceUtil; import org.ofbiz.service.mail.MimeMessageWrapper; -import org.owasp.esapi.errors.EncodingException; /** * Common Services @@ -539,17 +538,15 @@ public class CommonServices { } public static Map<String, Object> resetMetric(DispatchContext dctx, Map<String, ?> context) { - String name = (String) context.get("name"); - try { - name = StringUtil.defaultWebEncoder.decodeFromURL(name); - } catch (EncodingException e) { - return ServiceUtil.returnError("Exception thrown while decoding metric name \"" + name + "\""); + String originalName = (String) context.get("name"); + String name = StringUtil.getDecoder("url").decode(originalName); + if (name == null) { + return ServiceUtil.returnError("Exception thrown while decoding metric name \"" + originalName + "\""); } Metrics metric = MetricsFactory.getMetric(name); if (metric != null) { metric.reset(); return ServiceUtil.returnSuccess(); - } return ServiceUtil.returnError("Metric \"" + name + "\" not found."); } Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java Mon Dec 29 09:24:46 2014 @@ -62,7 +62,6 @@ import org.ofbiz.webapp.view.ViewHandler import org.ofbiz.webapp.view.ViewHandlerException; import org.ofbiz.webapp.website.WebSiteProperties; import org.ofbiz.webapp.website.WebSiteWorker; -import org.owasp.esapi.errors.EncodingException; import org.python.modules.re; /** @@ -1116,13 +1115,11 @@ public class RequestHandler { if (queryString.length() > 1) { queryString.append("&"); } - - try { - queryString.append(StringUtil.defaultWebEncoder.encodeForURL(name)); + String encodedName = StringUtil.getEncoder("url").encode(name); + if (encodedName != null) { + queryString.append(encodedName); queryString.append("="); - queryString.append(StringUtil.defaultWebEncoder.encodeForURL(value)); - } catch (EncodingException e) { - Debug.logError(e, module); + queryString.append(StringUtil.getEncoder("url").encode(value)); } } } Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizContentTransform.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizContentTransform.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizContentTransform.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizContentTransform.java Mon Dec 29 09:24:46 2014 @@ -28,7 +28,6 @@ import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.StringUtil; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.webapp.taglib.ContentUrlTag; -import org.owasp.esapi.errors.EncodingException; import freemarker.core.Environment; import freemarker.ext.beans.BeanModel; @@ -93,11 +92,7 @@ public class OfbizContentTransform imple return; } - try { - requestUrl = StringUtil.defaultWebEncoder.decodeFromURL(requestUrl); - } catch (EncodingException e) { - Debug.logError(e, module); - } + requestUrl = StringUtil.getDecoder("url").decode(requestUrl); // make the link StringBuilder newURL = new StringBuilder(); Modified: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelManagerFactory.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelManagerFactory.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelManagerFactory.java (original) +++ ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelManagerFactory.java Mon Dec 29 09:24:46 2014 @@ -40,7 +40,6 @@ import org.ofbiz.base.util.GeneralExcept import org.ofbiz.base.util.StringUtil; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.UtilXml; -import org.owasp.esapi.errors.EncodingException; import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -103,7 +102,7 @@ public class LabelManagerFactory { } } - public void findMatchingLabels(String component, String fileName, String key, String locale) throws MalformedURLException, SAXException, ParserConfigurationException, IOException, EncodingException, GeneralException { + public void findMatchingLabels(String component, String fileName, String key, String locale) throws MalformedURLException, SAXException, ParserConfigurationException, IOException, GeneralException { if (UtilValidate.isEmpty(component) && UtilValidate.isEmpty(fileName) && UtilValidate.isEmpty(key) && UtilValidate.isEmpty(locale)) { // Important! Don't allow unparameterized queries - doing so will result in loading the entire project into memory return; @@ -124,7 +123,7 @@ public class LabelManagerFactory { for (Node propertyNode : UtilXml.childNodeList(resourceElem.getFirstChild())) { if (propertyNode instanceof Element) { Element propertyElem = (Element) propertyNode; - String labelKey = StringUtil.defaultWebEncoder.canonicalize(propertyElem.getAttribute("key")); + String labelKey = StringUtil.canonicalize(propertyElem.getAttribute("key")); String labelComment = ""; for (Node valueNode : UtilXml.childNodeList(propertyElem.getFirstChild())) { if (valueNode instanceof Element) { @@ -135,7 +134,7 @@ public class LabelManagerFactory { if( localeName.contains("_")) { localeName = localeName.replace('_', '-'); } - String labelValue = StringUtil.defaultWebEncoder.canonicalize(UtilXml.nodeValue(valueElem.getFirstChild())); + String labelValue = StringUtil.canonicalize(UtilXml.nodeValue(valueElem.getFirstChild())); LabelInfo label = labels.get(labelKey + keySeparator + fileInfo.getFileName()); if (UtilValidate.isEmpty(label)) { @@ -149,12 +148,12 @@ public class LabelManagerFactory { localesFound.add(localeName); labelComment = ""; } else if (valueNode instanceof Comment) { - labelComment = labelComment + StringUtil.defaultWebEncoder.canonicalize(valueNode.getNodeValue()); + labelComment = labelComment + StringUtil.canonicalize(valueNode.getNodeValue()); } } labelKeyComment = ""; } else if (propertyNode instanceof Comment) { - labelKeyComment = labelKeyComment + StringUtil.defaultWebEncoder.canonicalize(propertyNode.getNodeValue()); + labelKeyComment = labelKeyComment + StringUtil.canonicalize(propertyNode.getNodeValue()); } } } Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java Mon Dec 29 09:24:46 2014 @@ -71,7 +71,7 @@ public class WidgetWorker { // We may get an encoded request like: /projectmgr/control/EditTaskContents?workEffortId=10003 // Try to reducing a possibly encoded string down to its simplest form: /projectmgr/control/EditTaskContents?workEffortId=10003 // This step make sure the following appending externalLoginKey operation to work correctly - localRequestName = StringUtil.defaultWebEncoder.canonicalize(localRequestName); + localRequestName = StringUtil.canonicalize(localRequestName); Appendable localWriter = new StringWriter(); if ("intra-app".equals(targetType)) { @@ -300,7 +300,7 @@ public class WidgetWorker { writer.append("<input name=\""); writer.append(parameter.getKey()); writer.append("\" value=\""); - writer.append(StringUtil.htmlEncoder.encode(parameter.getValue())); + writer.append(StringUtil.getEncoder("html").encode(parameter.getValue())); writer.append("\" type=\"hidden\"/>"); } } Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java Mon Dec 29 09:24:46 2014 @@ -3088,7 +3088,7 @@ public final class MacroFormRenderer imp parameters.append(parameter.getName()); parameters.append("'"); parameters.append(",'value':'"); - parameters.append(StringUtil.htmlEncoder.encode(parameter.getValue(context))); + parameters.append(StringUtil.getEncoder("html").encode(parameter.getValue(context))); parameters.append("'}"); } parameters.append("]"); Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java?rev=1648298&r1=1648297&r2=1648298&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java Mon Dec 29 09:24:46 2014 @@ -88,7 +88,7 @@ public class HtmlWidget extends ModelScr } @Override public String getAsString() { - return StringUtil.htmlEncoder.encode(super.getAsString()); + return StringUtil.getEncoder("html").encode(super.getAsString()); } } @@ -100,7 +100,7 @@ public class HtmlWidget extends ModelScr @Override public String getAsString() { - return StringUtil.htmlEncoder.encode(super.getAsString()); + return StringUtil.getEncoder("html").encode(super.getAsString()); } } |
Free forum by Nabble | Edit this page |