web-dev-qa-db-ja.com

CSVファイルを使用してSQLテーブルに入力する場合、どのようなセキュリティ上の影響がありますか?

CSVファイルに関するデータがあり、Powershellを使用してこのデータをSQLデータベースに自動入力したい。データは、完全ではないにしても、ほとんどが数値です。

私はここにあるスクリプトに基づいたスクリプトを使用しています: CSVをSQLサーバーテーブルに一括ロードするための簡単なパワーシェルスクリプト

これを使用する場合、どのようなセキュリティ上の問題に対処する必要がありますか? SQLインジェクションがどのように機能するかについてはよくわかりませんが、この場合は心配する必要がありますか?

2
techguy1029

SQLインジェクションは、実行を目的としたSQLクエリ/コマンドの「インジェクション」です。良い要約とリファレンスは [〜#〜] owasp [〜#〜] から入手できます。

この場合のリスクは、CSVファイルにSQLデータベースにロードされると、単にテーブルに挿入されるのではなく実行されるコマンドが含まれることです。

この問題を解決するには、送信者または受信者のどちらの立場からでもアプローチできます。送信者側からこれにアプローチすること、つまり入力データを操作することは、データを制御していて、悪意のある攻撃ではなく不正な入力を懸念している場合にのみ意味があります。データベース側でSQLiを軽減することは、これを行うための正確ではるかに安全な方法ですが、状況によってはより多くの労力が必要になる場合があります。

送信側では、入力を送信する前に解析して、意図したデータ(おそらく英数字のみ)のみが含まれていることを確認できます。これは通常、ウェブページフォームのようなものに意味があります。不正な入力は、「有効なメールアドレスを入力してください。データベース。あなたの場合、入力CSVがどのように見え、すべての場合に含まれるべきかを知っている場合、これは最も簡単な(必ずしも最善ではありませんが)解決策かもしれません。

一般に、より優れた汎用性の高いソリューションでは、データレシーバーの位置であるSQLサーバー自体からこれを処理します。これは、上記と同じまたは同様の検証を実行することを意味しますが、代わりにSQLサーバーが入力を受信して​​保存します。 SQLインジェクションの試みの場合、これはうまくいけばクエリまたは不正な入力のように見えるものをキャッチし、それを破棄するか、単にテキスト入力として扱うかのどちらかですが、最も重要なのはnotコマンドとして実行します。

入力を検証する方法は、入力の外観と、自分の状況で入力をどのように処理するかによって異なります。 OWASPは これに関する優れたガイド も提供しています。

SQLクエリ/インジェクションの試行 を確認するとさらに便利な場合があります。これは、特殊文字とコマンドの一部である場合に処理できるようにする必要がある特殊文字とコマンドの種類を確認できるためです。入力データセット。

2
svartedauden