最終コード
状態:-
閲覧数:2,333
投稿日:2015-06-18
更新日:2015-06-18
▼iframe経由で読み込んでいるページ
コピー用
<?php
$referer = $_SERVER["HTTP_REFERER"];
$refererUrl = parse_url($referer);
$refererHost = $refererUrl['host'];
$domain = $_SERVER['SERVER_NAME'];
if($refererHost!=$domain){
header('location: /');
exit();
}
?>
コピー用
<?php
$refererUrl = parse_url($_SERVER["HTTP_REFERER"]);
if($refererUrl['host']!=$_SERVER['SERVER_NAME']){
header('location: /');
exit();
}
?>
試行履歴
iframeへ変数を渡す
当初の案
1トップページ内にて変数定義
2.iframeで読み込むページへ変数を渡す
3.変数が定義されていなければ、リダイレクト
変数を渡せない
・実際にやってみた結果、そんなに簡単にiframeページへは変数を渡せないことが判明
iframeで同一オリジン
同一オリジン指定すればiframeページへ変数を渡せるかも
実際にやってみた
・複数のキーワードを指定したい場合は、半角スペースで区切って記述
<iframe src="example.html" sandbox="allow-same-origin allow-scripts"></iframe>
→ 試したけれども期待した効果を得られなかった
最終的に
下記ページを参考に実装
・iframeからのアクセスか、ブラウザでの直アクセスか判別したいです。
▼iframe経由で読み込んでいるページ
<?php
$via = $_SERVER["HTTP_REFERER"];
$domain = "http://".$_SERVER['SERVER_NAME']."/";
if($via==$domain){
}else{
header('location: /');
exit();
}
?>
一致しない条件分岐だけが必要なので
<?php
$via = $_SERVER["HTTP_REFERER"];
$domain = "http://".$_SERVER['SERVER_NAME']."/";
if($via!=$domain){
header('location: /');
exit();
}
?>
JSだけで実装
今回は試していないけれど、下記でもイケるみたい
▼iframeで読み込まれるページ
<script type>
if(window!=parent){
document.write('インラインフレームで読み込まれています');
}
else if (window==parent){
document.write('インラインフレームで読み込まれていないです');
}
</script>
問題発生
下位層ページで問題発生
トップページでは正常動作するが、下位層ページで問題が発生することが判明
・下位層ページで「$_SERVER["HTTP_REFERER"];」を使用すると、リファラーなのでドメイン以外の部分も取得してしまう
対応
▼iframe経由で読み込んでいるページ
<?php
$referer = $_SERVER["HTTP_REFERER"];
$refererUrl = parse_url($referer);
$refererHost = $refererUrl['host'];
$domain = $_SERVER['SERVER_NAME'];
if($refererHost!=$domain){
header('location: /');
exit();
}
?>