セキュリティ対策
プラグイン開発では、SQLインジェクション・XSS・CSRFといった代表的な脆弱性を作り込まないための実装が不可欠です。基本パターンを解説します。
SQLインジェクション対策
データベースへの問い合わせは、必ず$wpdb->prepare()でプレースホルダーを使用してください。
<?php
global $wpdb;
$results = $wpdb->get_results(
$wpdb->prepare("SELECT * FROM {$wpdb->prefix}my_table WHERE user_id = %d", $user_id)
);
変数を直接クエリに埋め込まないユーザー入力を文字列連結でSQLに埋め込むことは絶対に避けてください。
XSS対策:出力のエスケープ
<?php echo esc_html($user_input); // テキスト出力 echo esc_url($url); // URL出力 echo esc_attr($attribute_value); // HTML属性値 echo wp_kses_post($html_content); // 限定的なHTMLタグを許可する場合
CSRF対策:Nonceの実装
<?php
// フォーム出力時
wp_nonce_field('my_plugin_action', 'my_plugin_nonce');
// 処理受付時
if (!isset($_POST['my_plugin_nonce']) || !wp_verify_nonce($_POST['my_plugin_nonce'], 'my_plugin_action')) {
wp_die('不正なリクエストです');
}
権限チェック
<?php
if (!current_user_can('manage_options')) {
wp_die('権限がありません');
}
テーマ開発でも共通これらの対策はテーマ開発でも同様に重要です。詳しくはテーマのセキュリティ対策も参照してください。