Postgresは動的なコード実行を許可し、SQLインジェクションに対して脆弱になる可能性があります。
これに対してどのような保護対策がありますか?
SQLを使用する他のデータベースと同じように、以下を使用します( OWASPチートシートから)
SQLインジェクションはアプリケーションの脅威であり、データベースの脅威ではありません。最後に、すべてのリレーショナルデータベースは、文字列として渡されるSQLを実行します。また、SQL文字列が有害でないことを確認するのは、アプリケーション開発者の責任です。
SQLインジェクションは、アプリケーションが有害なSQL文字列をデータベースに送信する方法であり、アプリケーション開発者にとっては最初のビューでは明白ではない方法で送信されます。例:アプリケーションに次のようなコードが含まれている場合
string sql_stmt = "select a from t where k = '" + textfield.text + "'"
どこ textfield.text
はアプリケーションでユーザーが入力したテキストであり、データベースにsql
を送信すると、賢いユーザーが入力できます
';drop table t; --
文字列になるテキストフィールドに
select a from t where k = '';drop table t; --'
データベースに送信され、テーブルt
が削除されます。
しかし、これはデータベースではなく、アプリケーション開発者の責任です。データベースは、送信されたSQLを実行するだけです。そして最終的には、テーブルを削除する可能性がなければなりません。
@RoryAlsopが彼の回答ですでに述べたように、Postgresは他の多くのデータベースと同様に、安全なコード(権限、準備されたステートメントなど)の開発を容易にするためにアプリケーション開発者にいくつかのサポートを提供しますが、最終的にはアプリケーション開発者の責任ですこれらの方法または他の方法を使用して、SQLインジェクションからapplicationを保護します。これが発生する可能性があるためです。データベースはこれが脅威であるレベルではなく、障害の影響が発生する場所のみです。