Как запретить доступ к сайту из iframe? - PullRequest
3 голосов
/ 06 декабря 2011

Я заметил, что некоторые сайты запрещают доступ iFrames к своим страницам регистрации и входа в систему из соображений безопасности.Это хорошая идея, на мой взгляд.

Мне интересно, какие настройки им нужны для того, чтобы сделать это, как я хотел бы сделать то же самое на моем сайте.Данный веб-сайт построен на Java и работает на Apache Tomcat.

Если кто-нибудь знает, как это сделать, было бы здорово, если бы вы могли поделиться им.

Ответы [ 3 ]

4 голосов
/ 24 февраля 2015

Это то, что я использовал, и это сработало.Я получил все отсюда: Защита OWASP Clickjacking в Java

В файле web.xml добавьте один из них, в зависимости от того, какую политику вы хотите применить:

<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>

    <!-- use the SameOrigin version to allow your application to frame, but nobody else
    <filter-mapping> 
        <filter-name>ClickjackFilterSameOrigin</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    -->

    ...

Тогда в коде Java:

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;
        //If you have Tomcat 5 or 6, there is a known bug using this code.  You must have the doFilter first:
        chain.doFilter(request, response);
        res.addHeader("X-FRAME-OPTIONS", mode );            
        //Otherwise use this:
        //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;
        }
    }
3 голосов
/ 06 декабря 2011

хорошо, вы должны использовать x-frame-options .

прочитать эту статью, надеюсь, это поможет:

http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx

Я не знаком с JSP и сервлетами, но я думаю, что вы могли бы сделать что-то вроде этого:

public class NoIFrameAllowedServlet extends HttpServlet {

  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
      response.setHeader("X-Frame-Options", "SAMEORIGIN");
    }
0 голосов
/ 06 декабря 2011

Вы можете обнаружить iframe с помощью JavaScript:

location.href != top.location.href -> iframe.

Также вы можете использовать HTTP-заголовок "X-Frame-Options".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...