3

私は jquery で codeigniter を使用しています。コントローラーを直接アクセスから保護する方法を説明していただければ幸いです。たとえば、標準のjquery行を使用したビューがあります:

$('#handler').load('tools/get_stats');

ツールは、統計をロードする機能を備えた私のコントローラーです。スクリプトhttp://site.com/tools/get_statsの完全なアドレスをブラウザーに直接書き込むと、ブラウザーはもちろん、そのデータを開きます。ブラウザからのコントローラへの直接アクセスを保護する方法は? コントローラーの直接アクセスではなく、ビューでのみデータが読み込まれるようにします。

4

2 に答える 2

3

一般に、アクセスを提供する必要があり、HTTP は単純であるため、意味のある方法でこれを行うことはできません。または、より基本的には、提供する必要がある情報 (この場合はステートレスな接続情報) へのアクセスを拒否することはできません。最適な最初のステップは、簡単に改ざんされた要求情報に基づいて制限しようとするのではなく、(接続方法に関係なく) ユーザーがアクセスできるデータへのアクセスのみをコントローラーが許可するようにすることです。

そうは言っても、これを本当に追跡する奇妙な理由がある場合は、AJAX 要求で渡される何らかの形式の使い捨てトークンを使用できます。たとえば、ランダムなキーを生成し、それをどこかに永続化して (理想的にはハッシュ テーブルのようなもののメモリ内に保存するだけです。それ以外の場合に十分な遅延が発生することはないため)、ajax を発行するページでそれを渡すことができます。リクエスト。トークンはリクエストと共に返されて削除され、そのトークンは無効になります。コントローラーにはトークンが必要なため、直接アクセスすることはできません。

プロセスを停止して発行されたトークンを使用できるため、これはまだ回避できますが、curl で遊んでいるだけの人を思いとどまらせることになります (そのため、努力する価値はありません)。

簡単に言えば、誰もが 10 分以内に回避できないような方法でこれを行うことはできません。取得方法に関係なく、必要なデータのみを公開するように注意してください。

于 2012-10-15T02:52:50.297 に答える
3

CodeIgniter 入力クラスには、is_ajax_request()この目的のために呼び出されるメソッドがあります。

if ($this->input->is_ajax_request()) 
{
    //do something
} 
else 
{
    show_error("No direct access allowed");
    //or redirect
} 

専用の Ajax コントローラーがある場合は、もちろんこのロジックを__construct()メソッドに含めることができます。それ以外の場合は、コントローラー内でメソッドごとに実装することができます。


見る:

于 2012-10-15T03:12:29.783 に答える