SQLインジェクション

SQLインジェクションとは、データベースに接続されたWebサイトWebアプリケーションを標的とするサイバー攻撃の一種です。この攻撃では、適切に設定されていないWebサイトやデータベースのサーバーソフトウェアを悪用し、本来なら実行しないSQL文をサーバーに解析させます。この攻撃によって、個人情報や金融情報などの機密情報が明らかになったり、攻撃者がデータベースに保存された情報を変更または削除できたり、その他の不正なアクセスが可能になったりする場合があります。

Webサイトがテキストフォームからユーザー入力を受け取り、それをSQLのクエリの一部として含める場合、そのWebサイトはSQLインジェクションに対して脆弱です。攻撃者は、期待される情報(ユーザー名など)をフォームのフィールドに入力する代わりに、SQLクエリを変更するテキスト文字列を入力します。たとえば、仮想的なクエリはSELECT UserID, Name, Password FROM Users WHERE UserID = で始まり、その後にユーザーIDフォームのフィールドから入力された値が続くものとします。ユーザーが自分のユーザーIDを入力すると、クエリは想定どおりに動作し、そのユーザーの情報を取得します。

攻撃者が予期しないテキストをクエリ文に挿入して変更する様子
攻撃者が予期しないテキストをクエリ文に挿入して変更する様子

しかし、サーバーが入力されたテキストを制限なくクエリに挿入する場合、攻撃者はそのテキストを使ってSQLクエリ文自体を変更できます。誰かがユーザーIDの代わりに317 OR 1=1というテキストを入力すると、クエリはSELECT UserID, Name, Password FROM Users WHERE UserID = 317 OR 1=1;になります。OR 1=1は常にtrueと評価されるため、ユーザーIDの条件が無効になり、代わりにUsersテーブルのすべての項目について、ユーザーID、名前、パスワードが返されます。その他のコードインジェクションによって、攻撃者がサイト管理者としてログインしたり、データベースからレコードテーブルを削除したり、(極端な場合には)シェルスクリプトやその他のコードを挿入して実行したりできる場合があります。

Webサイトの管理者は、サーバーソフトウェアを最新の状態に保つことでSQLインジェクション攻撃を防止できます。また、入力テキストを制限したり、特定の文字を除外したりして、データベースへの入力を「サニタイズ」することも重要です。Webサイトの管理者は、SQLクエリをパラメーター化することもできます。これは、ユーザー入力をクエリに直接挿入するのではなく、ユーザー入力を参照するプレースホルダーをクエリ内で使用する方法です。

更新日 March 20, 2023 著者: Brian P.

quiz知識をテストする

An abstract data type that can be assigned properties and methods is called what?

A
Block
0%
B
Object
0%
C
Stack
0%
D
Blob
0%
Correct! Incorrect!     View the Object definition.
More Quizzes →

Tech Terms コンピューター辞書

このページのSQLインジェクションの定義は、TechTerms.comの著者が執筆したオリジナルの定義です。このページを参照または引用する場合は、定義の直下にある緑色の引用バーをご利用ください。

私たちの目標は、コンピューター用語をわかりやすく説明することです。すべての定義において正確さとわかりやすさを追求しています。フィードバックや新しい技術用語の提案がある場合は、お問い合わせください

Tech Terms ニュースレター

毎日または毎週のニュースレターで技術知識を高めましょう!今すぐ購読して、新しい用語やクイズをメールでお受け取りください。

無料のTechTermsニュースレターに登録する

メールの受信頻度を選択してください

各メールのリンクから、いつでも登録解除または頻度変更ができます。 ご質問はこちらからお問い合わせください。

注意:ニュースレターは英語で配信されます。