WordPress 、 Magento 、およびその他の広く使用されているソフトウェアの保護に関する最も一般的なアドバイスの1つは、データベーステーブル名にプレフィックスを追加するか、デフォルトのプレフィックス。たとえば、WordPressのデフォルトのwp_
接頭辞を1sdf34jSqo8_
などのあいまいなものに変更することをよく耳にします。
私が持っている質問はこれです:これはあいまいさによるセキュリティにすぎませんか?もしそうなら、とにかくそれを行うのは良い習慣ですか?
これについて私が見る長所と短所は次のとおりです。
利点:
xyz' OR 1=1 --'
のようなパスワードを送信するような攻撃を防ぐことはできませんが、攻撃者が何らかの方法でテーブル名を知るまでは、DROP TABLE foo
のようなクエリが実際に何かを行うことを防ぎます。1sdf34jSqo8_
で、その文字列がGETまたはPOST dataに表示される場合、veryが疑わしいしかし、攻撃者がその文字列を持っている場合、私はおそらくすでに攻撃されているでしょう。スーパーユーザーとしてまだ認証されていない人からのテキストを見ると、実際にはおそらくポケットベルへのダイレクトアラートです。欠点:
SELECT * FROM {prefix}foo LEFT JOIN bar ...
のようなステートメントを書いて、どこかにプレフィックスを忘れたために、バグや潜在的な脆弱性が発生する可能性があります。私は思う 「データベースのテーブル名を明らかにしても大丈夫ですか?」という質問に対する受け入れられた回答 私の考えをうまく要約します-データベースがインジェクションに対して安全であれば、テーブル名を明らかにすることによって何も失うことはありません。正常にアップロードされて実行された不正スクリプトのように、別のレイヤーで違反があった場合、(1)テーブルプレフィックスは簡単に発見でき、(2)とにかく気に入るはずです。
だから、質問の短いバージョン:これは、実際に開発者がアプリケーションを作成するときに行うべきこと、または単なる追加のレイヤーになりすましているのは悪い習慣ですセキュリティの?
EDIT:明確にするために、エンドユーザーが先に進み、たとえばWordPressインストールのデータベース開発者がデータベースを使用するアプリケーションを作成するときに、開発者が最初にこの種の機能を有効にする必要があるかどうかを尋ねています。