分1234SQLインジェクション対策については既に解説済みですが,あまりに多くのSQLインジェクション脆弱性が放置されているので,もう一度SQLインジェクションについて解説します。SQLインジェクション脆弱性が放置されている背景には,危険性や対策があまりよく理解されていないことがあるのではないかと考えられます。SQLインジェクション攻撃はかなり自動化しやすく,データベースの構造をまったく知らずに攻撃するブラインドSQLインジェクションを自動化するツールも簡単に作れます。本連載中では既に解説済み(第5回~6回,第14回~15回)ですが,もう一度おさらいです。SQLインジェクション対策には次のような注意事項があります。文字エンコーディングの取り扱いを厳格に行う(第19回~22回を参照)クエリを生成する場合,パラメータはすべて文字列として扱いエスケープするプリペアードクエリを利用し,変数はすべてパラメータとして渡すテーブル,フィールド,SQLの語句等をクエリ作成に利用する場合,安全であることを確認するSQLクエリのパラメータは,数値型であっても文字列と渡しても正しく処理するデータベースシステムがほとんどです。SQLインジェクション脆弱性は文字列型のフィールドではなく,数値型のフィールドに対する処理の脆弱性のほうが頻繁に発見されています。整数型へキャストするなどの方法もありますが,機械的にすべて文字列としてエスケープしてしまったほうが確実です。プリペアードクエリもSQLインジェクション対策に利用できますが,万能ではありません。すべてのパラメータを文字列としてエスケープまたはプリペアードクエリのパラメータとしてデータベースサーバに渡しても,テーブル名やフィールド名,SQLの予約語などをチェックなしで渡してしまうとSQLインジェクションが可能になります。array($_GET['q']));としてしまうとSQLインジェクションが可能になります。テーブル名やフィールド名,SQL文の条件となる句を渡す場合,ホワイトリストで確認してからユーザ入力を利用しなければなりません。確実にスクリプトの実行を停止}普通このようなバリデーション処理は,リクエストを受け付けた直後の入力バリデーション処理で,ほかの入力パラメータのバリデーションと同時に行います。バリデーション処理では,すべてのパラーメータの文字エンコーディング,利用されている文字,形式,範囲がアプリケーションが受け入れ可能な値であるかチェックします。SQLインジェクション対策はこれだけです。入力バリデーションを確実に行い,パラメータをすべて文字列としてエスケープするかプリペアードクエリのパラメータにすればSQLインジェクションは行えなくなります。XPathインジェクションデータベースシステムがXMLサポートを追加したことにより,XPATHインジェクションのリスクも増加しています。基本的にはSQLと同じで,ユーザ入力を検証し正しくエスケープ処理を行えば問題は発生しません。XPathインジェクションについても既に解説済み(第16回~18回)です。XPathインジェクションもブラインドSQLインジェクションと同様に自動化できます。XPathを利用したクエリはプリペアードクエリをサポートするデータベースシステムであっても,アドホックなクエリを書く場合がほとんどです。注意しないとXPathインジェクションが可能になります。2005/2008等)ではSQLインジェクションにより多くのデータを一度に取得できることがありあす。ブラインドSQLインジェクションと同類の手法を利用してデータを取得するツールも存在します。実際のSQLインジェクション脆弱性2009年1月にどれくらいのSQLインジェクション脆弱性がmilw0rm.comで公開されたか数えてみました。82のSQLインジェクション脆弱性が報告されています。ほとんどばオープンソース製品の脆弱性ですが,商用製品の脆弱性も報告されています。その2つの典型的なPHPアプリケーションのSQLインジェクション脆弱性報告を紹介します。ブラインドSQLインジェクションmilw0rm.comでは脆弱性を攻撃する方法が多数公開されています。攻撃にはSQLの知識さえ必要ありません。Max.BlogのSQLインジェクション脆弱性の攻撃方法を紹介したページです。このページには解説と共に一つのURLが貼り付けてあります。password),4,5,6,7+FROM+users+WHERE+id=1%23攻撃用のURLを見ると,show_post.phpのidパラメータに整数が入っていると仮定しており,SQLインジェクションが可能であることが分かります。password),4,5,6,7+FROM+users+WHERE+id=1%23投稿したアーティクルIDの後に,UNIONクエリでuserテーブルからid=1のユーザ名とMD5でハッシュ化されたパスワードが盗み出せることが分かります。攻撃者はURLのサイト名とMax.Blogがインストールされたパス名を変更するだけで管理者のユーザ名とパスワードハッシュを盗めます。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。オープンソース製品は比較的古くから利用し,Linuxは0.9xのころから利用している。オープンソースシステム開発への参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトでは,PostgreSQLモジュールのメンテナンスを担当している。URL:http://blog.ohgaki.net/著書Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?Amazon楽天ブックスhontoヨドバシ.com[改訂版]PHPポケットリファレンスAmazon楽天ブックスhontoヨドバシ.comこの記事に関連する書籍Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?本書は,Webサイトのセキュリティ確保のために必要な基礎知識と,安全なコードを書くために必要な基礎知識を解説しています。Webアプリケーションは比較的簡単に作成で...はじめてのPHP言語プログラミング入門Webアプリケーション構築ツールとしてPHPを取り上げた書籍は数多くありますが,言語の解説・入門書としての書籍はあまりありません。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。