在同一会话中打开 Java Web 应用程序时避免点击劫持
Posted
技术标签:
【中文标题】在同一会话中打开 Java Web 应用程序时避免点击劫持【英文标题】:Avoid clickjacking for Java web application when opened in same session 【发布时间】:2016-06-05 05:37:17 【问题描述】:我正在尝试处理 Java Web 应用程序的点击劫持。 我从Clickjacking Defense Cheat Sheet得到了解决方案
我在web.xml
中添加了过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>OWASP ClickjackFilter</display-name>
<filter>
<filter-name>ClickjackFilterDeny</filter-name>
<filter-class>org.owasp.filters.ClickjackFilter</filter-class>
<init-param>
<param-name>mode</param-name>
<param-value>DENY</param-value>
</init-param>
</filter>
<filter>
<filter-name>ClickjackFilterSameOrigin</filter-name>
<filter-class>org.owasp.filters.ClickjackFilter</filter-class>
<init-param>
<param-name>mode</param-name>
<param-value>SAMEORIGIN</param-value>
</init-param>
</filter>
<!-- use the Deny version to prevent anyone, including yourself, from framing the page -->
<filter-mapping>
<filter-name>ClickjackFilterDeny</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
我的过滤器类看起来像
package org.owasp.filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
public class ClickjackFilter implements Filter
private String mode = "DENY";
/**
* Add X-FRAME-OPTIONS response header to tell IE8 (and any other browsers who
* decide to implement) not to display this content in a frame. For details, please
* refer to http://blogs.msdn.com/sdl/archive/2009/02/05/clickjacking-defense-in-ie8.aspx.
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
HttpServletResponse res = (HttpServletResponse)response;
res.addHeader("X-FRAME-OPTIONS", mode );
chain.doFilter(request, response);
public void destroy()
public void init(FilterConfig filterConfig)
String configMode = filterConfig.getInitParameter("mode");
if ( configMode != null )
mode = configMode;
现在我面临的问题是,这个解决方案只有在我每次都在新会话中打开网页时才有效。
如果我尝试在同一会话中构建应用程序,解决方案将失败。
【问题讨论】:
这方面有什么更新吗? 【参考方案1】:X-Frame-Options
有三种设置:
-
SAMEORIGIN此设置将允许页面显示在与页面本身同源的框架中
拒绝此设置将阻止页面显示在框架或 iframe 中
ALLOW-FROM uri 此设置将允许页面仅在指定的来源上显示
您是否尝试过使用SAMEORIGIN
而不是DENY
来代替mod
?
阅读更多X-Frame-Options Header Types
【讨论】:
以上是关于在同一会话中打开 Java Web 应用程序时避免点击劫持的主要内容,如果未能解决你的问题,请参考以下文章
在 iPhone 上的 Web 应用程序中维护 PHP 会话