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('権限がありません');
}
テーマ開発でも共通これらの対策はテーマ開発でも同様に重要です。詳しくはテーマのセキュリティ対策も参照してください。

関連コンテンツ

↑