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クエリをパラメーター化することもできます。これは、ユーザー入力をクエリに直接挿入するのではなく、ユーザー入力を参照するプレースホルダーをクエリ内で使用する方法です。
知識をテストする