連載
» 2017年08月15日 05時00分 公開

とにかく速いWordPress(19):「これだけ」はやっておこう──「WordPress実行環境とアプリ開発環境」のセキュリティ対策マニュアル (2/3)

[中村けん牛,プライム・ストラテジー]

「WordPressアプリケーションを開発する」場合に開発者が最低限留意するべきこと

 続いて、WordPressアプリケーションの開発担当者が実施すべき基礎項目を解説します。

 実施すべきことは以下の5つです。

  1. IPA「CMSを用いたウェブサイトにおける情報セキュリティ対策のポイント」を確認する
  2. WordPressアプリケーションから値を出力する場合には、「出力用に用意されたWordPressの関数(WordPressタグ)を使う」か「エスケープ処理」のどちらかで行う
  3. 入力値を基にしたファイル操作を行う場合は、「入力値を信用しない」
  4. 管理画面やフォーム機能を実装する際には「セキュリティトークン(nonce)」を利用する
  5. SQLの実行は「データ処理用に用意されたWordPressの関数を用いる」か、「プレースホルダ」を使う

1:IPA「CMSを用いたウェブサイトにおける情報セキュリティ対策のポイント」を確認する

 まず、IPA(情報処理推進機構)が公開した「CMSを用いたウェブサイトにおける情報セキュリティ対策のポイント」をよく読んで、理解するようにしてください。

 レポートでは、WordPressを中心とするCMS(Contents Management System)における深刻度の高い脆弱(ぜいじゃく)性として、「SQLインジェクション」と「クロスサイトリクエストフォージェリ」が挙げられています。

 またWebシステムのセキュリティ対策には、「値の出力に対するエスケープ」「ファイル操作」「データベース操作」の3つが特に重要と説明されています。

 これらを踏まえて、具体的に実践すべき「4つ」の項目を以下から解説します。

2:WordPressアプリケーションから値を出力する場合には、「出力用に用意されたWordPressの関数(WordPressタグ)を使う」か「エスケープ処理」のどちらかで行う

 WordPressアプリケーションからの値の出力は、「出力用に用意されたWordPressの関数(WordPressタグ)を使う」か「エスケープ処理」のどちらかで行います。

 例えば、サイト情報を表示させる「bloginfo()」などのWordPressが用意している表示出力用関数以外で、変数や関数の戻り値などの値を基にしてhtmlコードなどの出力を行う場合には、「エスケープ処理」を行うようにします。

 具体的には、WordPressが用意している「esc_html()」「esc_attr()」「esc_js()」などのエスケープ処理用関数を適用するようにします。

3:入力値を基にしたファイル操作を行う場合は、「入力値を信用しない」

 「入力値を信用しない」とはどういうことでしょう。入力値をファイル名として、そのファイルの中身を表示させる処理があるとします。このときに「../../wp-config.php」(データベースへの接続情報などが含まれる、WordPressの特に重要な構成情報ファイル)が指定されたらどうなるか。意図しない重要情報が表示されてしまうことになります。これでは危険です。

 そこでこういった場合には、「想定されているファイル名のルールに合致するかどうかをチェックする」処理をきちんと挟んでおかなければなりません。

 例えば、ファイル名が英数字であることを条件に、「wp-content」のテキストファイル(*.txt)の内容を読み込んで表示するならば、以下のようなチェック処理を含めておきます。

if ( ! preg_match( '/^[A-Za-z0-9]+\.txt$/', $file ) ) {
	eixt;
}
ファイル名チェック処理のサンプル

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。