2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

concrete5 で作ったホームページのうち、一部のページを iframe で呼び出し可能にする x_frame_options設定

Last updated at Posted at 2016-11-30

concrete5 で作ったページを iframe で呼び出し可能にしたかったので、以下のような作業を行いました。concrete5のバージョンは5.7.5.9です。

デフォルトの設定を確認する

デフォルトでは、concrete5 で作ったページを iframe で表示したい場合、同一ドメイン内からのみ許可しています。
chromeで確認してみると、下記のようになります。
sameorigin.png

この設定により、クリックジャッキングと呼ばれる攻撃を防いでいます。

クリックジャッキングについて

クリックジャッキングとは、罠ページ(A)に、誤操作させたいページ(B)を重ね合わせて、ユーザーが意図していない操作を行わせる攻撃方法です。

  1. 誤操作させたいページ(B)を透明にした状態で罠ページ(A)に重ねて表示する
  2. ユーザーが罠ページ(A)でクリックなどの操作を行う
  3. 実際には、誤操作させたいページ(B)で操作をしたことになる

というものです。詳しくは https://www.ipa.go.jp/files/000026478.pdf をごらんください。

クリックジャッキングを防ぐ

クリックジャッキングを防ぐには、外部ページに埋め込みされた場合に表示しないようにすれば良いです。上の 1. の状態が発生しないようにするわけです。
そのためには、x_frame_optionsを設定します。

  • DENY - 一切不可
  • SAMEORIGIN - 同一ドメインから許可
  • ALLOW-FROM uri - 指定したドメインから許可

concrete5ではデフォルトで SAMEORIGIN になっています。

x_frame_options の設定を変更する

concrete5では、application/config/concrete.phpファイルで、設定を行うことができます。(このファイルが存在しない場合は作成してください。)
x_frame_options を設定しないようにする場合は、下記のようになります。

'security' => array(
    'x_frame_options' => false,
),

詳しくは http://concrete5-japan.org/help/5-7/recipes/config/ をごらんください。

この設定をすると、iframe呼び出しが可能になります。

※追記 concrete5 ver.8.4では下記のようになります。

'security' => array(
    'misc' => array(
        'x_frame_options' => false,
    ),
),

特定のページ(群)を許可する

上の設定だと、ウェブサイトの全てのページでクリックジャッキング防止設定が無くなります。これだと、ログインページなどもクリックジャッキング防止設定が無くなります。さすがにまずいですね。
なので、ページを表示するときに、ページに応じてヘッダー出力を変更するようにします。
concrete5には、ページを表示するときに発火するイベントが用意されています。

public function on_start() {
    Events::addListener('on_page_view', array($this,'on_page_view'));
}
public function on_page_view()
{
    $c = Page::getCurrentPage();
    if (mb_substr($c->getCollectionPath(),0,11) != '/estimation' ) {
        header("X-Frame-Options: DENY");
    }
}

このようなコードを書くと、iframeを許可するページ、iframeを許可しないページを作ることができます。上の例では、「ページのURLが/estimationで始まる場合のみiframeを許可する」にしています。

こうすることで、
マイミツ ログインページ はiframeを許可しない
見積フォームのサンプル はiframeを許可する
という設定ができました。

埋め込み表示の例はホームページへの埋め込みを許可しました。 :: 見積書作成時間を削減する「マイ見積」をご覧ください。

2
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?