2009-06-10 12 views
0

「index.htm」と「routines.php」があります。PHPによるWebサイトのセキュリティに関する質問はありますか? (おそらくASP/Rails/etcにも適用されます)

"index.htm"はJS(AJAX)を使用して最終的に "routines.php"を呼び出します。

私の質問は、 "routines.php"がリクエストが同じローカルサーバーから来ていて、外部ではないことを確認するにはどうすればいいですか? PHPレベルまたはHTTPレベルで確認できるグローバル変数はありますか?

編集1:コールが(つまり、クライアント上)、あなたは本当に間違いなくあるindex.htmからの要求をシミュレートされるのを防ぐために何もできないJavaScriptで作られている場合はAJAX

+0

index.htmはどのようにgetdata()を呼び出しますか? Ajaxを使う? –

+0

はい、AJAXを使用して – Atlas

+0

私はそれを取得しません - どのようにAjaxは、(いくつかのパラメータでroutines.phpを要求するのではなく)そのメソッドへのアクセス権を持っています。 – Arjan

答えて

3

それは実際には問題の一部ではないとして、あなたはAjaxの一部を忘れることがあります。 Cross Site Request Forgeries(CSRF)とCSRFトークンについては、お読みください。いくつかのリンク:他の人が指摘したように

+0

ありがとう、私はそれらをチェックアウトします。 – Atlas

1

を使用して、 Referer(sic)ヘッダーをチェックしても

リクエストがサーバー側で行われた場合は、何らかの種類のキーを使用できます。

もちろん、クライアント側で鍵を生成することもできますが、このセキュリティ手段は誰でも、index.htmからの要求をシミュレートすることができます。

-2

はHTTP_REFERERサーバー変数を使用します。これにより

echo $_SERVER['HTTP_REFERER'] 

要求が希望のサーバーから来ているかどうかを知ることができます。

+0

HTTP Refererヘッダーをスプーフィングするのはとても簡単です。 –

+0

$ _SERVER ['HTTP_REFERER']は悪い習慣です。この情報を安全に中継することはできません。 –

+0

http://en.wikipedia.org/wiki/Cross-site_request_forgeryを停止することはできますか? – Arjan

2

別の質問であなたの質問に答えるには:ブラウザを使ってgetdata()をどのように呼び出すのですか?

(SO:心配する必要はありません)

+0

AJAX:P – Atlas

+0

を使用して、忘れました。私が私のブラウザでroutines.phpを開き、関数がこのファイルでのみ定義されていると、何も起こりません。関数を呼び出す位置で、その関数が呼び出されるかどうかをすでに確認しておく必要があります。 –

+0

うん、すべてのブラウザからroutines.phpを開くことは何もしません。しかし、誰かが同様のindex.htmを作成し、私のルーチンからgetdata()を呼び出すのであれば、その要求は有効であるとみなされますか? – Atlas

0

することは、それはあなたの元の仕様与えかなり難しいだろう。しかし、index.htmindex.phpに変更してindex.htmと同じ内容を出力することができれば、セッション管理用の追加のトークンを入れることもできます(Cookies - はい、彼らは簡単にスプーフィングすることができます:)。トークンが一致しない場合はgetdata()になります。

1

あなたはセッションキーを使用することができます。index.htmのは、セッションの安全な鍵であると呼ばれたとき

<?php 
if (!isset($_SESSION['safe_key'])) { 
    die('from outside'); 
} 

function getdata() { ... } 
?> 

routines.php

<?php 

$_SESSION['safe_key'] = true; 

?> 
javascript code here 

のindex.htmは、基本的に何が起こるかであります作成した。セッションはサーバー側のみです。ルーチンキーが安全キーが存在しない場合、コードはindex.htmから呼び出されませんでした。それが存在する場合は、コードを実行します。

+0

...まだ誰かが単に一度index.htmlを要求するだけで受信したセッションクッキーを送信することを妨げるものはありません。 – Arjan

+0

あなたはsession_regenerate_id()を使ってそれを止めることができます:) – Ozzy

+0

...そして、次のリクエストと一緒に(Ajax呼び出しが完了したときに受け取った)新しいクッキー値を送信します:アトラスがここで避けようとしていたことは全く知らないでしょう) – Arjan

関連する問題