SQLインジェクションとは
えすきゅーえるいんじぇくしょん
Webアプリケーションが利用者の入力をそのままつなげてSQL文を組み立てていることを悪用し、入力によって命令の意味を変えて、データベースを不正に操作する攻撃。プレースホルダを使うプリペアドステートメントが根本的な対策。
「SQLインジェクション」は、1分野の3問の練習問題に出てきます(情報セキュリティの基礎など)。
この用語の分野: 情報セキュリティの基礎
えすきゅーえるいんじぇくしょん
Webアプリケーションが利用者の入力をそのままつなげてSQL文を組み立てていることを悪用し、入力によって命令の意味を変えて、データベースを不正に操作する攻撃。プレースホルダを使うプリペアドステートメントが根本的な対策。
「SQLインジェクション」は、1分野の3問の練習問題に出てきます(情報セキュリティの基礎など)。
この用語の分野: 情報セキュリティの基礎
アプリケーションが「… WHERE name = '」と入力値と「'」を文字列としてつなげてSQL文を作っていると、入力に含まれた引用符で文字列が閉じられ、その後ろの部分がSQLの命令として解釈されてしまいます。教科書でよく使われる ' OR '1'='1 という入力では、「または '1' と '1' が等しい」という常に成り立つ条件が付け加わり、認証を素通りできてしまいます。データの読み出し、書き換え、削除にもつながるおそれがあります。
根本的な対策は、プレースホルダを使うプリペアドステートメント(パラメータ化クエリ)です。SQL文の構造を先に確定させ、入力はあとから値としてだけ結び付けるので、どんな文字が含まれていても命令の一部になりません。多くのプログラミング言語のデータベース用のライブラリやフレームワークがこの機能を持っています。入力から特殊な文字を取り除く方法は漏れが起きやすく、ブラウザの側での入力のチェックは攻撃者に回避されるため、それだけでは対策になりません。
根本的な対策に加えて、アプリケーションがデータベースに接続するアカウントの権限を必要最小限にする(最小権限の原則)、詳しいエラーメッセージを利用者に表示しない、WAF(Webアプリケーションファイアウォール)で典型的な攻撃の文字列を検知する、といった対策を重ねます。WAFはあくまで補助で、アプリケーションの修正の代わりにはなりません。
正解:C. SQL文の構造を先に確定させ、入力はあとから値としてだけ渡すので、入力にどんな文字が含まれていても命令の一部として解釈されないから
プリペアドステートメントでは、まず「SELECT … WHERE id = ? AND password = ?」のように、値の部分を記号(プレースホルダ)にしたSQL文をデータベースに渡して構造を確定させ、そのあとで入力を値としてだけ結び付けます(バインド)。入力は最初から最後までデータとして扱われるので、引用符などが含まれていても、条件を付け加えるような命令の一部にはなりません。入力から危険な文字を取り除いたりエスケープしたりする方法は、データベースの種類や文字コードごとの細かい規則を漏れなく扱う必要があり、1か所でも漏れると攻撃が成り立ちます。また、ブラウザ側での入力のチェックは、攻撃者がブラウザを通さずに直接リクエストを送れば回避されるので、利便性のためのものであり、セキュリティの対策にはなりません。これに加えて、データベースに接続するアカウントの権限を最小にしておくと、被害を小さくできます。
エスケープ処理でも防げる場合はありますが、データベースの種類や文字コードごとの規則を漏れなく扱う必要があり、1か所でも漏れると攻撃が成り立ちます。そのため、プレースホルダを使うプリペアドステートメントを基本の対策にします。
防げません。短い文字列でも命令の意味を変えられることがあります。文字数や文字の種類の制限は補助的な対策で、根本的な対策はプリペアドステートメントです。
入力欄に特殊な文字列を入れるのはSQLインジェクションのような技術的な攻撃、候補を次々に試すのは総当たり攻撃です。
ソーシャルエンジニアリングの例として当てはまるものはどれか。SQLインジェクションは、Webアプリケーションが、利用者の入力をそのまま文字列としてつなげてデータベースへの命令(SQL文)を組み立てていることを悪用する攻撃です。
ログインの画面で、パスワードの欄に ' OR '1'='1 のような文字列を入力されると、パスワードを知らなくてもログ…Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。
SQL ソーシャルエンジニアリング フィッシング 共通鍵暗号 クロスサイトスクリプティング(XSS) 公開鍵暗号 最小権限の原則 ゼロデイ攻撃 ソルト 多要素認証