PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


X-Frame-Options Header gegen ClickJacking

with 13 comments

ClickJacking hatte ich in einem älteren Beitrag bereits erwähnt, und es gibt bereits seit langem Gegenmaßnahmen. Der IE8 hat damals ein neues Feature eingeführt, welches mittlerweile von den anderen Browsern auch umgesetzt wurde, und dieses Feature stelle ich hier vor.

Wir als Webseitenbetreiber können damit unterbinden, dass unsere Seite in einem Frame (IFrame eingeschlossen) dargestellt werden. Dazu überprüft der Browser, ob auf der eingebundenen Seite der HTTP-Header X-Frame-Options existiert. Für diesen Header gibt es zwei mögliche Werte:

DENY: Diese Seite darf in keinem Frame dargestellt werden.

SAMEORIGIN: Diese Seite darf nur in einem Frame dargestellt werden wenn die beiden Domains übereinstimmen.

Auf dieser Testseite kann man das ganze nochmal genauer betrachten und sehen ob der eigene Browser die Frames unterdrückt (2 der 3 IFrames sollten keinen Inhalt anzeigen).

Wie kann man nun diesen Header senden? Da gibt es mehrere Möglichkeiten:

  • Im Apache eine Einstellung für den ganze Host (bzw. VHost):
    Header always append X-Frame-Options DENY
  • Im IIS: Internet Service Manager öffnen -> HTTP Headers Tab -> Custom Header hinzufügen:
    Custom Header Name: X-Frame-Options
    Custom Header Value: DENY
  • In PHP:
    <?php
    header("X-Frame-Options: DENY");
    ?>
  • Im Zend Framework als Controller Plugin:
    <?php
    
    class App_Controller_Plugins_XFrameOptionHeader extends Zend_Controller_Plugin_Abstract
    {
        public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
        {
            $this->_response->setHeader('X-FRAME-OPTIONS', 'DENY');
        }
    }

Sollte man einzelne Seiten doch in einem IFrame erlauben wollen muss man entsprechende Ausnahmen einbauen, damit der Header dann nicht gesetzt wird.

Written by Michael Kliewe

Juni 18th, 2010 at 10:43 am

13 Responses to 'X-Frame-Options Header gegen ClickJacking'

Subscribe to comments with RSS or TrackBack to 'X-Frame-Options Header gegen ClickJacking'.

  1. Cooler Artikel, seit wann unterstützen die verschiedenen Browser denn diese Kopfzeile?
    Ansonsten: Wäre ich noch bei flattr würde ich diesen Artikel nochmal flattrn (blödes Wort, oder?).
    Super Beitrag, wir werden das bestimmt mal brauchen können. Ist gebookmarked (auch kein besseres Wort, oder?).
    Gruß, Sascha

    Sascha Presnac

    18 Jun 10 at 11:35

  2. Im MSDN steht eine Liste:

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

    Interessant, dass es Firefox anscheinend noch nicht nativ kann, sondern nur mit NoScript (was ja eigentlich auch jeder installiert haben sollte).

    Michael Kliewe

    18 Jun 10 at 12:00

  3. nette info! danke … kann ich gerade gebrauchen!

    jd

    18 Jun 10 at 16:58

  4. unter debian muss noch ein „a2enmod headers“ gefolgt von nem apache reload gemacht werden wenn es nicht aktiviert ist .. nur als hinweis 😉

    für menschen die nicht wissen wie sie dieses mod_headers aktivieren …

    http://httpd.apache.org/docs/2.0/mod/mod_headers.html

    jd

    18 Jun 10 at 17:03

  5. … vor 10 Jahren haben wir einfach Framebreaker in die Seiten gebaut, das waren zwei Zeilen Javascript.

    Heute man dazu also http header manipulieren.
    Soso.

    Stephen

    25 Jun 10 at 13:07

  6. @Stephen: Es soll auch Leute geben die haben NoScript installiert und trauen fremden Seiten nicht ohne Vorbehalt. Javascript ist IMMER optional und du musst davon ausgehen dass es deaktiviert ist.

    Michael Kliewe

    25 Jun 10 at 13:38

  7. @Stephen: Außerdem kannst du mit etwas krimineller Energie ganz schnell Codes finden, die Framebrecher so manipulieren, dass Sie nicht mehr funktionieren – oder zumindest so lange verzögert werden, dass man diesen Code umschreiben kann (jQuery’s Selecotor Tags können das).
    Von daher gilt: Never trust the client!

    Sascha Presnac

    25 Jun 10 at 13:44

  8. Hat jemand schon mal probiert ob das auch mit den HTML meta-tags (http-equiv) geht?

    hakre

    25 Jun 10 at 16:13

  9. Warum probierst du es nicht aus?
    Und ja, es klappt.

    Sascha

    3 Jul 10 at 14:22

  10. […] […]

  11. Hallo, sehr guter Beitrag, bei mir trifft das auch zu die Option unterbindet das einbinden von Fotos mit iframe in einen Beitrag bei WordPress, in welche php Datei muss ich den Header Code einsetzen, weiss jemand mehr???

    Gruss Jns

    jens

    13 Okt 10 at 14:32

  12. Vielen Dank für diesen Beitrag. Es scheint ja als habe die Header Option nur Vorteile. Gibt es einen Trade-Off?

    Ich muss sie ja auch nicht unbedingt im Bootstrap setzen, dort wo ich Frame-Darstellung meiner Seite erlauben möchte, kann ich den Header ja deaktivieren.

    Jakob

    4 Jun 13 at 10:24

  13. Sehr gut, habe die php-Variante auf unserer Seite gleich mal umgesetzt. Danke.

    Jan Hartmann

    7 Dez 20 at 11:03

Leave a Reply

You can add images to your comment by clicking here.