Author: fmeschbe
Date: Fri Dec  5 11:33:07 2014
New Revision: 1643241

URL: http://svn.apache.org/viewvc?rev=1643241&view=rev
Log:
SLING-4177 Properly XSS escape CSS style string

(applying patch by Vlad Bailescu, thanks alot)

Modified:
    
sling/trunk/contrib/extensions/xss/src/main/java/org/apache/sling/xss/XSSAPI.java
    
sling/trunk/contrib/extensions/xss/src/main/java/org/apache/sling/xss/impl/XSSAPIImpl.java
    
sling/trunk/contrib/extensions/xss/src/test/java/org/apache/sling/xss/impl/XSSAPIImplTest.java
    
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/XSSRuntimeExtension.java

Modified: 
sling/trunk/contrib/extensions/xss/src/main/java/org/apache/sling/xss/XSSAPI.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/xss/src/main/java/org/apache/sling/xss/XSSAPI.java?rev=1643241&r1=1643240&r2=1643241&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/xss/src/main/java/org/apache/sling/xss/XSSAPI.java
 (original)
+++ 
sling/trunk/contrib/extensions/xss/src/main/java/org/apache/sling/xss/XSSAPI.java
 Fri Dec  5 11:33:07 2014
@@ -158,6 +158,16 @@ public interface XSSAPI {
      */
     public String encodeForJSString(String source);
 
+    /**
+     * Encodes a souce string for writing to CSS string content.
+     * DO NOT USE FOR WRITING OUT ARBITRARY CSS TOKENS; YOU MUST USE A 
VALIDATOR FOR THAT!
+     * (Encoding only ensures the source string cannot break out of its 
context.)
+     *
+     * @param source the input to encode
+     * @return an encoded version of the source
+     */
+    public String encodeForCSSString(String source);
+
 
     // 
=============================================================================================
     // FILTERS

Modified: 
sling/trunk/contrib/extensions/xss/src/main/java/org/apache/sling/xss/impl/XSSAPIImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/xss/src/main/java/org/apache/sling/xss/impl/XSSAPIImpl.java?rev=1643241&r1=1643240&r2=1643241&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/xss/src/main/java/org/apache/sling/xss/impl/XSSAPIImpl.java
 (original)
+++ 
sling/trunk/contrib/extensions/xss/src/main/java/org/apache/sling/xss/impl/XSSAPIImpl.java
 Fri Dec  5 11:33:07 2014
@@ -289,6 +289,13 @@ public class XSSAPIImpl implements XSSAP
         return Encode.forJavaScript(source);
     }
 
+    /**
+     * @see org.apache.sling.xss.XSSAPI#encodeForCSSString(String)
+     */
+    public String encodeForCSSString(String source) {
+        return Encode.forCssString(source);
+    }
+
     // 
=============================================================================================
     // FILTERS
     //

Modified: 
sling/trunk/contrib/extensions/xss/src/test/java/org/apache/sling/xss/impl/XSSAPIImplTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/xss/src/test/java/org/apache/sling/xss/impl/XSSAPIImplTest.java?rev=1643241&r1=1643240&r2=1643241&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/xss/src/test/java/org/apache/sling/xss/impl/XSSAPIImplTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/xss/src/test/java/org/apache/sling/xss/impl/XSSAPIImplTest.java
 Fri Dec  5 11:33:07 2014
@@ -338,6 +338,27 @@ public class XSSAPIImplTest {
     }
 
     @Test
+    public void TestEncodeForCSSString() {
+        String[][] testData = {
+                // Source   Expected result
+                {"test"   , "test"},
+                {"\\"     , "\\5c"},
+                {"'"      , "\\27"},
+                {"\""     , "\\22"}
+        };
+
+        for (String[] aTestData : testData) {
+            String source = aTestData[0];
+            String expected = aTestData[1];
+
+            String result = xssAPI.encodeForCSSString(source);
+            if (!result.equals(expected)) {
+                fail("Encoding '" + source + "', expecting '" + expected + "', 
but got '" + result + "'");
+            }
+        }
+    }
+
+    @Test
     public void TestGetValidStyleToken() {
         String[][] testData = {
                 // Source                           Expected result

Modified: 
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/XSSRuntimeExtension.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/XSSRuntimeExtension.java?rev=1643241&r1=1643240&r2=1643241&view=diff
==============================================================================
--- 
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/XSSRuntimeExtension.java
 (original)
+++ 
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/XSSRuntimeExtension.java
 Fri Dec  5 11:33:07 2014
@@ -119,6 +119,8 @@ public class XSSRuntimeExtension impleme
                         return xssapi.getValidStyleToken(text, "");
                     case SCRIPT_STRING:
                         return xssapi.encodeForJSString(text);
+                    case STYLE_STRING:
+                        return xssapi.encodeForCSSString(text);
                     case ELEMENT_NAME:
                         return escapeElementName(text);
                     case HTML:


Reply via email to