🐶

【WordPress】プラグインなしで簡単にできるセキュリティ対策

2023/08/15に公開

導入前にやっておきたい最低限のセキュリティ対策です。
固定IPなどを契約してる場合は、htaccessにてログイン画面へのアクセス制限をしてしまうのが一番ですね。。

author情報からのユーザー名露呈防止

WPでは投稿者アーカイブが作成されるため下記URLでアクセスすると、「ドメイン/author/ログインID/」にリダイレクトされ、ユーザー名(ログインID)が露呈します。

下記はその対策として、トップページにリダイレクトさせるというもの

functions.php
function disableAuthorArchiveQuery() {
    if( preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING'])){
        wp_redirect(home_url());
        exit;
    }
}
add_action('init', 'disableAuthorArchiveQuery');

WP REST APIからのユーザー名露呈防止

WPには外部からhttp通信でデータを取得・送信できる仕組みが実装されてるようです。
下記URLで閲覧されてしまいます。

対策としてユーザー名を非表示にします。

functions.php
function filterRestEndpoints($endpoints) {
    if (isset($endpoints['/wp/v2/users'])) {
        unset($endpoints['/wp/v2/users']);
    }
    if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
        unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
    }
    return $endpoints;
}
add_filter('rest_endpoints', 'filterRestEndpoints', 10, 1);

pingback機能の停止

pingback機能で他のブログからの通知を受け付けることができますが、
使わない場合は悪用防止のため無効化します。

functions.php
function disableSelfPingback(&$links) {
	$home = get_option('home');
	foreach($links as $l => $link) {
        if(0 === strpos($link, $home)) {
            unset($links[$l]);
        }
    }
}
add_action( 'pre_ping', 'disableSelfPingback' );

Wordpressのバージョンを隠す

バージョンによっては脆弱性が指摘されているので、バージョン情報があるとそれを突かれて攻撃される場合があります。

デベロッパーツールで下記のタグを探すだけで確認ができてしまいます。

<meta name=”generator” content=”WordPress X.X.X″>

下記はバージョンを表示しないようにする設定。

functions.php
remove_action('wp_head','wp_generator');

wp-configへのアクセス制限

データベースへの接続情報を閲覧させないように対策。
下記はApache 2.4使える設定。

<Files wp-config\.php>
    Require all denied
</Files>

Discussion