Single Article

ブラウザから直接phpを実行できないようにする

あるphp(1)を他のphpファイル(2)からクエリ情報(?key=valueなど)付きで呼び出すようにしている場合、(1)のphpはブラウザなどから直接「http://www.hoge.com/foo.php?key=value」などと打たれると困る場合がある。

DJTR.php(2)では、image.php(1)を呼び出してフォントファイルからpngの画像テキストを生成するが、image.phpを直接呼び出されると、第三者の好きな文字列の画像を生成可能となってしまう。これではフォントライセンスをクリアしない場合があるので、制限する必要がある。

要するに、image.phpを参照するreferer(参照元)が自ホスト(djtr.phpのURL)になっていればOK、そうでなければ他のホストからの参照(ブラウザから直接を含む)なのでNG。

それを.htaccessに記述すればよい。以下。

TEXT

SetEnvIf Referer “^http://www\.hoge\.jp” ref_ok
order deny,allow
deny from all
allow from env=ref_ok

SetEnvIfで環境変数を呼び出し、Refererが指定のurlになっていれば参照を許可する。
ちなみに、urlは正規表現なので「.」は「¥.」にしなければいけない。

しかし、ユーザーがNorton Personal Firewall(NPF)を導入していると、Refererを送信しないように設定されていることから、画像などが一切表示されないという弊害が発生する。

さらに、refererは偽装出来るので、やろうと思えば、設定を変えることも出来る。

ここら辺は注意が必要だ。

Related Posts

Trackback URL

One Trackback/Pingback

  1. [...] 一発導入というユーザビリティはなかなか便利ですが、通常のレンタルWebサーバにはアップロードされたスクリプトの不正チェックする術が無い(たとえ専用サーバでアンチウイルスを入れてもJavaScriptの内容がいくらかチェックできるぐらいで、PHPの不正なコードのチェックはでき無いと思うし。)のとFirefoxプラグインの場合などと比較してもインストール先のURLの許可・不許可チェックやが無いし、デジタル証明書によるチェックの仕組みなどのが無いので現段階で積極的に利用するのはちょっと怖い気がします。 あと共用サーバでの運用の場合はthemesとpluginsフォルダなどスクリプトが入ったフォルダに第三者の書き込み権限を与えないと(777とか707とか)いけないのも少々気になりました。また、なにか仕込まれたスクリプトを直に叩かれない様ブラウザからこれらのフォルダのPHPを直接実行できないように設定したほうが幾分安全(REFERER偽装には耐えられないけど。。。)かと思います。 [...]

Post a Comment

Your email is never published nor shared.