#####SQLコードインジェクション防止の8のベストプラクティス
https://snyk.io/blog/sql-injection-cheat-sheet/
######第2章です。
- クライアントサイドの入力バリデーションに依存しない
- 制限された権限を持つデータベースユーザーを使用する
- プリペアドステートメントとクエリパラメータ化を使用する
- コードをスキャンしてSQLインジェクションの脆弱性を探す
- ORMレイヤーを使用する
- ブロックリストに依存しない
- 入力バリデーションを行う
- ストアドプロシージャに注意する
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