WordPressサイトの管理者は多くの場合、WordPressでのサイト管理も、普段の一般業務も同じマシンを使っていると思います。しかし、悪意のあるWebサイトへのリンククリックやリダイレクトなどで、ログイン中のWordPressサイトに意図しない操作が発生してしまう可能性があることを知っておいてください。「クロスサイトリクエストフォージェリー」と呼ばれる脆弱性によるリスクです。
管理画面内に、管理者のみが操作できる「特定の投稿を削除するリンク」があるとします。正しい権限を持つWordPressにログイン中の管理者が、然るべきルールに沿ってこのリンクを操作するのは正常な行為です。しかし「脆弱性を悪用した、悪意あるWebサイトに訪れてしまった」管理者が、その悪意ある(しかも、よく似た)Webサイト内の同じリンクを、正常なリンクと勘違いして操作してしまう……。すると本来は拒否されるべき他サイトからのリクエストが通り、実行されるべきではない処理が行われてしまう可能性があります。
このリスクは「WordPress Nonce」で防ぐことができます。
WordPress Nonceは特定の処理を正しく実行するために、「正当なページからの遷移であることを証明する」ためのワンタイムパスワードです。正しいNonce値を持たないページからは処理しないように保護できます。
WordPressでのデータベース処理は、専用として用意されたWordPressの関数を用いるのが一般的です。
例えばデータベースから投稿された情報を取得するには「get_post()」を、投稿を追加するには「wp_insert_post()」を用います。これらのWordPress関数は内部で適切なエスケープ処理がなされているため、安全といえます。
しかし「$wpdbオブジェクト」を使って直接データベースを操作する場合には注意が必要です。自動ではエスケープ処理がなされないからです。
そこで、$wpdbオブジェクトを使う場合には、必ず「プレースホルダ($wpdb->prepare)」を利用してエスケープするようにします。プレースホルダの利用は、特にSQLインジェクション対策として有効です。
今回は、「WordPress実行環境としてのサーバのセキュリティ対策」と「開発者がWordPressアプリケーションを開発する際に留意すべきポイント」を解説しました。次回は、ログの活用方法、WordPressアプリケーションレベルでの「さらなる高速化チューニング」など、運用時に役立つテクニックを解説する予定です。お楽しみに。
1971年栃木県生まれ。中学1年生で電波新聞社の『マイコンBASICマガジン』にプログラムを寄稿して以来、プログラミング歴30年。早稲田大学法学部を卒業後、野村證券に入社。公認会計士第二次試験合格。2002年にプライム・ストラテジー株式会社を設立、代表取締役に就任する。2005年にPT. Prime Strategy Indonesiaを設立して以来、アジアでのITビジネスに携わる。執筆監訳書籍に『WordPressの教科書』シリーズ(SBクリエイティブ)、『詳解 WordPress』『WordPressによるWebアプリケーション開発』(ともにオライリー・ジャパン)などがある。
Copyright © ITmedia, Inc. All Rights Reserved.