6

これは、Web フォーム オーバー データの種類に関する初心者向けのパターンの質問です。データベース ID の公開 - セキュリティ リスク?を読みました。受け入れられた答えは、これは時間の無駄だと私に考えさせますが、待ってください...

ビジネス ロジック ライブラリを参照する MVC プロジェクトと、それを参照する NHibernate SQL リポジトリのアセンブリがあります。何かのせいでコントローラーのコードベースからこれらのリポジトリを直接参照しなければならなくなった場合、何が問題だったのかがわかります。しかし、これらのコントローラーがデータベース レコード ID を使用して URL パラメーターで対話する場合、それは間違っているように見えるだけでしょうか?

これらの ID が (MVC アクションによって) 消費できなくなるとは考えられません。データベース内の同じ行に対応する 2 つの UI エンティティが必要になることはないと思います。コントローラーが ID を何らかの方法で解釈するつもりはありません。代理キーは違いがありません。それでも、合理的な設計に関する仮定は、レイヤーをスキップする依存関係よりも優れているわけではないため、問題が発生したいと考えています。

ビジネス ロジック アセンブリのみを参照し、そのセッションでのみ意味を持つ BL オブジェクトと GUID で対話し、アセンブリがデータベース ID を使用してトランザクションを永続化する Web アプリケーションを作成するにはどうすればよいでしょうか?

4

5 に答える 5

3

必要に応じて、IDを暗号化またはハッシュ化できます。ソルトとしてセッションIDを使用します。それは文脈に依存します。カタログページを簡単にコピーできるように明確にしたい公共のショッピングサイト。ユーザーアカウント管理者はIDを暗号化しても問題ないため、ユーザーは他人のアカウントにURLハッキングすることはできません。

これを隠すことによるセキュリティとは見なしません。悪意のあるユーザーが1つの侵害されたアカウントを持っている場合、そのユーザーとしてログインしている間に設定されたすべてのフォームフィールド、URL ID、およびCookie値を確認できます。次に、別のユーザーとしてログインしたときにそれらを使用して、アクセス許可をエスカレーションすることができます。ただし、セッションIDをソルトとして使用してそれらを保護することにより、そのデータをロックダウンし、1つのセッションでのみ役立つようにします。ページをブックマークすることもできません。彼らはあなたの保護を理解できますか?おそらく。しかし、おそらく彼らは別のサイトに移動するでしょう。車のドアをロックしても、実際に車に乗り込みたいと思った人が車から遠ざかることはありませんが、それは難しくなるので、誰もがそうします。

于 2012-04-05T21:11:16.153 に答える
2

パラメータの改ざんはデータの変更につながる可能性があるため、非常に注意してください。これらの ID を公開するときは、「誰がどの ID にアクセスできるか」に関するルールをアプリケーションに慎重に組み込む必要があります。

たとえば、OrderId に基づいて注文を更新する場合は、次のようにロードおよび更新の where 句に含めます。

ここで利用可能なMVCに保存されたIDを支援する拡張機能を開発しました:

http://mvcsecurity.codeplex.com/

また、これについては、次のセキュリティ コースで少し説明しています。Hack Proofing your ASP.NET MVC and Web Form Applications

于 2012-04-05T20:01:36.283 に答える
1

これらの応答以外に、ユーザーが必要な情報のURLをハッキングできるように、明白なIDを使用するとよい場合があります。たとえば、www.music.com \ Artists\acdcまたはwww.music.com\arist\smashing-pumpkinsです。それがユーザーにとって意味があり、ユーザーがページからURLを介して理解できる情報を増やすことができる場合は、さらに良いでしょう。特に、市場セグメントが若いか技術に精通している場合は、IDを活用してください。これはまたあなたのSEOを後押しします。役に立たないときは、それをエンコードします。セッションに対して顧客IDをチェックしないのに、1人の開発者が1つの間違いをするだけで、顧客ベース全体を公開できます。

しかしもちろん、あなたのユニットテストはそれを捕らえるはずです!

于 2012-04-05T22:42:51.900 に答える