データベースを利用したWebアプリケーションを開発しています。データベーステーブル名とデータベーステーブルスキーマを必要とするいくつかの操作を実行する必要があります。この種の情報をクライアント側(JSONを介してJavaScript)に送信する場合、またはアプリケーションのサーバー側にそれらの情報を保持する必要がある場合、それは安全ですか?
このように考える
一方では、何も問題はありません。アプリケーションが SQLインジェクション に対して十分に安全である場合、攻撃者はその情報で多くのことを行うことはできません。テーブルに名前を付けない限りtable_2231
と列column_4231
(この場合、私はあなたを嫌います)、とにかくテーブル名を推測するのは難しくありません。ニュースWebサイトの場合、articles
というテーブルがあるか、サブスクリプションサービスがある場合は、subscribers
またはusers
があり、そしてなど。また、サーバーが侵害された場合、攻撃者はほとんどすぐにテーブル名を突き止めます。
一方、回避策があれば、公開する必要はありません。あなたのセキュリティが世話をされている場合、その場合、不明瞭な層が害を及ぼすことはありません。実際、優れたセキュリティ対策に加えて、あいまいなレイヤーを重ねることは、多くの場合良いことです。
しかし、私はあなたがこのようなことをやろうとしていると思います
SELECT * FROM $UNTRUSTED_INPUT WHERE blah = 1
その場合、絶対にありません。しないでください。
テーブル名を公開すると、予想よりも広範な結果が生じる可能性があります。たとえば、deleted_messages
、profile_views
、single_female_users
などのテーブル名を開示することで、会社を法的に不利な立場に置く可能性があります。そのデータの保持とユーザーのプライバシーは、突然議論の的になります。そして多くの費用がかかります。
もちろん、それを常に制御できるわけではありません。ハッカーは、テーブル名を公開することもできます。したがって、ベストプラクティスは、明日公開されるようにテーブルを作成することですが、情報を提供することは控えます。
セキュリティポリシーにおける彼の優先度に関係なく、より脆弱な自分を公開する情報が増える。
テーブルを機密と一般にセグメント化できます。機密テーブルは「公開」ではなく「エイリアス」にする必要があります。ただし、長期的に見ると、ソリューションは安全なものであり、その中に入ってみたい人にとって価値があります。