0

3つのテーブルがあるとしましょう。

User        Blog        Post

UserId      BlogId      PostId
Username    BlogName    PostTitle
            UserId      BlogId

今、ブログの所有者がにアクセスしようとしているとしましょうEditPost.aspx?ID=51。元のブログ所有者だけが実際の投稿を見ることができるように、このクエリ文字列をどのように保護しますか。例えば。ユーザーJonはユーザーMaryの投稿の編集を開始しませんか?

私が持っているいくつかのオプション:

1)クエリ文字列を暗号化します。これは明らかに100%安全ではありませんが、機能します。

2)クエリ文字列に含まれるPostIDが、実際にログインしているユーザーの投稿であるかどうかを、SessionにあるUserIDと照合することで毎回確認します。これの欠点は、テーブルが3つしかない場合は問題ありませんが、10〜12のテーブルが関係するテーブルの階層があり、1番目のテーブルにUserIDがあり、実際に12番目のテーブルをクエリしている場合は、チェックする必要があります。 12の結合を作成してトップに戻り、それが「本当に」彼のものであるかどうかを実際に確認します。

質問は、これらのうちどれをあなたのサイトで実際に使用していて、仕事はうまくいっていますか?

4

2 に答える 2

2

レコードの編集を制御するには、レコードの所有者を知る必要があります。

アプローチ#1は、リプレイ攻撃に対して脆弱である可能性があるため、欠陥があります。さらに言えば、ユーザーがページに正常に移動した場合は、ユーザーが許可されていると見なします。これは「隠すことによるセキュリティ」であり、大したことではありません。

アプローチ#2はあなたの唯一の本当の選択肢です。PostIDをUserIDに関連付けるための結合の数が心配な場合は、クエリの最適化に関する新しい質問を投稿する必要があります(クエリと特定のデータベース構造に関する詳細情報を提供します)。

于 2012-04-12T16:38:08.217 に答える
2

クエリ文字列は暗号化する必要はありません。レンダリングまたはデータが送信されるたびにサーバー側でチェックする必要があります。

セキュリティチェックは問題ありません。データにアクセスするために12の結合がある場合は、データモデルを再構築するか、ユーザーの外部キーをより多くの場所に保存します。

于 2012-04-12T16:38:23.553 に答える