3

これが私の状況です:

データベースからデータを取得する検索ページがあります。表示されている各レコードには、そのレコードのデータベースからデータをプルするためのキーが付加されています。レコードのドキュメントへのリンクをクリックすると、このキーがKOデータバインドを使用してURLに追加され、対応するMVCコントローラーに制御が渡されます。

これが私の問題です:

そのキーはURLに表示されます。私はそれを許すことはできません。このウェブサイトのユーザーは、特定のレコードへのアクセスのみが許可されています。ユーザーがURLのキーの最後の数字または2つを変更するだけでレコードを表示できる場合は、受け入れられません。私がこれまでに思いついた最善の解決策は、AES256暗号化を使用して、検索結果の処理時に各キーを暗号化し、暗号化が別のコントローラーに渡された後に復号化することです。これは、HTTPSが使用されている環境に到達した場合を除いてうまく機能します。400エラーが発生します。

私はこれを考えすぎていますか?MVCとKOを使用して、URLからキーを完全にマスクする方法はありますか?または、HTTPSを使用している場合でも、URLで暗号化を許可する必要がありますか?

明確にするためのいくつかの例を次に示します。

コードを変更しない場合、URLは次のようになります。

https://www.website.com/Controller/Method/1234

暗号化を使用して、私は次のようなものを思いつきます:

https://www.website.com/Controller/Method/dshfiuij823o==

HTTPSで機能する限り、これは正常に機能します。

どういうわけか、URLのキーをスクランブルするか、それを取り除く必要があります。または、コントローラーが呼び出されるたびにキーを使用して検索を実行しない方法を決定します。

助けてくれてありがとう。

4

2 に答える 2

3

ここで本当に明らかな何かが欠けていない限り、Webサービス側で、ログインしたユーザーがレコードに対する正しいアクセス許可を持っているかどうかを確認し、そうでない場合はレコードを表示しないでください。

これは、理想的には検索レベルで実行して、ユーザーがアクセスできないファイルが表示されないようにする必要があります。また、ブラウザのキーを変更しても、アクセスできません。

メンバーシップシステムがない場合、本当にサイトを安全にしたいのであれば、メンバーシップシステムを実装する必要があります。そうでなければ、あなたは火で遊んでいます。それ以外の場合は、ドキュメントを「パブリック」または「プライベート」に設定する必要があります。この場合でも、データベースレベルの変更が必要になります。

編集

IDを推測できないようにする必要がある場合は、暗号化せずに、もっと単純なものを選び、データベースレベルでそれらのGUIDを作成してください。その場合、URLには暗号化されたキーの代わりにGUIDが含まれます。これは、呼び出しごとにレコードIDを暗号化/復号化する必要がないため、はるかに効率的です。

ただし、これはまだ100%安全ではなく、暗号化された文字列の場合と同じように、クエリ文字列からGUIDを確認(およびコピー/貼り付け)できるため、PCIデータセキュリティチェックに合格することはないと思います。現実的には、完全に準拠するにはメンバーシップシステムが必要です。

于 2012-10-19T16:04:02.347 に答える
0

私はthedixonに同意します。とにかく、ユーザーがアイテムのいずれかを表示する権限を持っていることを確認する必要があります。

また、GUIDを使用することをお勧めします。

ただし、intをidとして使用する場合は、次の簡単な方法があります。URLを作成するとき:idに12345などの大きな整数を掛けます。次に、リクエストを処理するときに、URLの数値を「シークレット」で割ります。 " 番号。それは絶対確実ではありません。しかし、推測する人は、実際のIDを取得する可能性はごくわずかです。具体的には、実際のIDを取得する可能性は12345分の1です。

于 2012-10-19T16:15:11.940 に答える