LoginSignup
1
3

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-11-20

SQLコードインジェクション防止の8のベストプラクティス

第2章です。

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

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

2.制限された権限を持つデータベースユーザーを使用する

前述のように、SQLインジェクション攻撃にはさまざまな種類があります。他よりも有害なものもあります。考えてみてください"SELECT * FROM USER WHERE USERID = '" + userid +"'"のようなものだとします。" foo' OR '1'='1 "というインジェクションは、すべてのユーザーを提供することになり、すでに有害です。" '; UPDATE message SET password = 'EVILは、侵入者がすべてのエントリを変更することが可能であり、さらに問題を引き起こします。
アプリケーションのデータベースユーザーを作成するときは、そのユーザーの権限について考える必要があります。そのアプリケーションには、すべてのデータベースの読み取り、書き込み、および更新の機能が必要でしょうか? テーブルをTRUNCATEやDROPについてはどうでしょう?プリケーションのデータベースに対する権限を制限すれば、SQLインジェクションの影響を最小限に抑えることができます。
アプリケーションのために単一のデータベースユーザーを持たず、複数のデータベースユーザーを作り、それらを特定のアプリケーションロールに接続するのが賢明でしょう。セキュリティ問題は連鎖的に発生する可能性が高いので、大きな被害を防ぐためには、連鎖のすべてのリンクに注意する必要があります。

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

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

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


Contents provided by:

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

1
3
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
1
3