LoginSignup
2
2

More than 1 year has passed since last update.

SQLインジェクションを防ぐ 〜5

Last updated at Posted at 2021-11-21
SQLコードインジェクション防止の8のベストプラクティス

第5章です。

序章
1. クライアントサイドの入力バリデーションに依存しない
2. 制限された権限を持つデータベースユーザーを使用する
3. プリペアドステートメントとクエリパラメータ化を使用する
4. コードをスキャンしてSQLインジェクションの脆弱性を探す
5. ORMレイヤーを使用する
6. ブロックリストに依存しない
7. 入力バリデーションを行う
8. ストアドプロシージャに注意する

チートシート(英語)はこちら

5.ORMレイヤーを使用する

オブジェクトリレーショナルマッピング(ORM)レイヤーの使用の検討も推奨しています。ORMレイヤーは、データベースからのデータをオブジェクトに、またはその逆に変換します。ORMライブラリを使用すると、明示的なSQLクエリを減らすことができ、SQLインジェクションに対する脆弱性を大幅に低減できます。
既存のORMライブラリのいくつかの優れた例としてJavaのHibernate およびEntityFramework for C#があります。これらのORMライブラリの使用により、オブジェクトとデータベーステーブル間のマッピングを行うための雛型となるコードを自動生成することが可能です。
これならば、SQLクエリに自分で関与する必要さえありません。

とはいえ、カスタムクエリを作成する必要がある場合は、ここで問題が発生します。JavaのHibermateには、独自のHibernateクエリ言語(HQL)があります。HQLクエリをコンパイルするときは、インジェクションに再度注意し、プリペアドステートメントと同様に機能するcreateQuery()関数を使用する必要があります。

JavaScriptの場合、sequelizeのようなよく知られたORMライブラリも利用できます。sequelizeを使用すると、値をデータベース内の特定のタイプにマップする方法を定義できます。しかし、最終的に、ORMライブラリはロジックをSQLステートメントに変換し直す必要があります。したがって、これらのライブラリがパラメータの適切なエスケープを実装していると考えられます。
ORMライブラリにSQLインジェクションの問題が含まれていないことを確認するには、既知の脆弱性がないかをスキャンする必要があります。間違った古いバージョンのsequelizeまたはhibernateの使用によっても、問題が発生することがあります。Snyk Open Sourceを使ってプロジェクトをチェックすることにより、ライブラリ内の隠されたSQLインジェクションや他の多くの問題を防止することができます。

5つめは以上です。
最後までお読みいただきありがとうございました!

次回はSQLインジェクションを防ぐ 〜6に続きます。

SQLインジェクションに関する英語全原文はこちらです。


Contents provided by:

Jesse Casman, Fumiko Doi, Content Strategists for Snyk, Japan, and Randell Degges, Community Manager for Snyk Global

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2