ソフトウェアというよりアプリ、SQLよりno SQLという言葉のほうがピンとくる人が増えてきているかもしれません。はじめてno SQLついて知ったときには、SQLじゃないのにDBなんだ?!、どういうこと?とびっくりしましたが、ネーミングもさることながら、データのマネージメント、データサイエンティストについて、高校の時からしっていれば(どんだけ前だよ!)、、、そうすれば、数学もっと頑張ったのに。。。と、後悔、先に立たずです。
ちなみにアプリは英語ではアップ(英語ではapp)というのが一般的。(アはエにちかいアですwww)
SQLは(エス・キュー・エル)は、英語ではシークェル。響きがけっこう違いますよね。
海外のエンジニアと話していて、
SQLのこと話してるのに、シーコールとか、Cカールとか聞こえるし、なんなん?と、とまどった経験があるある!の方も多いのではないでしょうか。
さて、前々回にjava sciptのnode.jpのコードインジェクションについての記事を取り上げましたが、今回はSQLのインジェクションを防ぐためのベストプラクティスについての記事を取り上げたいと思います。
英語全原文はこちらです。
チートシート(英語全文)はこちらです。
長〜い、濃い内容のため、1つの章ずつご紹介いたします。
##SQLインジェクションのチートシート:SQLインジェクション攻撃を防ぐための8つのベストプラクティス 序章
Brian Vermeer ブライアン フェルメール
2021年3月26日
SQLインジェクションは、オンラインアプリケーションにとって最も危険な脆弱性の1つです。これは、ユーザーが信頼できないデータをデータベースクエリに追加したときに発生します。たとえば、Webフォームに入力する場合です。SQLインジェクションが可能な場合、ずる賢い攻撃者は、ユーザー入力を作成して、貴重なデータを盗んだり、認証をバイパスしたり、データベース内のレコードを破壊することができます。
SQLインジェクション攻撃にはさまざまな種類がありますが、一般的にはどれも攻撃されやすい共通の原因があります。例えば、ユーザーが入力した信頼できないデータは、クエリ文字列と連結されます。そのため、ユーザーの入力によって、クエリの本来の意図が変わってしまうのです。
SQLインジェクションの例をいくつか挙げてみましょう。
-
OR 1=1
のように常に真であるブーリアンをWHERE句に追加する
行コメントを入力してクエリの一部をエスケープする--
- 最初のクエリを終了し、新しいクエリを開始する。
; DROP TABLE USERS;
-
UNION
を使って複数のテーブルからデータを接続する
このチェックリストでは、すべてのアプリケーションプログラマーがSQLインジェクション攻撃を防ぐために使用できる8つのベストプラクティスを取り上げます。それでは、アプリケーションのSQLi対策を行っていきましょう。
#####SQLコードインジェクション防止の8のベストプラクティス
- クライアントサイドの入力バリデーションに依存しない
- 制限された権限を持つデータベースユーザーを使用する
- プリペアドステートメントとクエリパラメータ化を使用する
- コードをスキャンしてSQLインジェクションの脆弱性を探す
- ORMレイヤーを使用する
- ブロックリストに依存しない
- 入力バリデーションを行う
- ストアドプロシージャに注意する
######SQLインジェクションを防ぐ 〜1 に続きます。
Contents provided by:
Jesse Casman, Fumiko Doi, Content Strategists for Snyk, Japan, and Randell Degges, Community Manager for Snyk Global