SQL構文を含む記事が保存できない場合の対策
現象
下のようなSQL構文が存在する記事はサーバーにより「403 Forbidden」扱いとなり保存ができませんでした。
(本サイトはXserverに収容されております)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// 検索 function custom_search($search, $wp_query) { global $wpdb; if (!$wp_query->is_search) return $search; if (!isset($wp_query->query_vars)) return $search; $search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : ''); if (count($search_words) > 0) { $search = ''; foreach ($search_words as $word) { if (!empty($word)) { $search_word = '%' . esc_sql($word) . '%'; $search .= " AND ( {$wpdb->posts}.post_title LIKE '{$search_word}' OR {$wpdb->posts}.post_content LIKE '{$search_word}' OR {$wpdb->posts}.ID IN ( SELECT distinct post_id FROM {$wpdb->postmeta} WHERE {$wpdb->postmeta}.meta_key IN ('custom1','custom2') AND meta_value LIKE '{$search_word}' ) )"; } } } return $search; } |
対策
サーバー管理の「セキュリティ」→「WAF設定」→「SQL対策」をOFFにしたら保存できました。
まとめ
保存した後にONにすればそのまま保存しておいてくれます。閲覧には問題ありません。
厳密には「WHERE」構文が存在すると保存できないようです。この構文を除去すると「SQL対策」がONでも保存できるようです。
(※ 当ページは社内技術資料としての位置付けですので読みにくいこともあるかもしれませんが、一般の方の課題解決に役立てれば幸いです。)