web-dev-qa-db-ja.com

安全に無効にするWP REST API

私はWordpressウェブサイトのセキュリティを改善することを検討しており、そうすることでWP REST APIが有効になっているデフォルトでは(WP 4.4なので、私が間違っていなければ)。

それを無効にする安全な方法は何ですか?

ここで「安全」とは、予期しない副作用を引き起こさないことを意味します。他のWPコア機能を壊しません。

可能なアプローチの1つは、.htaccessルールを書き換えますが、驚くべきことに、そうするための「公式な」指示が見つかりませんでした。

ヘルプや推奨事項は大歓迎です:)

更新:サードパーティのプラグインは私が探しているソリューションではありません。タスクを解決する多くの機能があることは承知していますが、Webサイトの速度を低下させる多くの追加機能が含まれています。余分なプラグインのオーバーヘッドなしで、この問題に対する1行の解決策があることを願っています。

更新2:Wordpressの公式意見は次のとおりです。 https://developer.wordpress.org/rest-api/using-the -rest-api/frequently-asked-questions /#can-i-disable-the-rest-api

これによると、Wordpressチームは将来のWP機能が新しいREST APIに依存することを望んでいます。これは、 no 安全な保証 REST APIを無効にする方法。

WPセキュリティ。

更新3:

回避策は、WordPress API Handbook-you can すべてのリクエストに認証を要求する

これにより、ウェブサイトのREST APIへの匿名アクセスが無効になり、認証されたリクエストのみが機能するようになります。

21
Eric Gopak

著者の元の質問から、私はwordpress公式の推奨事項から来たオプション2を選択しました( https://developer.wordpress.org/rest-api/using-the-rest -api/frequently-asked-questions /#can-i-disable-the-rest-api )。したがって、functions.phpを入力するだけで、ログインしているユーザーのみが残りのAPIを使用できます。

add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! empty( $result ) ) {
        return $result;
    }
    if ( ! is_user_logged_in() ) {
        return new WP_Error( 'rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) );
    }
    return $result;
});
14
Dzmitry Hubin

Localhost以外のリクエストでは無効にできます:

function restrict_rest_api_to_localhost() {
    $whitelist = [ '127.0.0.1', "::1" ];

    if( ! in_array($_SERVER['REMOTE_ADDR'], $whitelist ) ){
        die( 'REST API is disabled.' );
    }
}
add_action( 'rest_api_init', 'restrict_rest_api_to_localhost', 0 );
12

REST APIを無効にすることは、結局のところ悪い考えではありませんでした。実際にすべてのWebサイトに huge holeを開けました

In wordpress 4.4 道がありました

ここで、 .htaccess で可能な解決策を見つけましたが、.htaccessファイルにある他のものと組み合わせて慎重にテストする必要があります(例: 、wordpress自体)によって追加されたpretty-urlルール:

# WP REST API BLOCK JSON REQUESTS 
# Block/Forbid Requests to: /wp-json/wp/
# WP REST API REQUEST METHODS: GET, POST, PUT, PATCH, DELETE
RewriteCond %{REQUEST_METHOD} ^(GET|POST|PUT|PATCH|DELETE) [NC]
RewriteCond %{REQUEST_URI} ^.*wp-json/wp/ [NC]
RewriteRule ^(.*)$ - [F]

非常に抜本的な方法は、ルートに404.html Webページを作成してから、次の行を追加することです。

# WP REST API BLOCK JSON REQUESTS 
# Redirect to a 404.html (you may want to add a 404 header!) 
RewriteRule ^wp-json.*$ 404.html

静的ページ、つまり wordpress 関数に関係しないものを使用しない限り、適切なエラーページで404エラーを返したい場合は、 Wordpressが関係する場合の多くの問題

10
Kuzeko

プラグイン " Disable REST API "を使用すると、コンタクトフォーム7 APIなど、有効にするAPIを選択できます。プラグインの設定(yoursite.com/ wp-admin/options-general.php?page = disable_rest_api_settings)

1
Benno