4

私はSPAに取り組んでおり、ページ上のHTML要素を表示および非表示にするための最良の方法は、ユーザーの資格情報に依存しているのか疑問に思っています.

RestfulAPI バックエンドと AngularJS を使用する JS ヘビー クライアントがあります。認証されると、ユーザーが許可されていることに応じて、ページの特定の要素が表示され、他の要素が非表示になります。
現在、認証時にサーバーからJSONオブジェクトを送信します。これは、アクセス許可のリスト(文字列配列のみ)を保持し、アクセス許可配列内のそれぞれのキーの存在に応じて要素を表示/非表示にします。
サーバー側の API を保護し、各リクエストが処理される前に、ユーザーが承認されていることを確認します。
これは、HTML と JS を改ざんし、クライアント側で要素を有効にして、許可されていない要求をしようとする人々から保護するのに役立つと思います。

別のレベルの疑似セキュリティとして、クライアントに送信されるアクセス許可名が実際のアクセス許可の単なるエイリアスであることを確認します。API が要求を承認しようとすると、検索対象のクレームの名前が異なります。
私の質問は - これは安全なアプローチですか?
そこにもっと良いアプローチはありますか?
ユーザーが表示を許可されている HTML のみを含む HTML テンプレートは、承認時にのみサーバーから取得する必要がありますか?
サーバー側の承認が完全である場合、ユーザーがすべての HTML を表示できるかどうかは重要ですか?

4

2 に答える 2

6

サーバー側の承認が完全である場合、ユーザーがすべての HTML を表示できるかどうかは重要ですか?

あなたの質問のこの最後の部分は、本当に全体の鍵です。

誰かがあなたの ajax API に直接 http リクエストを送信するのを止めるものは何もないため、サーバーの承認は気密でなければなりません。API が公開されると (サイトを公開するとすぐに公開されます)、これらの URL は誰でも呼び出すことができます。そのため、サーバー コードは、セキュリティの観点から完全に安定している必要があります。

しかし、クライアント側のコードに関しては、そのとおりです。それは実際には問題ではありません。サイトの HTML、CSS、Javascript コードを誰かが見ているのを止めるためにできることは何もありません。かどうかは関係ありません。

要素がページ上にある場合、ユーザーはその要素にアクセスできます。それがクライアント側ソフトウェアの性質です。

ただし、保護する必要があるのは、要素自体ではなく、要素内のデータです。

ユーザーが特定のデータを表示できないことが重要な場合は、そもそもそのデータをブラウザーに提供しないでください。それが唯一の方法です。ブラウザに表示されると、ユーザーは完全にアクセスできるようになるため、送信前に承認されていることを確認してください。

于 2013-09-23T13:47:08.270 に答える
1

サーバー側の承認が気密である場合、ユーザーがすべての HTML を表示できるかどうかは重要ですか?

セキュリティの観点からはそうではなく、あなたのアプローチは正しいです。

ユーザー エクスペリエンスの観点からは、間違った要素が間違ったタイミングで表示されてユーザーを混乱させないように、HTML レンダリング コードが十分に堅牢であることが保証されている限り、それは正しいことです。

于 2013-09-23T13:45:32.930 に答える