0

さて、このトピックのタイトルは本当にばかげています-しかし、私はそれよりも良い方法でそれを要約することはできません。だからここに私の問題のより詳細なバージョンがあります:

開発者がカスタムイベントの文字列を専用サーバー(ライブラリで定義されたURL)に送信できるようにする小さなJavaScriptライブラリを作成しています。ライブラリが「testLib」と呼ばれているとしましょう。このライブラリを使用する開発者は、次のように書くことができます。

function success() {
   testLib.send("Everything OK");
}

したがって、この成功関数が呼び出されるたびに、ライブラリ内で検出されたサーバーに対してREST呼び出し(POST要求)が行われます。これまでのところ、それは問題ありません。

しかし、醜いのは、firebugなどを持っている人なら誰でもこれらの「testLib.send()」メソッドを呼び出すことができるということです。このライブラリの背後にある穴の感覚は、開発者が定義したイベントのみを追跡することであるため、これは本当に醜いです。もちろん、サーバーは基本的な検証(オリジンチェック、APIキーなど)を処理しますが、それでも:firebugを開始して、「testLib.send」メソッドを呼び出すだけで済みます。

「firebugユーザー」が事前定義されたライブラリメソッドを介してREST呼び出しを送信するのを防ぐ承認メカニズムを構築する機会はありますか?

4

4 に答える 4

3

実用的なものはありません。

ライブラリはクライアントのコンピューターで実行されます。あなたはそれを制御することはできません。JSを心ゆくまで編集できます。必要に応じて、それを完全にバイパスし、手作りのHTTPリクエストを送信できます(または、リクエストでサーバーを爆撃するための簡単なスクリプトを作成します)。

実装する実際の保護は、サーバー上にある必要があります。

于 2012-08-24T22:01:27.897 に答える
2

Javascriptを書くことは、オープンソースを書くことに似ています。FireBugは、スクリプトにアクセスしたり、その場でスクリプトを変更したり、メソッドを呼び出したり、変数にアクセスしたりできるプラグインの1つにすぎません。実際、それほど遠くまで行く必要はありません。ほとんどのブラウザーのJavascriptコンソールにはクイックが含まれています。評価入力ボックス。Javascriptはインタプリタであるため、誰でも好きなように参加して実行できます。

あなたはそれを少し難しくするかもしれない2つのオプションがあります(確かに通行不能ではありませんが):

1)難読化および/またはスクリプトのパックが完了したら、ほとんどの難読化ツールは簡単にバイパスできますが、2)メソッドに誰が呼び出したかを確認してもらうには、arguments.callee.callerを参照してください。とはいえ、これは厳密モードで問題が発生する可能性があります。

あなたが言うように、あなたの最善の策はサーバー側で検証を繰り返すことです。サーバー側の検証が失敗した場合-これは実際に何かを教えてくれます:誰かがあなたのJavascriptを故意にバイパスしたので、それに応じて彼に対処することができます。

お役に立てれば

TG

于 2012-08-24T22:05:00.650 に答える
2

ユーザーの認証

ページの読み込み時にアプリケーションがユーザーを認証すると、クライアント側からのすべてのリクエストに認証Cookieが付属するため、基本的に送信者を検出できます。

難読化とプライベートクロージャ

しかし、その特定の関数へのプログラムによるアクセスを防ぎたい場合は、その関数をプライベートでアクセスできないようにするための関数クロージャと、人々がすべてを簡単に書き直すことを妨げるコードの難読化が最善の策です。大きな難問の1つは、Base62が有効になっているJavascriptパッカーです。

しかし、この種のものはもちろんライブラリを難読化しますが、公的にアクセス可能な関数は引き続きアクセス可能です。

匿名ユーザーの防止

でも。匿名ユーザーがサーバーにデータを送信しないようにしたい場合は、実際にはできませんが、開発者(実際のユーザー)が行うような登録キーを関数に要求することで、不正な要求を特定できます。持っていますが、anonsはそうではありません。

そして多分グーグルで見つけられる他のいくつかのリソースはちょうどよく役立つかもしれません。表面を引っ掻くだけです。たとえば、XHRを使用すると、ユーザーはユーザー名とパスワードを送信して、要求を認証できます。これは、まさにあなたが求めているものである可能性があります。しかし、あなたは私たちではなくライブラリのデザインを持っているので、あなたはもっとよく知っているべきです。

于 2012-08-24T22:08:01.447 に答える
1

いいえ。javascriptはクライアント側で実行されるため、クライアントが実行している内容を誰かが読み取って自分で実行するのを防ぐためにできることは何もありません。通話を難読化するためにできることはいくつかありますが、これは隠すことによるセキュリティであり、信頼すべきではありません。開発者だけがAPIを呼び出していることを確認したい場合は、サーバー側で呼び出す必要があります。

于 2012-08-24T22:01:17.800 に答える