WordPressセキュリティを考える会第5回を開催しました。今回は、「wpdb::prepare とSQLインジェクションについてのおさらい」「WordPressのオプションテーブルとそのデータの更新」について取り上げました。
WordPressでは、プリペアドステートメント(動的プレースホルダ)が用意されています。SQLを書く場合、基本的にはプレースホルダを使います。しかしながら、テーマ/プラグイン開発者が適切に使っていない場合もあり、その場合はSQLインジェクションの危険性が高くなります。WordPress3.9からは適切に使われているかをより精密にチェックするようになります。
オプションテーブルについては、WordPressでは管理画面から設定できるようになっていて便利な側面もあります。たとえば1ページの投稿記事数等。(1ページの投稿記事数を変更するのに、いちいちコードを書くとしたら大変ですね。)
一方で、オプションテーブルの制御を適切に行わないと、管理者以外の人が変えてしまう、ということができてしまいます。
WordPressでは、オプションテーブルを更新するAPIとしてupdate_option関数があります。この関数は権限チェックをしないため、テーマ/プラグイン開発者の責任で権限チェックする必要があります。このため、テーマ/プラグインに問題があると、管理者でないのに設定変更できる、という可能性があります。
後半は参加者とのディスカッションでした。SSL等について議論しました。メルマガ等でも紹介しましたが、SSLは値段に大きな差があります。認証の度合いが異なるためです。SSLは、暗号化という側面もありますが、それ以上に、「所有者のサイト」であることを証明する、という側面もあります。SSLの料金が安い順に、
- ドメインの実在
- 企業の実在
- EV(extended validation)
となります。EVは、ブラウザのアドレスバー等に企業名が表示されます。なので、金融機関等ではたいていこのSSLが使用されています。
もちろん、問い合わせフォームの暗号化、というレベルであれば、ドメインの実在や企業の実在でも良いでしょう。