.phpファイルにhtmlとphpを混在させるのではなく
.htmlファイルにアクセスすると別に設けられたphpスクリプトを動作させたいです。
aaa.htmlにアクセスするとbbb.phpが読み込まれて指定してあるアクセスを遮断する
という感じをイメージです。
phpスクリプトは別のサーバーに設置します。
※ <body>内のみで行えること
※ .htaccessは使えない。
http://openwebmail.mirror.luxadmin.org/manual/ja/security.hi...
PHP: PHPの隠蔽 - Manual
<body onLoad=”location.href=’
’”>
ではダメでしょうか?
若しくは、参考URLのようにhttpd.confの設定で、
phpをhtmlに見せかける(隠蔽)ではダメですか?
※.htaccessは使えないとのことなので、設定関連は
NGってことでしょうか?(自サーバでないなど?)
いずれにしても、主目的はIPアドレスでフィルタリングをしたいようですが、それをHTMLで実現するのは困難だと思います。
ので、何かの条件によって処理を分岐するのであれば、phpで実現するのが良いでしょう。
→ それでもヘッダの偽装は可能なので限界はあります。
以下参考URLの引用です。
---
# 全てのPHPコードをHTMLのように作成する
AddType application/x-httpd-php .htm .html
効率的にこれを使用するには、全てのPHPファイルの名前を上の拡張子に変更 する必要があります。これは、あいまいさに基づく形式のセキュリティですが、 欠点の少ない簡単な防衛策です。
<?php
include ’
’;
?>
これで、できます。
ただ.htmlファイルがPHPを認識しないとどうしようもありません。
>指定してあるアクセスを遮断する
というのがよく分かりませんが、
<body>内で
<img src=”
” width=1 height=1>
とすれば、画像アイコンも表示されません。もしくは、example.php内の、最後の出力部分で、
<?php
//アクセスを遮断するとかいう処理
//****************************
//最後に画像ファイルをブラウザに表示
$image_path = ”blank.gif”;
header(”Content-type: image/gif”);
$fd = fopen( $image_path, ”r” );
$contents = fread( $fd, filesize( $image_path ) );
fclose( $fd );
?>
などとすれば良いのではないでしょうか?
print $contents;
などとすれば良いのではないでしょうか? PHPやCGIでアクセスログを取る際にも同様な手法が使われていますね。
もう少し詳しく伺っても良いでしょうか?
アクセスを遮断する処理というのは
特定のIPアドレスを別のサイトへ飛ばすというイメージです。
$akukin = array(”111.222.333.444”,”555.666.777.888”);
$jump =$_SERVER[”REMOTE_ADDR”];
foreach($akukin as $value){
if(eregi(”$value”,$jump)){
header(”Location: http://yahoo.co.jp”);}
}
という感じでしょうか。
aaa.html内でこの処理を行いたいのです。
<body>内にはイメージタグを呼び出すとして、phpスクリプトにはどこを追記すればいいのでしょうか。
http://www.broadband-xp.com/hidesource/cgi.html
Javascriptソースを外部ファイル化する(CGI編)
なるほど、アクセス遮断の意味が分かりました。そうであれば、先ほど紹介したimgタグでは駄目です。Javascript+PHPの連携で可能です。
<body>内より<head>〜</head>内に設置すれば最適ですが、それが無理であれば、
<body>
<script type=”text/javascript” src=”
”></script>
</body>
とします。
その上で、example.php内では、
<?php
$akukin = array(”111.222.333.444”,”555.666.777.888”);
$jump =$_SERVER[”REMOTE_ADDR”];
foreach($akukin as $value){
if(eregi(”$value”,$jump)){
header (”Content-Type: application/x-javascript”);
print ”location.href=’
Yahoo! JAPAN
’;”;
exit;
} else {
header (”Content-Type: application/x-javascript”);
print ”var abc=’’”;
exit;
}
?>
などとします。
content-typeをPHP内のヘッダー関数で指定してあげれば、Javascriptの外部ファイルの拡張子は必ずしも.jsでなければならいことはなく、CGIやPHPでJavascriptの外部ファイルを書くこともできます。参照URLにはperlやPHPでのJavascriptファイルの書き方を説明しています。
jsファイル内に
location.href=’
Yahoo! JAPAN
’;
と書いてあれば、すべてのユーザーがYahoo! Japanトップページにリダイレクトされますが、
それをIPアドレスで判断して、特定のIPにだけ、この
location.href=’
Yahoo! JAPAN
’;
が書かれたJSファイルが読み込まれるように設定するわけです。
ただし、このやり方ですと、特に<head>〜</head>にJavascript(<script type=”text/javascript” src=”
”></script>)が使えない場合、とにかく一旦はページが一瞬でも表示された後、ページ遷移します。上のサンプルスクリプトで言えば、Yahoo! Japanのトップページ。
また、Javascriptをoffにされていると、Yahoo!には移動せず、アクセス制限の役割を果たせません。
また、PHPのin_array関数を使ったほうがスマートにできるかもしれません。
PHP: in_array - Manual
test.htmlを作成しボディータグ内に以下を埋め込み
<script type=”text/javascript” src=”http://aaa.aaa/test.php”></script>
以下本文
test.phpには
$akukin = array(”自分のIPアドレス”);
$jump =$_SERVER[”REMOTE_ADDR”];
foreach($akukin as $value){
if(eregi(”$value”,$jump)){
header (”Content-Type: application/x-javascript”);
print ”location.href=’http://www.yahoo.co.jp’;”;
exit;
} else {
header (”Content-Type: application/x-javascript”);
print ”var abc=’’”;
exit;
}
?>
としましたがtest.htmlでは
>「実行しましたがエラーが出ました」が表示。
test.phpでは何も表示されませんでした。
非常にわかりやすい説明で感謝なのですが、私の理解力が足りないのか上手く動作しないようです。
拡張子が.phpの場合には問題ないですが
.htmlでそれを実行した場合できないようです。