2009-08-09 5 views
3

人間がPHPスクリプトURLの結果を表示しないようにするにはどうすればよいですか? AJAX呼び出しを作っていたサイトのソースを表示するときに人間がPHPスクリプトURLの結果を表示しないようにするにはどうすればよいですか?

最近、私は私が見て期待どおりの結果を得るための

www.site.com/script.php?query=value 

代わりに、ブラウザでリンクをたどってみました、私は、というメッセージを見ましたスクリプトだけがそのページを表示する必要があります。

スクリプトでスクリプトにアクセスできるようにするにはどうすればよいですか?

UPDATE:

ここでは、ページDEMO page

+0

リンク先を教えてください。 – Zed

+0

はそれを私のポストに追加しました – JasonDavis

+0

多分、ページへの呼び出しを含むページへのリンクを提供できます。ページ自体ではありません。 – tomzx

答えて

9

ページがオープンソースアプリケーションの多くは、AJAX

function isAjax() { 
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); 
} 

if(isAjax()) { 
    // display content 
} else { 
    // not ajax, dont show 
    echo 'Invalid Request'; 
} 
+0

上のページへのリンクを追加しましたhttp://qpoit.com/marcofolio_demo/apple_search/rpc.php?queryString=apple – JasonDavis

+0

すべてのブラウザで動作しないことがわかりません。 IE、FF、Chromeで私のために働いた。私はプロトタイプとjqueryでそれを使用しました。 – Tim

+0

jQueryのような特定のヘッダーを送信するAJAXライブラリでのみ動作します。 –

10

短い答えです:あなたがすることはできません。

長い答え:HTTPリクエストで特別なヘッダー値を要求することで、難しくすることができます(Accept to application/jsonは一般的な設定です)。サーバー側では、ヘッダーが期待どおりの値に設定されていることを確認してください。これにより、正規のユーザーがあなたが言及したメッセージを得ることができるようになり、スクリプトも正常に動作します。もちろん上級ユーザーはこの種の制限を簡単に回避できるので、セキュリティに頼らないでください。

+0

私は基本的にGET varibaleを使って検索語に基づいてデータを表示しましたが、手動でURLを入力して検索結果を表示するのではなくページに移動すると、スクリプト上にあるはずですページ – JasonDavis

+0

私はちょうど私が私がこの前のことを聞いたはい – JasonDavis

6

できません。人間は常にその要求を偽装することができます。投稿変数を使用してリクエストを送信して、人間が偶然にページに終わらないようにすることができます。

4

可能な解決策の1つは、HTTP要求の起点を確認することです。 別の解決方法は、すべての要求に「パスワード」を送信することです。これを行う方法はthis tutorialを見てください。

しかし、それは決して100%安全ではなく、侵入者の可能性がさらに高くなります。

0

AJAXでスクリプトを呼び出す場合は、AJAX呼び出しが実際にページを要求しているブラウザと似ているため、アクセス可能でなければなりません。したがって、スクリプトにアクセスできるだけでなく、誰でもアクセスできます。

実際にPHPなどで呼び出された場合は、「多分」ApacheルールやPHPスクリプトを使用してアクセシビリティを低下させることができます。あなたがチェックすることができ、PHPとだけ表示結果と

+0

ページが見つかりましたが、あなたが言及するまで、私はそれについて忘れてしまいましたそれは、それは一部のブラウザでのみ動作することを読んだ? – JasonDavis

-2

経由で呼び出された場合は、すべてのPHPファイルの上に、この変化を使用します。

if (!defined('SOMETHING')) { 
    die('only scripts have direct access'); 
} 

define("SOMETHING", "access granted."); 

編集:私は言わないよ、これは良いアプローチがある

は、次にindex.phpの中で、彼らは何かを定義しますbtw

edit2:私はそれがajaxリクエストであることについての部分を見逃しています。この場合、これは解決策ではないと私は同意します。

+0

ここではそうではありません。あなたがページを直接アクセスから守り、phpでそれらをインクルードするだけなので、それはそういうことです。この場合、Ajax呼び出しはrpc.phpへの直接呼び出しを行います。 –

0

'view'スクリプトを使用してPHPセッションに秘密の値を設定し、ajaxスクリプトでチェックすることができます。

  • ブラウザで 'index.php'をリクエストしてください。
  • PHPは、ページを構築し にキーのセッションを保存し、バック ブラウザにコンテンツを送信します。
  • ブラウザがページコンテンツを取得し、 があなたのサイトに何らかのajaxリクエストを行います。
  • これらのajaxスクリプトでは、メインページ と同じセッションに というアクセス権があり、 キーを確認できます。

これにより、認証されたブラウザのみがajaxリクエストを作成できることが保証されます。

セッションに書き込むことができるajaxリクエストにはカウントしないでください。同時に多くのリクエストが満たされると、最後のセッションはセッション記憶域に最後に書き込まれます。

http://us.php.net/manual/en/book.session.php

+0

セッションはロックされていると私は思うので、各スクリプトは完了するまで待たなければなりません。したがって、なぜこの機能を作ったのですか?http://us.php.net/manual/en/function.session-write-close.php –

1

ティムは、このスクリプトは、ほぼ確実に(当然、放火犯の正味のパネルを介して見出さ)rpc.php各要求と共に送信されて、この要求ヘッダー、探している、上述のように:

X-Requested-With : XMLHttpRequest 

ブラウザ間の互換性に関して、setRequestHeader methodは、activexとxmlhttprequestの両方の接続で使用できるように見えるので、これは最新の主要なブラウザすべてで機能するはずです。

関連する問題