ওয়ার্ডপ্রেস 4.7.1 REST এপিআই এখনও ব্যবহারকারীদের এক্সপোজ করে


28

আমি আমার ওয়ার্ডপ্রেসকে আপগ্রেড করেছি 4.7.1এবং এর পরে আমি REST এপিআইয়ের মাধ্যমে ব্যবহারকারীদের গণনা করার চেষ্টা করেছি, যা ঠিক করা উচিত, তবে আমি ব্যবহারকারীদের পুনরুদ্ধার করতে সক্ষম হয়েছি।

https://mywebsite.com/wp-json/wp/v2/users

আউটপুট:

[{"id":1,"name":"admin","url":"","description":"","link":"https:\/\/mywebsite\/author\/admin\/","slug":"admin","avatar_urls":{"24": ...

সর্বশেষ সংস্করণ থেকে চেঞ্জলগ:

REST এপিআই সমস্ত ব্যবহারকারীদের জন্য প্রকাশিত ব্যবহারকারীর ডেটা উন্মুক্ত করে যারা একটি সার্বজনীন পোস্ট ধরণের পোস্ট লেখেন। ওয়ার্ডপ্রেস ৪. 4..১ এটিকে কেবলমাত্র পোস্ট ধরণের মধ্যে সীমাবদ্ধ করে যা নির্দিষ্ট করে দিয়েছে যে এগুলি REST এপিআই-এ প্রদর্শিত হবে। ক্রোগগার্ড এবং ক্রিস জিন রিপোর্ট করেছেন।

প্লাগইন ইনস্টল করার পরে Disable REST API, মনে হয় যে সবকিছু ঠিকঠাক চলছে, তবে আমি প্রতিটি ছোট জিনিস প্লাগইন ব্যবহার করতে পছন্দ করি না।

প্লাগইন ব্যবহারের পরে আউটপুটটি হ'ল:

{"code":"rest_cannot_access","message":"Only authenticated users can access the REST API.","data":{"status":401}}

প্লাগইন ব্যবহার না করেই আমি কীভাবে এই সমস্যাটি সমাধান করতে পারি, বা এই স্টাইলটি আপগ্রেড করার পরেও কেন বিদ্যমান?

30.9.9.2017 সম্পাদনা করুন

আমি বুঝতে পেরেছি যে contact 7প্লাগইন এবং এর মধ্যে একটি বিরোধ আছে Disable REST APIএবং এটি আপনাকে 401 unauthorizedত্রুটি দেবে।

আপনি যখন contact 7ফর্মের মাধ্যমে কোনও বার্তা প্রেরণের চেষ্টা করবেন তখন এটি একটি অনুরোধ জানাবে

wp-json/contact-form-7/v1/contact-forms/258/feedback

এবং এটি অক্ষম করা ভাল ধারণা নয়।


7
আমার বোঝার হিসাবে, চেঞ্জলগটি বলে না যে ব্যবহারকারীরা আর প্রকাশ পায় না। আমার মনে হয় এটি "পড়াশোনা ব্যবহারকারীদের মধ্যে সীমাবদ্ধ হয়ে যায় যাঁরা REST এপিআইয়ের মাধ্যমে প্রকাশের জন্য সেট করা পোস্ট প্রকার রয়েছে তাদের সীমাবদ্ধ হয়ে যায়" বলে আমি মনে করি। সুতরাং যখনই কোনও ব্যবহারকারী পোস্ট পোস্টের জন্য কোনও পোস্ট লেখেন যা প্রকাশিত হয় (কেবল প্রকাশ্য হওয়ার বিপরীতে), লেখকও প্রকাশিত হবে।
জেহফম্যান

হতে পারে এই লিঙ্কটি আপনাকে সাহায্য করতে পারে: ওয়ার্ডপ্রেস.স্ট্যাকেক্সেঞ্জার
পাবলো

উত্তর:


22

এই কোড স্নিপেট ব্যবহার করুন এটি ব্যবহারকারীর তালিকাটি আড়াল করবে এবং ফলস্বরূপ 404 দেবে, বাকি এপিআই কলগুলি যেমন চলছিল তেমন চালিয়ে যায়।

add_filter( 'rest_endpoints', function( $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;
});

এই বিষয়ে আরও কিছু তথ্যের জন্য আপনি ডাব্লুপিপিএসএসপিএস-এর গিটহাব রেপোতে এই লিঙ্কটি উল্লেখ করতে পারেন ।

::হালনাগাদ::

সমস্ত ডিফল্ট REST এপিআই এর শেষ-পয়েন্টগুলি সরাতে আপনাকে নিম্নলিখিত কোড যুক্ত করতে হবে:

<?php remove_action('rest_api_init', 'create_initial_rest_routes', 99); ?>



1
এটি এখন পর্যন্ত সেরা সমাধান।
মিরসাদ

এই কাস্টম কোডটি কোথায় যায়? এটি কোথায় সংরক্ষণ করা হবে তা আপনি উল্লেখ করবেন না।
রুকি

আপনি এটিকে functions.phpআপনার থিমের মধ্যে রাখতে পারেন ।
ব্লুসুইটার

এই সমাধানটি ব্যবহারকারীদের সমস্ত সিআরইউডি অপারেশনকে অক্ষম করে, কেবলমাত্র জিইটি অনুরোধের জন্য এই বাস্তবায়নটি দেখুন: github.com/szepeviktor/wordpress-fail2ban/commit/…
জাজেপ ভিক্টর

2

আপনি যদি চান এইচটিএমএল মাথা থেকে API লিঙ্কটি সরান।

// https://wordpress.stackexchange.com/a/211469/77054
// https://wordpress.stackexchange.com/a/212472
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );

তারপরে সমস্ত অনুরোধের জন্য প্রমাণীকরণ প্রয়োজন।

// You can require authentication for all REST API requests by adding an is_user_logged_in check to the rest_authentication_errors filter.
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', 'Only authenticated users can access the REST API.', array( 'status' => 401 ) );
    }
    return $result;
});

