1

選択ボックス(またはhtmlコードの他のもの)の値は、データベーステーブルの主キーであってはならないことを読んだところならどこでも。例えば:

<select>
       <option value="1">Value 1</option>
       <option value="2">Value 2</option>
</select>

データベースには、これらの値を主キー (1、2、3、...) とするルックアップ テーブルがあります。したがって、このルックアップ テーブルを参照するテーブルに格納する選択ボックスのデータは、1、2、3.... のような数値です (オプション フィールドの値として)。セキュリティ上の理由から、同じ値を html とキーとして使用しない方がよいと読みましたが、それで何が問題なのですか? なぜこれがセキュリティ上の理由である必要があるのか​​ わかりませんか?

4

4 に答える 4

4

隠すことによるセキュリティのように聞こえますが、私にはセキュリティがまったくありません。

データベースの優れた主キーは、純粋にシステムの一意性のためであり、データの意味に関連するものであってはなりません。主キーデータに関連している場合(たとえば、人々の社会保障番号など)、悪意を持って使用される可能性のある情報を公開しているため、キーの公開にセキュリティ上の問題があります。その場合、技術的な観点からの最善のアプローチは、それらの意味のあるキーを使用してアプリケーションを停止するようにアプリケーションを変更することかもしれないと主張することができますが、克服するためにキーを他の意味のないキーにマップすることはより口当たりの良いアプローチかもしれません問題。

キーの公開がセキュリティの問題として解釈される可能性がある場合に頭に浮かぶ別のシナリオは、アプリケーション/データレイヤーの書き込み可能なデータに対して不適切な認証と承認が行われ、それらのキーの知識を持つ誰かが応用。繰り返しになりますが、システムを保護することがより良いアプローチです。

セキュリティは別として、キーが実際に操作されているデータを識別し、アプリケーションがページを生成するときにキーを検索している場合、特定の問題を考えることはできません。

于 2010-10-24T21:28:14.013 に答える
1

URL からの情報がどのように処理されるかが気になります。value="does_this_break_the_code" または value="can_I_read_secret_info" を使用してコンテンツを投稿するとどうなりますか

于 2010-10-24T21:47:50.380 に答える
1

URL、HTML、またはアプリケーション コードで代理キーを使用する場合は注意が必要です。一般的なキーについては同じことは言えません。

代理キーは、ビジネス上の意味を持つことも、アプリケーション コードや外部プロセスに依存することも想定されていません。たとえば、データベース設計の進化やデータセットのマージの結果としてキー値を変更する必要がある場合、これはしばしば重要な考慮事項です。コードまたは URL で代理キーを「マジック ナンバー」として使用すると、代理キーを便利にする機能そのものが損なわれる可能性があります。また、代理キーは、値が意味を持たず、自然キーを使用するよりも読みにくいため、ユーザー (および場合によっては開発者) にとって不便です。

URL と永続的なコードで自然キーを使用することをお勧めします。代理キーは、本来あるべき場所であるデータベースの内部に保管してください。

于 2010-10-24T22:05:28.757 に答える
0

主キーは、DB内の各アイテムの一意の識別子として使用する必要があります。おそらく、実際のアイテムに関連する部品番号や何かではない可能性があります。一般的に言えば、PKは何も意味しません。セマンティクスの世界では、すべてが何かを意味するはずです。より適切な一意の識別子がある場合は、必ずそれを使用してください。PKはデータベース以外には役立たないからです。

車のデータベースがあるとすると、すべての車にはVIN(車両識別番号)と呼ばれる一意の識別子があり、VINには、特定の各車に関する一連の情報が、それを製造した工場までエンコードされています。VINは、その1台の特定の車のみを識別します。アイテムのPKは何でもかまいません。車はDBからドロップされ、PKは存在しませんが、そのVINはまだどこかにあります。これはPKよりもはるかに優れた一意のIDであるため、おそらくユーザーに表示されるはずです。

于 2010-10-24T21:28:33.880 に答える