- ベストアンサー
外部の別ホストからのPOST送信を禁止したい
PHP初級です。 外部の別ホストからのPOST送信を禁止したいのですが、例えば.htaccessで制限することは可能でしょうか? やりたいことは以下の質問と同じです。 http://q.hatena.ne.jp/1154620823 自ホストが .aaa.com として、 .aaa.com/soushin.php //POST送信 .aaa.com/jusin.php //POST受信 これは許可。 .bbb.com(.aaa.com以外)/soushin.php //POST送信 .aaa.com/jusin.php //POST受信 これをシャットアウトしたいのです。 .htasseccでいろいろと試してみましたが、POST出来てしまうか、サイトそのものへアクセス不可になってしまうかで 思ったように動作しません。 <Limit GET POST> order deny,allow deny from all allow from .aaa.com </Limit> 記述内容が悪いのか、もともと無理なのかがわかりません。 お手数ですが、ご教授いただけないでしょうか? 宜しくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
それで大丈夫だけどな。xreaでテスト自ホストの指定が間違ってるんじゃないの?環境変数チェックするcgiで自ホストのリモートホストをチェックしてみ。
その他の回答 (3)
素晴らしい質問です、勉強になりました。世の中での成り済ましってそうやって行われるわけですね・・・いやぁ~恐ろしいです。 でも確かに!HTMLソースコード丸見えだと私でも成り済ましが出来てしまいそう・・・怖いなぁ。どっちにしても、この場合は、クライアント認証と言ってIPアドレスを伴って認証をクライアントにしてもらう時にサーバー認証をするか、サーバー認証を伴ってクライアントに送信されてるかのどちらかにしないとダメっぽいですよね。となると、画面が変わるたんびにクライアント認証をチェックしたらサーバーが表示するか?サーバー認証をいちいちパスワードを求めてするか?どちらかしか、結局ないのでは? クライアント認証はクライアントがパスワードを入力した直後にこのIPがパスワードを入れたIPとしてサーバーがいちいちクライアントを認証するしくみなのでクライアントは楽ですよね。 でもサーバー認証は、毎回サーバーが認証をクライアントに求めてから認証するのでしょうか?やっぱり、いくら小細工しても抜け道がありそうなので、暗号化した方が良いと世間は言うのだなと、初めて納得した思いです!!!わざわざ高いお金で暗号化する機能をくぐらせて通信することに何の意味が!セッション管理でいいのでは?と思っていたけど・・・甘いんですね、こんな成り済ましされたら一ころ。
補足
こんにちはnoname#93451さん。 最近この事を知ったのですが、青くなりました。 私自身、勉強不足というより全くわかっていなかったと痛感しました。
- hogehoge78
- ベストアンサー率80% (433/539)
POSTメソッドを叩いて該当URLに対してリクエストを行うのはブラウザが行うものですから、ブラウザから該当URLに対してPOSTメソッドで某かのデータを送信してくるのであれば、通常、別ドメインに自サイトのフォームのコピーのようなものを作成され、通信されるのは制限できないと思います。 制限するとしたら、yambejpさんの仰るように$_SERVER変数に含まれるリファラ情報を見て制限するというところになりますが、ブラウザがリファラを通知してこなかった場合、全てはじいてしまいます。 そうなると、質問者さんが参照されたURL(はてなアンテナ)にて、ベストアンサーとなっているスクリプトのような、ワンタイムチケット(ワンタイムトークン)を発行する方法が良いのではないでしょうか。 http://www.jumperz.net/texts/csrf.htm こちらにCSRFの詳しい対策方法などが記載されております。
お礼
こんにちはhogehoge78さん。 ありがとうございます。 ワンタイムチケットの方法で考えてみたいと思います。
- yambejp
- ベストアンサー率51% (3827/7415)
リファラをみて、外部だったときに、$_POSTをクリアしてしまえば?
お礼
こんにちはyambejpさん。 お返事が遅くなりました。 リファラも候補に入れてはいます。が、偽装できるということで、もう一つ欲しいなあといったところです。
お礼
こんにちはJavaJavax2さん。 ということは、 allow from .aaa.com の部分がおかしいのでしょうか? もう一度見直してみます。