WordBench 川崎の勉強会、後編です。WordPress プラグインの作り方と、プラグインでセキュリティを確保するための関数とその違いについて。(長くなったので 2つに分けました)

川崎市高津市民館 12F から見た景色: EOS Kiss X3: プログラムAE 1/125sec F8.0 ISO100 27mm EF-S18-55mm

WordPress プラグインの作り方

内容は

  • フィルターとプラグイン
  • フックの探し方
  • WordPress 起動順序
  • 名前の命名方法
  • プラグインの例
  • セキュリティの確保
  • ショートコードの登録例
  • 多言語化

興味のあるところメモ。

  • Ktai Style の場合、アクションにフックを引っかけたまま帰ってこないタイプ
  • pluggable.php の上書きは WP 本体で下記のように書いて実現している
    [code language=”php”]
    if ( !function_exists(‘function_name’) ) :
    [/code]
  • プラグイン名のドメイン名も取得できるか確認したほうがよい
  • Ktai Style という名前も unique になるようにつけた (mobile… だとありふれている)
  • 名前を決めないとプラグインが書けない
  • コメントはショートコードを解釈しない
  • 設定値を DB に格納するメリットは、プラグインのアップデート対策と、排他制御
  • serialize() and unserialize() による配列とオブジェクトのシリアライズ
  • 2.6 以降は別の場所にプラグインディレクトリを移動できるようになったので、load_plugin_textdomain() でリソースファイルの場所が相対ディレクトリ指定になっている
  • GPL のバージョンの違い

セキュリティを確保するための WordPress / PHP 用関数

  • データの検証 http://wpdocs.sourceforge.jp/Data_Validation
  • keses.php で HTML サニタイズ
  • テキスト … wp_specialchars() だったが 2.8 から obsolete.
    attribute_escape() に統合
  • 属性値 … attribute_escape() 推奨。二重にエンコードしない
    htmlspecialchars() は二重にエンコードしてしまう
  • attribute_escape は、前は htmlspecialchars() を呼んでいたが、今は二重エンコードしないために独自コードに変わったぽい
  • clean_url() … javascript: をつぶしてくれる

感想: attribute_escape() と htmlspecialchars() の違いが分かったのが収穫

全体的には、初心者向け携帯テーマの作り方から、比較的レベル高めだが重要なセキュリティの話、ショートコードの作り方まで、幅広く押さえていたと思います。

実は Nire.Com でも自作のプラグインを書いて使っています。

一番今回の WordBench 川崎勉強会で聞きたかったのは、普段使っている attribute_escape() だの htmlspecialchars() だのといった、値をサニタイズ (きれい) にしてセキュリティ上の脆弱性をなくすための関数の微妙な違いでした。

古い attribute_escape() のコードでは htmlspecialchars() を呼びに行っているだけだったので、attribute_escape() を呼びにいくメリットが今ひとつよく分からなかったのですが、最近の attribute_escape は二重エスケープを防ぐため独自コードになっているらしく。その辺のアップデートも興味深かったです。

勉強会のメインはあくまで、Ktai Style 用テーマファイルや初めてのプラグイン作成ですが、個人的にはセキュリティ関連の話目当てで来たので、聞けて良かったです。