0

以前の回答を検索しましたが、正確な回答が見つからないようです。

私はajaxを使用してコントローラーアクションを呼び出しています。このコントローラーアクションは、他の処理を実行してから、ユーザーコントローラーのパブリック関数を呼び出します。

Request::factory("/user/savepoints/".$new_total);

ユーザーコントローラーのaction_savepointsを、URLとして入力するだけのユーザーから保護するにはどうすればよいですか?

私は現在これを私の関数の一番上に持っていますが、それは私が探しているものを実行しません。

if( ! $this->request->is_initial() ):
   HTTP::redirect('/error');
endif;

ご協力いただきありがとうございます。

4

2 に答える 2

1

HTTP POSTリクエストを使用します。これは、URLを入力するだけでは実行できません。(なりすまし、またはフォームを介して行うことができますが)

または:

サーバー上で一種のトークンを生成し、それを何らかの方法でajaxコードに取得してから、それをajaxリクエストに戻すのはどうでしょうか。

明らかに、彼らがあなたのページからトークンを引き出す場合、彼らはまだ手動でリクエストを偽造することができますが、あなたは最初に彼らにトークンを発行しました。

トークンを使い捨て、時間制限、またはユーザー固有にすることができます。人々が独自のトークンを作成するのを防ぐために、サーバーシークレットを含むある種のチェックサムが含まれていることを確認してください。

于 2012-08-25T21:16:44.583 に答える
0

許可されていないユーザーがスクリプトを実行するのを防ぎたいですか、それともスクリプトがAJAX呼び出しを介してのみ実行できるようにしたいですか?

まず、ユーザーがログインしているかどうかを確認するだけです。AJAXリクエストは、通常のリクエストと同じセッションを使用します。

if (Auth::instance()->logged_in())

2つ目は、HTTPヘッダーがAJAX呼び出しであるかどうかを確認する必要があります。ただし、HTTPヘッダーはクライアントによって変更される可能性があり、信頼できないため、これは安全な方法ではないことに注意してください。

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    //This is an ajax call
}

残念ながら、これ以外にAJAXリクエストを検出するための防弾または安全な方法はありません。

于 2012-08-19T14:16:26.550 に答える