9

私が取り組んでいる JavaScript アプリケーションを保護する方法を研究しています。このアプリケーションは、バックエンドとして APE (Ajax Push Engine) を使用するチャット クライアントです。

現在、誰でもページにアクセスして APE サーバーに GET/POST リクエストを行うことができます。チャット クライアントを登録ユーザーにのみ提供したいので、そのユーザーの要求だけが受け入れられるようにしたいと考えています。PHP でユーザー名/パスワード認証を使用して、ユーザーにページを提供できます。しかし、彼らがページを手に入れたら、彼らが JavaScript を変更したり、悪意のある人の手に渡ったりするのを防ぐにはどうすればよいでしょうか?

クライアント/サーバーアプリケーションを保護するためのこの方法は有望に見えます: http://abhinavsingh.com/blog/2009/12/how-to-add-content-verification-using-hmac-in-php/

秘密鍵の送信に依存しないため、これは JavaScript クライアントに理想的であるという別の情報源があります。しかし、これはどうしてですか?上記のチュートリアルによると、クライアントは秘密鍵を提供する必要があります。JavaScriptを持っている人は誰でもそのユーザーの秘密鍵を持っているので、これはあまり安全ではないようです. 私が理解していることから、次のように機能します。

  1. ユーザーはユーザー名とパスワードでログインします
  2. PHP はユーザー名とパスワードを検証し、ユーザーの秘密鍵を検索して、それを JavaScript に挿入します。
  3. Javascript は、(秘密鍵を使用して) 署名を提供し、すべての APE 要求で公開鍵を提供します。
  4. APE は、計算された署名を受信した署名と比較し、要求を処理するかどうかを決定します。

JavaScriptアプリケーションが秘密鍵を認識する必要がある場合、これはどのように安全ですか?

助けてくれてありがとう!

4

3 に答える 3

2

答え: 技術的には、ユーザーが JavaScript を変更するのを防ぐことはできません。あなたはそれについて何もできないので、それについて心配しないでください。

ただし、防止する必要がある攻撃は、クロスサイト リクエスト フォージェリ(CSRF) です。さまざまなドメインの悪意のあるスクリプトは、ブラウザーによって保存された Cookie を使用して、フォームをドメインに自動的に送信することができます。これに対処するには、AJAX 要求によって送信される実際のデータ (これはブラウザによって自動的に入力されません)。

于 2010-11-23T03:02:29.837 に答える
1

JavaScriptアプリケーションが秘密鍵を認識する必要がある場合、これはどのように安全ですか?

なぜだめですか?これはユーザー自身の秘密鍵であるため、ユーザーがそれを他人に渡そうとする場合、それはユーザーの問題です。パスワードを教えて、他の誰かがあなたのアカウントにアクセスしたと言うのと同じです。

これについて少し考えれば、公開鍵暗号化や HMAC などを実装する必要がないことに気付くでしょう。通信チャネル自体が安全であれば (HTTPS を使用するなど)、通常のセッションベースの認証で十分です。

于 2010-11-23T03:05:55.327 に答える
0

HMAC 認証は、サードパーティが接続しようとしている API に適しています。認証済みであることを示す Cookie をクライアントのブラウザーに書き込むことで、アプリのサービスが向上するようです。次に、各 ajax リクエストで、その Cookie を確認できます。

編集: HMAC がサードパーティの API により適していることについて私が言ったことを少し撤回します。従来、HMAC では、各ユーザーが独自の秘密鍵を取得します。これはあなたのアプリケーションには必要ないと思います。おそらく、マスター秘密鍵を 1 つ保持するだけで済み、各ユーザーに一意の「公開」鍵を与えることができます (私はこれを公開鍵と呼んでいますが、実際にはユーザーは鍵について知ることはありません)。ユーザーがログインすると、2 つの Cookie が書き込まれます。ユーザーの公開鍵と暗号化されたタイムスタンプの組み合わせと、タイムスタンプが何であるかを示す別の鍵の組み合わせです。次に、サーバー側で、暗号化されたキーを検証し、タイムスタンプが所定のしきい値内にあることを確認できます (たとえば、アプリでアイドル状態になっている場合は 10 ~ 30 分)。それらが検証されたら、暗号化されたキーとタイム スタンプを更新します。

于 2010-11-23T02:47:15.853 に答える