WordPressプラグイン公開申請のレビュー結果その1

初申請の返事がきました。
レビューの指摘は3件。修正して6ケ月以内にメールを返信しないと、却下されるらしい。

  1. Forcing PHP Sessions on all pages
  2. Calling files remotely
  3. Please sanitize, escape, and validate your POST calls  

1.Forcing PHP Sessions on all pages

initで無条件にsession_startしてるのでサーバーキャッシュが効かない。
必要なページだけに絞れ。という指摘です。

データベースのインポートと全削除は時間がかかるので、ajaxで複数回に分けて実行しています。その際、進捗状況などをサーバー側にPHP セッションを使って保存しています。wordpressのコアはPHPセッションを使っていないので、initにフックしてsession_start関数をコールしています。これだと、普通のページにアクセスするときもセッションが有効になってしまいます。 これだと、nginxなどのサーバーが行っているキャッシュ機能が使えないので、アクセスが遅くなるなどの弊害があります。

今からPHPセッションを使わないようにするのは骨が折れるので、最低限に絞る方法として、ajax処理だけに絞ることにしました。具体的には下記のようにwp_doing_ajax()を使います。

function dbm_init_sessions() {
if ( wp_doing_ajax() && !session_id() ) {
session_start();
}
}

あ、テストしてみたら、heartbeat でも有効になっちゃうか。うーん、どうするかな。

2. Calling files remotely

javascriptのライブラリをCDN使って読み込んでいましたが、外部サーバーに依存するなと怒られました。プラグインのローカルディレクトリに入れることにします。

3.Please sanitize, escape, and validate your POST calls  

formで受け取った値は絶対に信用するな、必ず値のチェックとフィルター通して余計なものは削除しなさいという指摘です。sanitize関数はかなり用意されているので、数が多くて面倒だけど、全てフィルターを通すしかないですね。

foreach ( $csv_post_field as $field ) {
if( !empty( $_POST[$field] ) ) {
update_post_meta($post_id, $field, sanitize_text_field( $_POST[$field] ) );
} else { //未入力の場合
delete_post_meta( $post_id, $field );
}
}

修正は3が一番大変ですが、動作チェックなどを考えると本質的に厳しい指摘は1ですね。とりあえず、修正してもう一度レビューしてもらおう。

修正して再申請

修正しました。差分はこちら(githubのリンクです)

Leave a comment

Your email address will not be published. Required fields are marked *

The maximum upload file size: 8 MB. You can upload: image, audio, video, document, spreadsheet, interactive, archive, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here

Translate »