2011-11-14 19 views
4

私はCodeIgniterを使ってWebアプリケーションを作成しました。アプリケーションでajaxを使用する場所がいくつかあります。Ajaxリクエストは誰にも公開されていません

私は、ajaxコントローラへの直接アクセスとクエリを停止し、ページから発信された正当なajaxリクエストのみを処理できる方法があるかどうかを知りたいと思います。

ありがとうございました。

+0

AJAXリクエストは単純なHTTPリクエストです。なぜ直接アクセスを停止したいのですか? – kapa

+0

決まった人を止めるのは難しいかもしれませんが、人々がAjaxの結果ページに直接アクセスするのを止める方法があるかどうかを知りたいのです。それはデータベースからの結果(保護する必要はありません)を示していますが、私は誰かに来て、そこから私のデータベースを掻き集めるのではなく、意図した用途だけを望んでいます。 – DMin

+0

しかし、あなたはページ上のデータベースの結果をとにかく表示しますか? – kapa

答えて

5

はい、これは問題なく実行できます。 CodeIgniter入力クラスにはis_ajax_request()というメソッドがあります。コントローラのアクションの開始時にこれを確認するだけです。たとえば:あなたはAJAX呼び出しのために完全に指定されているコントローラをお持ちの場合

function ajax_save() { 
    if ($this->input->is_ajax_request()) { 
     //continue on as per usual 
    } else { 
     show_error("No direct access allowed"); 
     //or redirect to wherever you would like 
    } 
} 

は、あなたは、コントローラのコンストラクタfunction __construct()にそのif文を置くことができます。最初にparent :: __ constructor()を呼び出すことを忘れないでください!

編集:「ページからの発信」に関しては、おそらくあなたのajaxリクエストで認証+セキュリティチェック(セッションを経由してデータベースにヒットしない可能性があります)を実行する必要があります。したがって、あなたのwebappと提携していない不正なユーザーは、手動でajaxリクエストを手動で送信できないはずです。希望があなたの質問に答えることを望みます。

+0

これはありがとう:)ありがとう作品。 – fl3x7

+2

HTTPヘッダーに「is ajax」フラグが設定されているかどうかを確認するだけです。誰でも任意の要求に対してそのフラグを設定できます。これは、返す最良のデータ形式が何であるかを決定する場合にのみ有効です。セキュリティは提供されません。 – Quentin

+0

合意。ハッカーの証拠ではありませんが、無意識のうちにAJAXコントローラのアクションにアクセスすることで、アプリケーション内のランダムなリクエスト(つまり、HREFから)を停止します。 – MikeMurko

関連する問題