プラグイン開発で最も犯しやすい10のミス

[dot_recommends]
知らず知らずにやっている間違い。

以前はほとんどWordPressのプラグイン開発はしていなかったのですが、ここ1ヶ月ほどプラグイン開発していて、調べ物をしていてこちらのページを拝見しました。

そして、その先にリンクされているこちら(英語)。

いくつか思い当たることがあり、あわてて修正しました。

その中で特にこれはと思うものを2点の詳細を確認してみます。

1.(1.6.)カスタムな JavaScript や CSS をすべての管理者用ページに追加すること

さっくりと全ての管理画面にロードされるように作ってしまっていました。
大反省です。
不要な管理画面にまで、スクリプトやCSSがロードされるようにしてしまっていました。

具体的には
admin_enqueue_scriptsを使わずにadmin_print_scripts-(page_hook)を使いましょう、ということです。
しかしこのアクションフック、実行タイミングによってうまくフックできません。
まだ(page_hook)が追加されていない状態で実行しようとすると、失敗します。

フック名をアクションフックに渡すために、グローバル変数にしています。
しかし、これはうまく動作しません。
なぜなら、’admin_menu’のアクションフックより先にadd_action( “admin_print_scripts-$hook”, ‘my_admin_print_script_hook’ );が実行されて$hookには何も入っていないため、アクションフックの追加に失敗するのです。

これをちゃんと動作するようにするには、

という風に、メニュー追加時にadmin_print_scripts-(page_hook)アクションフックを追加する必要があります。

2.(1.7.)セキュリティに配慮のないプラグインのフォーム、あるいは nonce の誤用

参考にさせていただいたサイトには、
「管理者ページからのリクエストかどうかは、wp_verify_nonce() ではなく、check_admin_referer() を用いるべし」とあります。
ちょっとあんまり深く考えずにwp_verify_nonce()を使っていました。
どうしてダメなんでしょうか。

codexにはwp_verify_nonce()について、他のコンテキストから渡されたnonceを確認となっており、特に管理画面から渡されたnonceかどうかはチェックしていません。
中途半端なCSRF(クロスサイトリクエストフォージェリ)脆弱性対策になってしまいます。
check_admin_referer()については管理画面から渡されたnonceを確認となっており、管理画面から送信されたデータかどうかを確認するためには、こちらを使う必要があるでしょう。

すでに経験豊富な方には当たり前のことかもしれませんが、他にも様々な気づきがありました。

楽天市場

Amazon.co.jpアソシエイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)