Rumah > Soal Jawab > teks badan
Saya sedang mengkaji untuk meningkatkan keselamatan tapak Wordpress saya dan semasa berbuat demikian mendapati bahawa API WP REST didayakan secara lalai (setakat WP 4.4 jika saya ingat dengan betul).
Apakah cara selamat untuk melumpuhkannya?
"Selamat" di sini bermakna ia tidak akan menyebabkan kesan sampingan yang tidak diingini, seperti tidak memecahkan sebarang fungsi teras WP yang lain.
Satu cara yang mungkin ialah menggunakan .htaccess
untuk menulis semula peraturan, tetapi yang menghairankan saya tidak menemui sebarang arahan "rasmi" untuk melakukan ini.
Sebarang bantuan atau nasihat amat kami hargai :)
Kemas kini: Pemalam pihak ketiga bukanlah penyelesaian yang saya cari. Walaupun saya tahu terdapat banyak alat yang boleh menyelesaikan tugasan ini, ia mengandungi banyak ciri tambahan yang boleh melambatkan tapak web. Saya berharap ada penyelesaian satu baris untuk masalah ini tanpa overhed tambahan pemalam.
Kemas kini 2: Ini ialah pendapat rasmi WordPress: https://developer.wordpress.org/rest-api/using-the-rest-api/frequently-asked-questions/#can-i-disable-the-rest-api p>
Menurut ini, pasukan WordPress berharap ciri WP masa hadapan akan bergantung pada API REST baharu. Ini bermakna tiada cara selamat untuk melumpuhkan API REST.
Kami hanya berharap terdapat cukup pakar keselamatan yang bertanggungjawab untuk keselamatan WP.
Kemas kini 3:
Terdapat penyelesaian yang tersedia dalam manual API WordPress - anda boleh memerlukan pengesahan untuk semua permintaan
Ini memastikan bahawa akses tanpa nama ke API REST tapak web dilumpuhkan dan hanya permintaan yang disahkan adalah sah.
P粉4784456712024-01-11 15:20:53
Jawapan yang diterima melumpuhkan semua panggilan API untuk pengguna yang tidak disahkan, tetapi banyak pemalam hari ini bergantung pada fungsi API ini.
Melumpuhkan semua panggilan akan mengakibatkan tingkah laku tapak web yang tidak dijangka, yang juga berlaku kepada saya apabila menggunakan kod ini.
Sebagai contoh, ContactForm7 menggunakan API ini untuk menghantar maklumat hubungan ke pangkalan data (saya rasa) dan melakukan pengesahan ReCaptcha.
Saya rasa lebih baik untuk melumpuhkan titik akhir (lalai) tertentu untuk pengguna yang tidak disahkan, seperti ini:
// Disable some endpoints for unauthenticated users add_filter( 'rest_endpoints', 'disable_default_endpoints' ); function disable_default_endpoints( $endpoints ) { $endpoints_to_remove = array( '/oembed/1.0', '/wp/v2', '/wp/v2/media', '/wp/v2/types', '/wp/v2/statuses', '/wp/v2/taxonomies', '/wp/v2/tags', '/wp/v2/users', '/wp/v2/comments', '/wp/v2/settings', '/wp/v2/themes', '/wp/v2/blocks', '/wp/v2/oembed', '/wp/v2/posts', '/wp/v2/pages', '/wp/v2/block-renderer', '/wp/v2/search', '/wp/v2/categories' ); if ( ! is_user_logged_in() ) { foreach ( $endpoints_to_remove as $rem_endpoint ) { // $base_endpoint = "/wp/v2/{$rem_endpoint}"; foreach ( $endpoints as $maybe_endpoint => $object ) { if ( stripos( $maybe_endpoint, $rem_endpoint ) !== false ) { unset( $endpoints[ $maybe_endpoint ] ); } } } } return $endpoints; }
Dengan cara ini, satu-satunya titik akhir yang dibuka sekarang ialah titik yang dipasang oleh pemalam.
Untuk senarai lengkap titik akhir yang aktif di tapak anda, lihat https://YOURSITE.com/wp-json/
Anda bebas untuk mengedit tatasusunan $endpoints_to_remove
mengikut keperluan anda.
Jika anda mempunyai jenis siaran tersuai, pastikan anda menambahkan kesemuanya pada senarai.
Dalam kes saya, Saya turut menukar awalan titik akhir lalai daripada wp-json
更改为 mybrand-api
. Ini sepatutnya bertindak sebagai penghalang kepada bot yang membuat beribu-ribu permintaan kekerasan.
Ini yang saya lakukan:
// Custom rest api prefix (Make sure to go to Dashboard > Settings > Permalinks and press Save button to flush/rewrite url cache ) add_filter( 'rest_url_prefix', 'rest_api_url_prefix' ); function rest_api_url_prefix() { return 'mybrand-api'; }
P粉5123632332024-01-11 12:47:36
Berdasarkan soalan asal pengarang, saya memilih pilihan 2 daripada cadangan WordPress rasmi (https://developer.wordpress.org/rest-api/using-the-rest-api/frequently-asked-questions/#can- i-disable-the-rest-api). Jadi masukkan sahaja functions.php anda dan hanya biarkan pengguna log masuk menggunakan API yang lain (tetapi semak semak pautan asal sekiranya blok kod saya sudah lapuk ;) ): Kemas kini (1 Oktober 2021):
add_filter( 'rest_authentication_errors', function( $result ) { // If a previous authentication check was applied, // pass that result along without modification. if ( true === $result || is_wp_error( $result ) ) { return $result; } // No authentication has been performed yet. // Return an error if user is not logged in. if ( ! is_user_logged_in() ) { return new WP_Error( 'rest_not_logged_in', __( 'You are not currently logged in.' ), array( 'status' => 401 ) ); } // Our custom authentication check should have no effect // on logged-in requests return $result; });