- 締切済み
Ajax通信の際のphp直アクセス防止について
Ajax通信の際のphp直アクセス防止について あるPHPファイルに対して、JavaScript(同ドメイン)からのリクエスには対応して、ブラウザからなどの直アクセスの場合は、アクセスを防止するということは出来るのでしょうか。 $_SERVER["HTTP_REFERER"]や$_SERVER['HTTP_X_REQUESTED_WITH']など、サーバー変数を調査する方法は思いつくのですが、いずれも偽装可能な方法で飾りにしかなりません。そもそも直アクセス防止は理論的にできなくて、phpシステム側を直アクセスされても安全なものにするのが一般的なのかもしれませんが、Ajax通信における基本的なセキュリティのありかたが分かっておらず、参考意見をいただけると幸いです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- saijyo_739
- ベストアンサー率53% (119/222)
何を心配しているのかがわからないです。 正当な閲覧者が不正を行うという事でしょうか。 それとも途中でパケット覗き見された時という事でしょうか。 下の場合は、SSLなどの通信路の暗号化技術使えばあり得ない(基盤となっている暗号自体が破られれば別ですが)ですね。 質問見ると不思議な事が多く書かれているのですが。 > あるPHPファイルに対して、JavaScript(同ドメイン)からのリクエスには対応して、ブラウザからなどの直アクセスの場合は、アクセスを防止するということは出来るのでしょうか。 同ドメインからのリクエストがあるのですよね。 『ブラウザからなどの直アクセスの場合』というのは同ドメインではないのですよね。 閲覧者へ送信しているJavaScriptに同ドメインからのリクエストと同じコード入れなければいけない訳でもなさそうに感じたのですが。(そもそもサーバ内の通信については公開しない様にもできそうに思えますが) 事情があり、できないにしても内部の通信はポート8080を使って外部に対してはパケットフィルタで遮断して良さそうにも思えます。 サーバ内でのパラメータ渡しなら公開しているIP通信使わなくても、Unixドメインソケット使ったりいくらでも方法ありそうにも感じますし。 私には質問が理解できません。(どんな対処不能な問題があるのか)
- oktuburero
- ベストアンサー率22% (102/446)
基本中の基本だけどPHP側で受け取ったXMLのデータが正当なデータか検証処理をしっかりやる。
補足
回答ありがとうございます。 そうですよね。おっしゃるとおりだと痛感します。 ただ、Ajaxだと通信しているデータがダダ漏れなので、簡単にデータを真似できちゃうという点で、たとえば、クライアントやリファラーを偽装して送信データを真似されると、外部プログラムからのリクエストに簡単に応えてしまうのではないかと。その点、Ajax初心者でよくわからないのですが、そういった場合に、みなさんはどのような対処をされているのか疑問に思い、質問いたしました。 JavaScriptからの送信データを暗号化(人目に判別できなく)すれば、データの偽装は多少難しくなるかもしれませんが、いずれにしても暗号処理が丸見えのJavaScriptに依存する限り、あんまり意味ないのかなあ、と思ったりしています。
- yambejp
- ベストアンサー率51% (3827/7415)
ajaxで呼び出せるものはしょせん偽装できそうな気がしますが・・ セッションをうまく使えば精度をあげられるかもしれませんね
お礼
セッションの方向でも検討してみます。 回答ありがとうございました~
補足
> ajaxで呼び出せるものはしょせん偽装できそうな気がしますが・・ ということは、やっぱり直アクセスを防止しようとすること自体が不毛なのでしょうか。 > セッションをうまく使えば精度をあげられるかもしれませんね そうですね。セッションを確固たるセキュリティと信頼すれば、Ajaxアクセスの都度、セッションを調査する方法もありますね。ただ、この方法だとAjaxの実装によってはセッション処理が忙しくなっちゃうかもしれませんね。
補足
私の質問の意図がわからない、というのは理解できました。ありがとうございます。おそらくそれは、決定的に私の知識が不足しているからだと思います。私が質問してる内容は、パケットを盗聴するまでのことではありません。具体的に書いてみます。 たとえば、いくらJS内で情報を隠蔽しようとも、Firebugなどのツールを使えば、送信先PHPのパス、データの内容、リクエストの種類などは簡単にのぞき見できます。まずこれが一つめです。そして、PHPに対して、JSからのリクエストを許可するということは、ブラウザからのリクエストを許可することと同義だと思っていること。(正確にはわかりません。) もし、仮にこれらのことが同時にあったとすると、外部ドメインから、内部リクエスト(リクエストの種類、リファラー、クライアント属性やデータそのもの)を模倣された場合、どのように防ぐか、というのが今回の質問です。 同ドメイン内のPHPとPHPの通信のように、JSとPHPの通信が、同サーバー内での通信と解釈できるのであれば、今回の私の質問は見当違いなものです。ただその場合、PHPもしくはApacheが「これは同ドメインJSからのリクエストだよー」と判別できる手段をいただけると、とても嬉しいです。