2011-12-18 5 views
3

で私は、次のコードを使用してPHPのサイトにデータを送信しています:確認のXMLHttpRequest PHP

if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
       xmlhttp= new XMLHttpRequest(); 
     } 
     else 
     {// code for IE6, IE5 
      xmlhttp= new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.open("GET","addEmail.php?email="+escape(email),true); 
     xmlhttp.send(); 
     xmlhttp.close; 

人々は単に行く傾けるようaddEmail.phpはXMLHttpRequestを介して実行されていることを確認するのいずれかの方法がありますがwww.domain.com/[email protected]にアクセスすると、PHPサイトで電子メールを送信し、ページ上で1,000件のリクエストを実行できます。事前に感謝します

+0

http://stackoverflow.com/questions/1953954/detecting-ajax-in-php-and-making-sure-request-was-from-my-own-website –

答えて

14

ユーザーは常に直接PHPスクリプトにアクセスすることが可能ですが、保護することができますが、PHPスクリプトには、このチェックを追加することで、もう少しです:オイゲンRieckが述べたように、あなたが送ることができ、

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') 
{ 
    //CODE HERE 
} 

さらに、トークン

+0

ありがとうございました!それはおそらく私が探していたものです。副作用、なぜあなたは3x = 'xmlhttprequest'に等しいかどうかをチェックしていますか? – DrLime2k10

+1

===同じタイプであるかどうかを確認します。おそらく2つ使用すれば十分です。 – Sweam

1

それは基本的に不可能です。

サーバー上のIPアドレスごとの要求数を制限する必要があります。

+0

それが本当なら、ありがとう。 – DrLime2k10

+0

このPHPの基本的な実装は非常に高く評価されますありがとうございます –

0

これを行うための標準的な方法は、AJAXコードを含むページで何らかの(時間に依存する)トークンを送信してから、トークンをAJAX呼び出しと一緒に送信することです。 AJAX URLを直接使用するユーザーは、現在のトークン値を認識しません。

+1

しかし、javascriptが表示されて以来、これは非常に簡単にこれをリバースエンジニアリングすることができないでしょうか? – DrLime2k10