5

特定の GET リクエスト (例: ) を保護するにはどうすればよい^api/...ですか?

このビュー (API 呼び出し) を自分の Django Web アプリケーションでのみ利用できるようにしたいと考えています。

直接ではなく、Django Web アプリケーションからのみ呼び出す必要があります。

CSRF ミドルウェアによって生成されたハッシュ キーを使用することは良い方法ですか? より良いアプローチはありますか?

4

2 に答える 2

2

これを達成するための信頼できる方法はないのではないかと思います。私が考えることができる最善の方法は、JavaScriptクライアントである種の秘密鍵を生成し、コードを頻繁に使用することです。それは「アテーカー」があなたの方法を使うのを難しくするでしょう。たぶんHMAC、またはそのようなものを使用しています。

例。次の呼び出しを行います/api/users/1/vote_up。秘密鍵を生成するためのコードがあります。

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha256.js">

var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, generatePassphraseObfuscated());
hmac.update("/api/users/1/vote_up");
var hash = hmac.finalize();
$.ajax(
    /api/users/1/vote_up,
    {hash: hash}
)
</script>

generatePassphraseObfuscated機能が鍵です。複製を本当に難しくする必要があります。また、リクエストごとに変更し、送信した「バージョン」を識別するためのCookieを追加することもできます。たとえば、次の2つのバージョンがあります。

function generatePassphraseObfuscated(){
    return 1;
}

function generatePassphraseObfuscated(){
    return 2;
}

そしてそれらをランダムに提供し、それをクッキーで識別します。したがって、djangoビューでどちらを使用するかがわかります。

繰り返しますが、それは信頼できません。あなたがやりたいことをするための絶対確実な方法はありません。これは、他の人が複製するのを醜くするためのばかげた方法です。

于 2013-02-02T15:06:55.787 に答える
0

これらの返信を確認してください。同じ問題が発生しているようです。request.META['REMOTE_ADDR']があなたのローカルアドレスと同じかどうかをチェックするデコレータを書きたいと思います。

于 2013-02-02T14:32:40.647 に答える