1

例: サーバー側は Asp.net MVC、クライアント側は KnockoutJS です。

セキュリティと標準の観点から: サーバーが編集リンクを出力し、クライアント側コードが "HasEditPermission" などの JavaScript ビューモデル プロパティに基づいてコントロールの可視性を設定することは許容されますか?

または、MVC Razor 構文は、ビューモデルに基づいてコントロールを選択的に出力する必要がありますか?

従来、これはすべてサーバー側で行われていましたが、現在ではほとんどのデータ バインディングがクライアントで行われているため、Razor と KnockoutJS に条件付きロジックを含めることで問題が混在しています。

言うまでもなく、サーバーは権限に基づいてすべてのポストバックを検証するため、権限のエスカレーションは不可能です。また、「あいまいさはセキュリティではない」という概念がここで作用することも指摘しておきます。編集リンクが存在しないからといって、攻撃者が yourwebsite/users/edit/1 を試みようとしていることが明らかではないということにはなりません。

4

1 に答える 1

1

これに対する私の実用的な見解は、条件付きノックアウト ビュー モデルやデータ バインディング式などを、ページ生成時に Razor を介して出力でき、多くのハックや設計上のトレードオフがなく、かなりクリーンな方法で出力できる場合は、そうするということです。しかし、Javascript や DOM にセキュリティ関連のデータ (パスワード、シークレット トークンなど) を隠していない限り、編集リンクのようなものを表示するか、いいえ。あなたが言うように、誰でも正当なアクセス権を与えられた既存の URL を変更できます。そのため、リソース自体が要求時に適切なチェックを行います。

多くの場合、ノックアウト スタイルの UI では、動的なクライアント側の条件に基づいて特定のリンクやボタンを利用可能にすることがあります。また、実際の「セキュリティ違反」と、誰かが不十分なサーバー ガード コードを生意気に公開してアプリケーション ロジックを盗聴することとを区別します。 Firebug で物事をハッキングすると、少しぼやけます。賢明なことを行い、特定のビジネスコンテキストのリスク/利害関係に比例していると思います.

于 2012-07-24T04:32:15.803 に答える