web-dev-qa-db-ja.com

breeze.jsはどのようにセキュリティを処理し、ビジネスロジックの公開を回避していますか

エンタープライズアプリケーションを構築するために breeze js を検討しています。

そよ風の素晴らしさは、クライアントブラウザから直接クエリを実行できることです。これにより、不要なデータをロードすることなく、ユーザー入力に基づいて動的クエリを構築できます。 Breezeを使用すると、遅延読み込み戦略を使用した場合に、データの移動/転送を1/10以上削減するビジネスロジックを作成できることがわかりました。 これら のようなクエリを使用する

そよ風!!!

しかし、ビジネスロジックのセキュリティについてはどうでしょうか。たとえば、ビジネスロジックを隠したり、隠したり、隠したりできるリポジトリを作成できます。次に、MVC Web APIコントローラーを使用して、これらのリポジトリC#クラスを呼び出すだけです。そのため、Breeze JavaScriptはWebAPiコントローラーと通信し、WebApiコントローラーはC#リポジトリーと通信します。コントローラーは常に非常にシンプルで読みやすい状態に保たれますが、リポジトリには、アプリケーションを使用する会社の多くのビジネスロジックが含まれる可能性があります。したがって、ハッカーがたとえばGoogle Chrome開発者のコ​​ンソールを使用してJavaScriptコードを検査する場合、表示されるのはGetCustomers()、GetProductsForThisId(54)のようなものだけです。ビジネスロジックの90%がサーバー上のC#リポジトリに存在するため、そこで見られる(または盗まれる)可能性のある多くの情報。

Breeze.jsはそれをどのように処理していますか?

クエリとビジネスロジックを「コントローラーのC#から簡単なJavaScriptに」移動し始める場合、システムがメンバーシップベースであることを考慮する必要があります。 JavaScriptでクライアントに公開するクエリが多いほど、ソフトウェアの脆弱性が高まり、ハッカーにWebサイトをハッキングして情報を盗む方法を教えることが増えると思います。

34
Oscar Agreda

セキュリティは重大な懸念事項です。クライアントに公開されているデータとロジックについて慎重に検討することをお勧めします。これらの感情をSO回答に適した具体的な質問にどのように洗練させることができますか?

Breezeについては、ビジネスロジックをJavaScriptクライアントに公開する必要はありません。このようなロジックは、リポジトリやコントローラーメソッド内で安全にロックできます(そしてロックする必要があります)。

しかし、クライアントクエリ自体がどのように保護する必要のあるビジネスロジックであるかを理解するのに苦労しています。名前が「A」で始まる顧客のクエリの危険性はどこにありますか?

純資産が$ 100,000を超える顧客へのクエリについて心配するのは当然です。しかし、障害はクエリにはありません。障害は、そのような顧客情報を許可されていないユーザーに公開することです何らかの手段でクエリに追加されたBreezewhere句、またはGetCustomers()という名前のサービスの呼び出しを介して。

顧客への不正アクセスをブロックする場所はサーバー上にあり、GetCustomer()メソッドと同じようにIQueryableを返すBreezeコントローラーアクションメソッド内で簡単にブロックできます。どちらの場合も、コントローラーと公開するメソッド内に必要なセキュリティ制約を課す負担がかかります。

コントローラを作成します。リポジトリを作成します。ユーザーの権限にアクセスできます。あなたは、あなたが望むだけ多くまたは少なく露出する妥協のない能力で完全にコントロールできます。

FWIW、BreezeEntityManagerは、IQueryable<Customer>を返さないサービスメソッドを呼び出すことができます。 IEnumerable<Customer> GetCustomers()またはProduct GetProductForId(int id)などのWebApiコントローラーメソッドを呼び出すことができます。私の意見では、セキュリティを確保せずにBreezeのクエリ機能の柔軟性を失うことになります。しかし、それは私の意見です。 Breezeは、それが何であれ、あなたの選択をサポートします。

より具体的な「ハウツー」の質問に答えていただければ幸いです。

44
Ward

サーバーから401コードを取得した場合、ログイン画面をポップアップしてユーザーのログイン後に必要な作業をやり直す場合は、webapiの属性を使用して、クワイアリングが許可されていないユーザーを制限できることを追加します。

そのため、ユーザーは注文に関するデータを取得しようとしても、許可されていない限り取得できません。

2
user2968607

あなたはbreeze.jsを使ってたくさんのことをすることができますまず最初にここでセキュリティに関する私の答えをチェックしてください

Breeze JSで認証を処理する方法は?

また、breeze.jsはクライアントで通常のORMのように使用できますが(これは非常に役立つ場合があります)、ビジネスロジックをWeb APIコントローラーに保持し、ODataクエリを使用して必要なものだけを公開する必要があります。データ操作ロジックが必要な場合は、そのための特定の方法を使用してサーバー上で実行する必要があります。

クライアントにはUIロジックのみが存在する必要があります。また、クライアントから直接複数のクエリを実行し始めると、パフォーマンスにいくつかの影響があることも考慮してください。エンティティグラフを展開してより多くの結果をロードするか、オブジェクトを返すより特殊なメソッドを使用します。 Breezeは結果を内省し、影響を与えることなくエンティティを楽しく消費します。

1
Chriss