WordPressで特定キーワードを含む検索クエリは即中止

カテゴリー: スニペット,

ボットが検索クエリを投げてくるんですよね、「eval」含んでるアレ。
検索はただでさえ重たい動作だというのに、毎度ボットに DB select させる理由もなく。

functons.php などに記載。

/*
 * 特定キーワードを含む検索クエリは即中止
 * https://saboten24.net/2018/12/21/post622/
 */
function my_search_filter( $query ) {
    if( strpos($query->query_vars['s'],'eval') !== false ){
        wp_die('Hello robots.');
    }
}

add_action( 'pre_get_posts','my_search_filter', 1 );

当サイトにも入れてみました
動作デモはこんな感じ

https://saboten24.net/?s=/module/action/param1/${@print(eval($_POST[c]))}

「eval」以外には使えなさそうでもありますが、長いNGキーワードとかのその他用途でも使えそうではあります。

追記 2019, 2/15

%2F%2F%5Cthink%5Capp%2Finvokefunction」なんてのも出てきたので。
複数キーワードのと、大文字小文字に関係なく判定すべきなので strpos から stripos に変更。

/*
 * 特定キーワードを含む検索クエリは即終了
 * https://saboten24.net/2018/12/21/post622/
 */
function my_search_filter( $query ) {

    $word = '';
    if( stripos($query->query_vars['s'],'eval') !== false ){
        $word = 'eval';
    } else if( stripos($query->query_vars['s'],'invokefunction') !== false ){
        $word = 'invokefunction';
    } else if( stripos($query->query_vars['s'],'admin') !== false ){
        $word = 'admin';
    } else if( stripos($query->query_vars['s'],'think') !== false ){
        $word = 'think';
    }

    if( $word !== '' ){
        wp_die('Error: 禁止キーワードを含んでいるため検索できませんでした');
    }

}

add_action( 'pre_get_posts','my_search_filter', 1 );

関連記事

関連記事はまだありません

スニペット」のBookmark
「スニペット」記事一覧