左門至峰の株式会社エスエスコンサルティング)です。過去問を多数引用しながら、基礎知識をしっかり学んでもらうように作ってあります。(情報セキュリティスペシャリスト)を楽しく学べるように工夫したいと思います。1SQLインジェクションとは過去問では、SQLインジェクションに関して、以下のように述べられている。午前問43)よりSQLインジェクションは、SQL文を操作する文字列をWebフォームなどに注入(Injection)し、データベースに不正にアクセスする攻撃。以下のようなフォームがある。サーバの認証プログラムとして、以下のSQL文が入っているとします。'1'='1'となり、どんなユーザを入れても成立してしまう。コメントを意味する「--」を付ければ、それ以降が無視される。コマンドを成功させるだけでなく、SQLのUNION句を使って別のSQL文をくっつければ、DBの中身を表示することも可能だ。対策に関しては、IPAのサイトから以下が公開されています。2対策の全体像SQLインジェクションの対策は、IPAの以下の資料にまとめられています。http://www.ipa.go.jp/files/000024396.pdfその情報を参考にすると、主な対策は以下です。入力フォームによる入口でのチェックも有用2.保険的対策(1)エラーメッセージを非表示エラーメッセージは、攻撃者に情報を与えてしまう。injection)という手法があり、入力値と応答結果から、脆弱性を把握する。ID/Passを入力したときに、「IDが存在しません」「パスワードが間違っています」と丁寧にエラーを返せば、攻撃者にもIDが違うのかPassが違うのかの情報を与えてしまう。(2)データベースアカウント権限の見直し。必要最小限の権限しか与えておかなければ、被害も少なくなる。H21SC春午前II問14SQLインジェクション対策について、Webアプリケーションの実装における対策とWebアプリケーションの実装以外の対策の組合せとして、適切なものはどれか。Webアプリケーションの中でシェルを起動しない。chroot環境でWebサーバを実行する。セッションIDを複雑なものにする。SSLによって、通信内容を秘匿する。バインド機構を利用する。データベースのアカウントのもつデータベースアクセス権限を必要最小限にする。パス名やファイル名をパラメタとして受け取らないようにする。重要なファイルを公開領域に置かない。今回の内容はとても難しい内容ですが、SQLインジェクションというキーワードから、「データベース」に関する対策を選ぶと、ウのみになります。3対策:静的プレースホルダ(バインド機構)これを使えば、エスケープ処理は不要だ。問われるキーワードです。バインド機構や、プリペアドステートメントという言葉を使う場合もあります。Statementなので「用意された構文」です。用意された構文が変化することなく、入力された文字は文字列として理解されるので不正な文字を入れるという攻撃を防げます。過去問(H18秋SU午後II問1)では、「バインド機構を利用する」ことの解説として、「プレースホルダと呼ばれる一時的な特殊文字を使用してSQL文のひな形を用意しておき,後で実際の値(変数)を割り当ててSQL文を完成させる方法です。変数は自動的にエスケープ処理されるので,DBMSの種類によって異なるエスケープ処理を意識する必要がなくなります」とあります。以下は、上記サイトの引用であるが、入力されたデータは「?」で表わされます。入力されたデータが文字として直接実行されるのだ。$passwd);わかったような...これまでは、上記のuidのところに、以下のように入力されると、構文が変わってしまう。--」という文字列で処理される。インジェクション対策はサニタイジング(エスケープ)処理が一般的です。過去問では、SQLインジェクション攻撃を防ぐ方法として、「入力値から,データベースへの問合せや操作において特別な意味をもつ文字を解釈されないように保護する。問26より)」と述べられている。過去問(H18秋SU午後II問1)では、「SQLインジェクション対策のためのエスケープ処理とは,利用者から入力される値が、SQL文にとって特別な意味をもつ記号文字の場合に,例えば,"'"であれば"''"のように"'"を二つ続けた文字列に置換する処理のことです。ようなスクリプトが埋め込まれた場合、HTMLではスクリプトと判断してスクリプトが実行されます。以下の記載をしたとします。<script>alert("こんにちは");</script>すると、画面に以下のようなポップアップ画面(アラート)が表示されます。あなたが掲示板の管理者だとして、このような書き込みをされたとすると、その掲示板を開くたびにこのアラートが出てしまいます。掲示板でのポップアップレベルならいいですが、個人情報を抜かれたり、サーバを乗っ取るようなコマンドを仕掛けられることもあります。これは防がなければいけません。2.サニタイジング(エスケープ)処理の方法1対策(エスケープ処理)として、<script>などの文字を、Webサーバ上ではプログラム用の言葉ではなく、単なる文字として認識させます。具体的には「<」を「&lt;」としてエスケープ処理をします。なりますので、これはプログラム用の言葉ではないと判断されるのです。