- 締切済み
他ホストからのPOSTを防ぐ方法
php.iniのregister_globalsをOffにすることで不要な GETパラメータを受け付けないようにすることができますが、他ホストから、<form metho=POST acrion=http://***.com/xx.php> などとした場合、他ホストからPOSTできるわけで、 結局、他ホストからPOSTできないようにしないとrgister_globalsをOnにした時と、セキュリティーはあまり変わらないようか気がするのですが、 他ホストからPOSTできなくする方法はありますでしょうか? 現在、思いつくのはPHPに限らず以下の方法ですが、 いずれも完璧ではないような気がします。 1.refererチェック(100%で有効ではないらしい) 2.Sessionによる認証チェック(認証済みユーザなら結局、同一ブラウザを使い他ホストのページからPOSTできる)
- みんなの回答 (2)
- 専門家の回答
みんなの回答
見返すと色々書き損じが・・ 補足させてください。 > register_globals の危険性は変数汚染にあります。 提示した URL 内に具体例があります。引用すると <?php $file = '/base/path/to/image/files/'.$name; header('Content-Type: image/gif'); readfile($file); ?> という PHP スクリプトに対して register_globals が on である場合、次のような URI を入力する事で GET メソッドを利用して汚染をかける事が出来てしまいます。 http://example.com/image.php?name=abc $_POST['name'] のように明確な意図の元に POST メソッドから値を取得する方法と比べ、通常の変数と変わらない $name に勝手にアサインされてしまう事が register_globals の何よりの問題なのです。 > 私に聞くよりググって PHP で経験を積みセキュリティに関して知識を蓄えた方の発言やドキュメントを調べる事をお勧めします。 は以下に訂正します。 私がここであれこれと書くよりは google で検索するなどして、経験と知識を蓄えた方の発言やドキュメントを調べた方が有効だと思います。 特に register_globals に関しては多方面から危険性が指摘されて変更になったことがあり、その指摘と、またその変更についての論議が PHP-users などのコミュニティに残っていて参考になると思います。 他のホストからの POST を防ぐ方法ですが、まず目的が、、セキュアなアプリケーションを作るという目的なら前投稿のような基本的な話になります。 とにかく他ホストからの POST を蹴りたいというなら ・基本認証 ・ページ間ごとにランダムな ID を生成しそれをキーとして信頼性を持たせる 等方法はあると思います。完璧を期するなら基本認証のような仕組みを使って信頼できるエリアを作る方法が使えると思いますが、、 「信頼出来る POST メソッドを保証する」というのはあまり見かけない案件です。目的に対してもっと適切で楽な方法があるかもしれません。 セキュアなwebアプリケーションの設計に関して IPA のドキュメントも参考になると思いますので提示しておきます。
register_globals の危険性は変数汚染にあります。 調べられると実例がごろごろ出てくると思います。 私に聞くよりググって PHP で経験を積みセキュリティに関して知識を蓄えた方の発言やドキュメントを調べる事をお勧めします。 PHP-users で参考になる発言があったので一例として挙げておきます。 また他のホストからの POST についてですが、完全に抑える術はありません。ベーシック認証なら可能かもしれませんが。 HTTP の構造上 web アプリケーションはページ単体で独立して設計されるべきだと思います。 つまり他のホストや認証されたページからの POST メッセージを無条件に信頼せず、不正なコードを埋め込まれたとしてもそれが脆弱性につながらないように設計されるべきです。 と書くと「ではパスワードはどうするのだ、外部に信頼性を依存するしかないではないか」等ツッコミも予想出来るのですが、要点は利用する機能の仕組みを理解し、目的と危険性を認識してハンドリングするということです。 例えばセッションは最早webアプリケーションに欠かせない機能の一つですが、一方でセッションハイジャックの危険性を認識してリスクを抑える必要があります。 以前セッションIDをGETメッセージで渡していたために referer からセッションIDが漏洩しセッションハイジャックの危険性を指摘された企業がありましたが、こういう危険性を抑えるには基本的な理解とセキュリティ情報に対するアンテナを高く掲げる事です。