正しいSQLインジェクション対策には2種類の方法があります。すべての変数をエスケープする対策すべてのクエリをプリペアードクエリとして実行する対策すべての変数をエスケープする対策この方法はすべてのデータベースに利用できる対策です。文字列,整数などデータ型に関わらず変数すべてを文字列としてエスケープすることにより,SQLインジェクションを100%防ぐことが可能となります。PostgreSQLのSQL文を生成する場合,以下のようにすべてのパラメータを文字列して処理・生成します。'".pg_escape_string($_SESSION['USERID'])."';";一部のドキュメントなどでは,addslashes関数を利用するなど,間違ったエスケープ方法を推奨しているケースがあるので注意しなければなりません。preg_repalce等)を使用した方法ではSQLインジェクションが可能になる場合があります。データベースインタフェースが提供しているエスケープ関数を利用するようにします(日本語などマルチバイト文字のエンコーディングの仕様が原因で,機械的な置換を行うとSQLインジェクションが可能となります。SJISは明示的にエンコーディングを意識してエスケープしないと,データベースサーバ側では意図したSQL文か攻撃用の文字列であるのかまったく区別ができません⁠)⁠。テーブル名,フィールド名を動的に決定している場合,エスケープは役に立ちません。このようなクエリを生成することはあまりないと思いますが,もし動的にテーブル名,フィールド名などを決定している場合,あらかじめ定義している文字列と一致しているか確認します。ユーザ入力値のテーブル名やフィールド名をチェックなしに直接クエリに使用すると簡単に不正なSQL文を実行可能です。すべてのクエリをプリペアードクエリとして実行する対策プリペアードクエリとは,実行するクエリをあらかじめパースし,パラメータを渡すだけでクエリの実行を行えるようにするDBMSの機能です。すべてのDBMSがプリペアードクエリをサポートしていないので,プリペアードクエリをサポートしているDBMSを利用している場合にのみ使用できる対策です。プリペアードクエリに渡されるパラメータはすべて値として処理されます。このため,プリペアードクエリのみでクエリを実行するとSQLインジェクションは不可能になります。$_SESSION['USERID']));どちらかというとプリペアードクエリを利用したほうが安全性が高く(エスケープする方法ではエスケープ漏れのリスクが高い⁠)⁠,後でコード監査を行う場合も容易に監査できます。プリペアードクエリが利用可能な場合はプリペアードクエリを利用するほうがよいでしょう。プリペアードクエリだからといって安心できない場合もあります。Frameworkなど⁠)⁠。このようなライブラリを利用している場合,ライブラリの不備や利用方法に誤りがあるとSQLインジェクションに脆弱となる場合があるので注意が必要です。まとめSQLインジェクションはすべての変数をエスケープするか,すべてのクエリをプリペアードクエリとして実行すれば100%防げる脆弱性です。ソースコードからこの2種類の対策が完全に行われているかチェックするのは非常に容易です。XSS等のJavaScript関連の脆弱性に比べ,SQLインジェクション対策は単純かつ明快です。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。オープンソース製品は比較的古くから利用し,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.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。