2010-12-08 18 views
1

私はいつもこの問題を念頭に置いており、常にサーバー上でそれをやるという簡単な解決策をとってきました。しかし、私はそれについて多くの人に尋ねることができ、賢明な人が信頼できる解決法を手伝ってくれるかもしれないと決めました。サーバーとブラウザ間の信頼できる通信?

問題:多くのユーザーにサービスを提供するWebアプリケーションを開発しています。提供する機能の一部には、外部APIを呼び出すことが含まれます。その呼び出しは各ユーザーに対して実行されます。呼び出しは、サーバーまたはブラウザのJavaScriptで行うことができます。いずれの場合も、APIコールからのデータの処理結果をサーバーのデータベースに保持します。私はAPIを呼び出すことをオフロードし、ブラウザのJavaScriptに結果を処理したいと思います。終了後、データを保持してサーバーにコールバックします。このアプローチで見られる問題は、誰もがJavaScriptの動作を変えることができるということです(悪意のある人やそのような人には簡単に悪意のあるものが悪意のある/間違ったデータをサーバー上に残すことがあります)。

私はサーバから、前のシナリオに従ってJavaScriptから私に届くデータが正しいと判断し、変更しないことができますか?

答えて

1

サーバーAにデータを作成してクライアントに渡し、そのクライアントがサーバーBにそのまま渡すようにするには、単に反タンパーハッシュをサーバーに含めるだけです。サーバーAとBは、塩として使用する秘密を共有します。クライアントはこの塩を知らないので、それ自体のために本物のデータを作ることはできません。

この手法では、サーバーAがデータを発信したという確信度のみが得られます。古いデータのリプレイ攻撃など、考慮する必要のある他の脆弱性があります。

+0

私はそれを正しく理解している場合、サーバーAとサーバーBは、常にメッセージを転送する中間の人であるだけjavascriptとanti-tamperハッシュを含める必要がありますか... ...事は、それはすべてどのように作成するanti-tamperハッシュ...私は、javascriptがAPI呼び出しのいくつかの結果を取得すると仮定していたので...処理し、結果を転送します... javスクリプト処理が真ん中に関わっていなければ、urソリューションは完璧です。 .. javascriptはフォワーダとして機能します...私はその解決策が好きです – humanzz

+0

正しいです。クライアント側でデータを変換する場合は、データが汚染されている可能性があり、悪質な可能性があるという前提のもとで操作する必要があります。 Nick Craverが他の答えで主張していることは、かなりです。 –

5

単純な回答はです。はできません。JavaScriptはパイプラインで最も安全性の低いメカニズムです。操作が簡単です。それを安全にしたい場合は決してにJavaScriptを依頼してください。より一般的な意味でのそれの

考える:あなただけ...あなたはブラウザに対して何ら制御、JavaScriptエンジン、またはユーザーそれを操作していないあなたは、少なくとも多少制御する環境を確保することができます。

常にサーバー側、常に、常に、常に検証します。

+0

「JavaScriptに決して依存しないでください! – aefxx

+0

@aefxx - 「安全なものをやる」ことを意味していました。 –

+0

aefxxはあなたのタイプミスを指摘していました:「安全なものにしたいなら、JavaScriptを使うべきです。 – Gareth

関連する問題