- パラメーター化されたクエリを何度も使用しましたが、SQL インジェクションの防止に役立つことがわかっています。しかし、SQLインジェクションを防ぐためにパラメーター化されたクエリ内で機能する基本的なロジックが何であるかを知ることができるかどうか疑問に思っていましたが、それは非常に単純かもしれませんが、私はそれについて知りません. 私はその基本的なものをGoogleで検索しようとしましたが、Asp.netでパラメータ化されたクエリを使用する方法の例を見つけるたびに.
- SQL インジェクションで使用される (',-- など) のような特殊文字を停止する特別なクラスを作成することについては知っていますが、特殊文字だけを停止することで SQL インジェクションを完全に防ぐことができますか?
- 最後に、.net パラメーター化クエリは SQL インジェクションを完全に阻止できるのでしょうか?
2 に答える
パラメータ化されたクエリは、準備されたクエリ データベースのサポートに依存していないと思います。データベース ドライバー自体は安全な方法で値を渡しますが、その方法はドライバー自体に依存します。
PostgreSQLのマニュアルでは、データベース レベルでのパラメーター化されたクエリの基本について説明しています。
一方、パラメーター化されたクエリを使用すると、ロケールに依存するデータを簡単に渡すことができます。たとえば、ユーザーが 10 進数の 100,00 を入力すると、サーバーは 100.00 の値を期待します。
私が知っているすべてのデータベース エンジンでは、「準備済み」(別名「パラメーター化」または「静的」) クエリを使用して SQL インジェクションを防止しています。パラメータに文字が渡される場合、文字をフィルタリングする必要はありません。パラメーターを使用して準備するのではなく、コードで連結する SQL を記述したことがある場合は、おそらく SQL インジェクションの危険にさらされています。使用しているデータベースのセキュリティ マニュアルを参照する必要があります。SQL インジェクションに関するセクションが含まれている可能性が非常に高いですが、すべて読んでください。1 時間もかからずに、確実な指示が得られ、データベースに適用されるベスト プラクティスに従っているという自信が得られるでしょう。