WordPress セキュリティを考
える会 第四回
水野史土
レスキューワーク株式会社
http://www.rescuework.jp/
自己紹介
WordPress 日本語化チーム
フォーラムの常連回答者
Novius OS のコントリビュータ
前回のおさらいと報告
おさらい
● SQL インジェクションについて
● wpdb::prepareの使い方と間違い例
報告
● 「間違った使用に警告」を提案->受理
● WordPress3.9でついに終止符?
SQL インジェクション
データベースへの操作を行うとき、
入力データ等を適切に処理しないと、
意図しない動作になってしまう
被害
不正なデータ読み出し/書き込み
wpdb::prepare
$wpdb->prepare(
"
SELECT sum(meta_value)
FROM $wpdb->postmeta
WHERE meta_key = %s
",
$meta_key
)
wpdb::prepare
$wpdb->prepare(
"
SELECT sum(meta_value)
FROM $wpdb->postmeta
WHERE meta_key = %s
",
$meta_key
プレースホルダ
)
エスケープする値
標準の作法に従っていないプラグイン
WordPress HTTPS 3.3.6
https://plugins.trac.wordpress.org/browser/wordpresshttps/trunk/lib/WordPressHTTPS.php#L234
$wpdb->get_col($wpdb->prepare("SELECT blog_id
FROM " . $wpdb->blogs, NULL))

従っていなくても、
公式ディレクトリに登録できる
間違った使用を防ぐために
プレースホルダが無い場合に警告を出す
WP3.5では「引数不足に警告を出す」
=> 解決すると思われたが ...
「ダミー引数(NULL, 0, ‘’)を入れる」
新しい提案
「『%』が無ければ警告を出す」
WP3.9 でパッチが取り込まれる
core.trac.wordpress.org/ticket/25604
core.trac.wordpress.org/changeset/27073
これで解決?するといいけど
では今回のネタ
WordPressのオプション
WPでは、管理画面で様々な設定が可能
●
●
●
●
●
●

サイトURL
管理用のメールアドレス
新規ユーザー登録の可否
テーマ
プラグイン
...
便利な側面もある
● ウェブに詳しくなくても設定できる
○ FTP
○ ファイルパーミッション
● 途中での設定変更
○ テーマの切り替え
○ 1ページの表示数
オプションの設定項目の更新
update_option関数がある
この関数自体は権限をチェックしない
update_optionを呼び出す時に、管理者権限を持
つかどうかを確認する必要がある
WP本体のオプションページはOK
テーマ/プラグインのオプション
テーマ/プラグインが、独自のオプションページを
持っている場合
権限を適切にチェックしているか、確認する

WordPressセキュリティを考える会第4回 資料ベータ版