[ 
https://issues.apache.org/jira/browse/SHINDIG-1192?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12765777#action_12765777
 ] 

Paul Lindner commented on SHINDIG-1192:
---------------------------------------

can you upload this patch to codereview.appspot.com?  Something this big should 
have a review..

Thanks for the 

> content-rewrite is not compliant with Open Social v0.9, plus some bugs
> ----------------------------------------------------------------------
>
>                 Key: SHINDIG-1192
>                 URL: https://issues.apache.org/jira/browse/SHINDIG-1192
>             Project: Shindig
>          Issue Type: Bug
>          Components: Java
>    Affects Versions: 1.1-BETA3
>            Reporter: Jon Weygandt
>         Attachments: fix-1192-bug.patch
>
>
> Description of the issues, and details of the associated patch file:
> Issues:
> 1) Not compliant with 0.9 spec: 
> http://www.opensocial.org/Technical-Resources/opensocial-spec-v09/Gadgets-API-Specification.html#rfc.section.3.4
>      Shindig uses include-urls, exclude-urls (note: plural) which are regular 
> expressions
>      Specification use include-url, exclude-url which are case insensitive 
> matches, plus it allows multiple occurrences of these tags.
>      Note: no effort to support minify for this patch
>    Fix: Alter the code to honor these tags. For backward compatibility the 
> old "plural" tags are also accepted. 
> 2) Throughout Shindig parameters "debug" and "nocache" have been used and 
> honored for various requests. For the rewriters it is missing. "nocache" is 
> obvious. "debug" is not used today, but could be used to support the minify 
> options of the future.
>    Fix: Alter the rewriters to properly pass the debug and nocache from the 
> HttpRequest or GadgetContext to the end URL.
> 3) The concat rewriter takes a list of URLs and rewrites them so that it does 
> not exceed some max length. However the test was done after the appending 
> which could lead to a URL that was too long.
>    Fix: Altered the algorithm so it will check the predicted length prior to 
> appending.
> 4) The concat rewriter did not handle a gadget authors link that was 
> originally too long. 
>    Fix: Since concat is for the benefit of the gadget author (as opposed to 
> security), original links that are too long are simply passed through without 
> being rewritten.
> 5) The ConcatProxyServlet is vulnerable to response splitting: 
> http://www.google.com/search?q=response+splitting+vulnerability&ie=utf-8
>    Fix: Check for \r \n in header
> 6) The concat rewriter (or concat servlet) did not do caching header 
> correctly.
>    Fix: Borrowing from how the proxy rewriters did it, added the refresh 
> parameter to the concat URL
> Enhancements
> 1) Because: this is optional feature; and this costs resources server side, I 
> felt that to allow a gadget author to include additional resources that were 
> explicitly excluded by the original server config, or to allow the gadget 
> author to extend the expires time beyond the original server config times 
> would be an issue. Therefore added a configuration parameter to shindig 
> properties "shindig.content-rewrite.only-allow-excludes=false", which when 
> set to true will: disallow additional include-url(s); will honor the original 
> exclude-urls; disallow an increase in expires time; not allow additional 
> extensions to be cached. 
> 2) There was some initial effort to allow the rewriters to be "guiced" into 
> the code by using a protected method to create a proxying link rewriter, 
> HTMLContentRewriter.createLinkRewriter() & 
> CssRequestRewriter.createLinkRewriter(). However with 3 different types of 
> link rewriters used across 4 files, plus who knows where else it will be 
> used. This pattern of protected methods is not scalable. Chose to use a 
> factory pattern for the 3 link rewriters.
> Specific Files:
> java/common/conf/shindig.properties
>      New property
> java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ConcatProxyServlet.java
>      Support for "nocache"
>      Fixes the response splitting vulnerability.
>      Also if "refresh" is not present, will explicitly send nocache headers.
> java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingProxyingLinkRewriterFactory.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/render/DefaultSanitizingProxyingLinkRewriterFactory.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingProxyingLinkRewriter.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ConcatLinkRewriterFactory.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultConcatLinkRewriterFactory.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ConcatLinkRewriter.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterFactory.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DefaultProxyingLinkRewriterFactory.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriter.java
>      An interface for the factory, default implementation of the factory, and 
> the rewriter.
>      Sanitizing and Concat were generally extracted from their "inner class" 
> definitions.
>      Fixed Concat to always include refresh on the URL
> java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureFactory.java
>      Needed to handle additional include/exclude tags, and new 
> only-allow-excludes option.
> java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeature.java
>      Reuses some algorithms from the original, but is best reviewed as new 
> code implementing the algorithms necessary to support the original and new 
> features.
> java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriter.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriter.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriter.java
> java/gadgets/src/main/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriter.java
>      Refactored to use new factory pattern.
> java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/Feature.java
>      Needed a new accessor method
> Unit Test Files:
> java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingGadgetRewriterTest.java
> java/gadgets/src/test/java/org/apache/shindig/gadgets/render/SanitizingRequestRewriterTest.java
> java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ProxyingLinkRewriterTest.java
> java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCase.java
> java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/ContentRewriterFeatureTestCaseOS9.java
> java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java
> java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CssRequestRewriterTest.java
> java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/BaseRewriterTestCase.java
> java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritestyle2-expected.html
> java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css
> java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritescriptbasic.html
>    In General:
>      Mods for use of the new Factory Pattern
>      Tests for debug and nocache
>      Test for only-allow-excludes
>      Concat now uses "refresh", added to tests
>    ContentRewriterFeatureTestCaseOS9.java
>      New file based on ContentRewriterFeatureTestCase.java, but uses the 
> OpenSocial v 0.9 specification to perform the tests.
>    HTMLContentRewriterTest.java
>    rewritescriptbasic.html
>      Added test for the splitting of concat rewrites into multiple concats.
>    HTMLContentRewriterTest.java
>    CssRequestRewriterTest.java
>    BaseRewriterTestCase.java
>      Somehow the refresh time was "HTTP", rather than a valid integer! I 
> changed this to a valid integer, and fixed the test standards. Additional 
> added tests to specifically test when refresh is not a valid integer.
>      Added tests to ensure the ConcatRewriter will properly split the rewrite 
> into different URLs.
>      

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to