34

エンタープライズアプリケーションを構築するために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 サイトをハッキングして情報を盗む方法をハッカーに教えることが増えると思います。

4

3 に答える 3

44

セキュリティは重要な問題です。クライアントで公開されるデータとロジックについて慎重に検討することをお勧めします。これらの感情を SO の回答に適した具体的な質問に絞り込むにはどうすればよいでしょうか?

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

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

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

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

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

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

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

于 2012-12-03T03:46:39.803 に答える
2

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

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

于 2014-01-02T15:51:00.340 に答える
1

Breeze.js を使用して多くのことを行うことができます。まず、セキュリティに関する私の回答を確認してください。

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

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

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

于 2016-06-02T11:35:02.917 に答える