এটি আপনাকে পছন্দসই বার্তাটি ছাড়বে।

এখন গণনা বন্ধ করতে আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন।

// https://perishablepress.com/stop-user-enumeration-wordpress/
// block WP enum scans
    // https://m0n.co/enum
    if (!is_admin()) {
        // default URL format
        if (preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING'])) die();
        add_filter('redirect_canonical', 'shapeSpace_check_enum', 10, 2);
    }
    function shapeSpace_check_enum($redirect, $request) {
        // permalink URL format
        if (preg_match('/\?author=([0-9]*)(\/*)/i', $request)) die();
        else return $redirect;
    }

আরও কৌশল জন্য পুরো পোস্ট দেখুন।


1

আপনি এটি nginx / অ্যাপাচি কনফিগারেশনের মাধ্যমে ঠিক করতে পারেন:

location ~* /wp-json/wp/v2/users {
        allow ip_address;
        deny all;
}

-1

এটি ঠিক করতে সক্ষম হওয়ার জন্য আপনাকে প্রথমে সমস্যার উত্সটি জানতে হবে।

  1. আপনি কি এসইও প্লাগইনগুলি ব্যবহার করেন: সবগুলিই একটি এসইও প্যাক বা ইয়োস্ট? এটি অক্ষম করার চেষ্টা করুন এবং আবার চেক করুন।
  2. আপনি কি জেটপ্যাক প্লাগইন ব্যবহার করেন? এটি অক্ষম করার চেষ্টা করুন এবং আবার চেক করুন।

যদি এটি আপনাকে সঠিক দিকে নির্দেশ করে তবে দয়া করে আমাকে জানান।

এটি সমাধান করার একটি নোংরা উপায় হ'ল আপনার .htacces এর নীচে থাকা ইউআরএলটি ব্লক করা। https://mywebsite.com/wp-json/wp/v2/users

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.