You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gc...@apache.org on 2011/12/10 21:20:10 UTC
svn commit: r1212864 - in
/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal:
context/TrinidadPhaseListener.java renderkit/core/xhtml/HtmlRenderer.java
Author: gcrawford
Date: Sat Dec 10 20:20:09 2011
New Revision: 1212864
URL: http://svn.apache.org/viewvc?rev=1212864&view=rev
Log:
TRINIDAD-2169 add framebusting support to handle clickjacking attacks
frameworks based on trinidad have their own framebusting support, but still hit the phaselistener, so move header code into HtmlRenderer so the trinidad setting is only used for trinidad pages.
Modified:
myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/TrinidadPhaseListener.java
myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/HtmlRenderer.java
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/TrinidadPhaseListener.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/TrinidadPhaseListener.java?rev=1212864&r1=1212863&r2=1212864&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/TrinidadPhaseListener.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/TrinidadPhaseListener.java Sat Dec 10 20:20:09 2011
@@ -26,7 +26,6 @@ import javax.faces.event.PhaseListener;
import org.apache.myfaces.trinidadinternal.config.xmlHttp.XmlHttpConfigurator;
import org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderKit;
-import org.apache.myfaces.trinidadinternal.util.FrameBustingUtils;
/**
* Performs some trinidad logic and provides some hooks.
@@ -90,31 +89,7 @@ public class TrinidadPhaseListener imple
{
FacesContext context = event.getFacesContext();
markPostback(context);
- }
- else if (phaseId == PhaseId.RENDER_RESPONSE)
- {
- // add response headers for framebusting if needed
-
- FacesContext context = event.getFacesContext();
- String frameBusting = FrameBustingUtils.getFrameBustingValue(context);
-
- if (! FrameBustingUtils.FRAME_BUSTING_NEVER.equalsIgnoreCase(frameBusting))
- {
- // TODO: Mozilla has introduced CSP
- // https://wiki.mozilla.org/Security/CSP/Specification
- // which we may want to support at some point
-
- // the X-Frame-Options header doesn't work on all browsers, but we're adding it anyway
- if (FrameBustingUtils.FRAME_BUSTING_ALWAYS.equalsIgnoreCase(frameBusting))
- {
- context.getExternalContext().addResponseHeader("X-Frame-Options", "deny");
- }
- else
- {
- context.getExternalContext().addResponseHeader("X-Frame-Options", "sameorigin");
- }
- }
- }
+ }
}
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/HtmlRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/HtmlRenderer.java?rev=1212864&r1=1212863&r2=1212864&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/HtmlRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/HtmlRenderer.java Sat Dec 10 20:20:09 2011
@@ -31,6 +31,7 @@ import org.apache.myfaces.trinidad.bean.
import org.apache.myfaces.trinidad.component.html.HtmlFrameBorderLayout;
import org.apache.myfaces.trinidad.component.html.HtmlHtml;
import org.apache.myfaces.trinidad.context.RenderingContext;
+import org.apache.myfaces.trinidadinternal.util.FrameBustingUtils;
/**
@@ -81,6 +82,34 @@ public class HtmlRenderer extends XhtmlR
FacesBean bean
) throws IOException
{
+
+ // add response headers for framebusting if needed
+ String frameBusting = FrameBustingUtils.getFrameBustingValue(context);
+
+ if (! FrameBustingUtils.FRAME_BUSTING_NEVER.equalsIgnoreCase(frameBusting))
+ {
+ try
+ {
+ // TODO: Mozilla has introduced CSP
+ // https://wiki.mozilla.org/Security/CSP/Specification
+ // which we may want to support at some point
+
+ // the X-Frame-Options header doesn't work on all browsers, but we're adding it anyway
+ if (FrameBustingUtils.FRAME_BUSTING_ALWAYS.equalsIgnoreCase(frameBusting))
+ {
+ context.getExternalContext().addResponseHeader("X-Frame-Options", "deny");
+ }
+ else
+ {
+ context.getExternalContext().addResponseHeader("X-Frame-Options", "sameorigin");
+ }
+ }
+ catch(UnsupportedOperationException uoe)
+ {
+ // framebusting is also supported in the BodyRenderer
+ }
+ }
+
ResponseWriter writer = context.getResponseWriter();
String docType = getDocType(context, comp, bean);