Agar siz blok muharririning "Yuklanmoqda…" tugmasini bosganini yoki "Muharrir kutilmagan xatoga duch keldi" degan xabarni ko'rgan bo'lsangiz, ehtimol sizda REST API, administrator skriptlari yoki keshlash/xavfsizlik bilan bog'liq muammo bor. WordPress 6.9.4 da (2026-yil aprel) Gutenberg avvalgidan ham ko'proq toza administrator interfeysiga tayanadi: REST API'lari, nonces, versiyalangan skriptlar va toza JSON javoblari.

muammo

Brauzer konsolida (yoki foydalanuvchi interfeysida) ko'radigan odatiy xabarlar quyidagicha ko'rinadi:

"The editor has encountered an unexpected error."
"Updating failed. The response is not a valid JSON response."
"Error: The REST API encountered an error."
"GET https://example.com/wp-json/wp/v2/types/post?context=edit 403 (Forbidden)"

Bu administrator panelida paydo bo'ladi, Maqolalar → Qo'shish / Sahifalar → Tahrirlash, ba'zan faqat ma'lum turdagi kontent (CPT) uchun va ko'pincha darhol keyin:

  • xavfsizlik/kesh plaginini yangilash,
  • WAF/CDN qoidasidagi o'zgarish (Cloudflare, Sucuri, ModSecurity),
  • HTMLni "tozalaydigan" parcha qo'shish,
  • migratsiya (URL, HTTPS, teskari proksi),
  • yoki admin skriptlarini qo'shadigan mavzu (Avada) / sahifa quruvchisi (Elementor, Divi 5) yangilanishi.

Ushbu qo'llanma o'rta darajadagi foydalanuvchilar uchun: siz konsolni qanday ochishni, jurnalni o'qishni, MU-plaginni o'rnatishni va WP-CLI dan foydalanishni bilasiz. Oxir-oqibat, siz sababni (REST, JS, kesh, xavfsizlik, PHP) aniqlab, WordPress 6.9.4+ va PHP 8.1+ bilan mos keladigan toza tuzatishni qo'llashingiz mumkin bo'ladi.

Tez xulosa

  • Konsoldan boshlang : xato visible (403 REST, noto'g'ri JSON, JS fayli 404) qolganini belgilaydi.
  • Darhol REST testi : /wp-json/wp/v2/types/post?context=edit tizimga kirganingizda, keyin administrator hisobi bilan taqqoslang.
  • Interferensiyani o'chirib qo'ying : xavfsizlik/kesh plaginlari, parchalar, JS/CSS optimallashtirish, CDN, keyin ularni birma-bir qayta faollashtiring.
  • Toza jurnallarni yoqish : WP_DEBUG_LOG + Query Monitor-ni tanlang va “REST”, “nonce”, “headers already sent” va “fatal” ni qidiring.
  • Gutenbergni jQuery bilan "tuzatmang". Ko'pgina xatolar JSON javoblarini o'zgartiradigan navbat yoki filtrdan kelib chiqadi.
  • Agar siz quruvchi bo'lsangiz 5-bo'lim/Elementor/Avada administrator aktivlarini qo'shadi; optimallashtirish yoki xavfsizlik mojarosi tez-tez uchraydi.

Alomatlar

Mana men eng ko'p ko'radigan alomatlar (eng keng tarqalganidan tortib eng "qiyin"gacha).

  • Muharrirda oq ekran cheksiz aylanuvchi bilan.
  • UI xabari "Nashriyotchi kutilmagan xatoga duch keldi."
  • Nashr qilishda xatolik "Yangilash amalga oshmadi. Javob haqiqiy JSON javobi emas."
  • Brauzer konsoli (F12 → Konsol / Tarmoq):
    • 403/401 yoqilgan /wp-json/... (ko'pincha WAF yoki xavfsizlik qoidasi),
    • REST marshrutida 500 (server tomonida halokatli PHP),
    • Faylda 404 wp-includes/js/dist/*.min.js (kesh/CDN yoki to'liq bo'lmagan joylashtirish),
    • CORS yoki CSP xatolari (haddan tashqari qattiq xavfsizlik sarlavhalari),
    • Unexpected token < in JSON (HTML JSON javobiga kiritiladi, odatda PHP ogohlantirishi yoki HTML 403 sahifasi).
  • Mahalliy darajada ishlaydi, lekin ishlab chiqarishda emas CDN, agressiv keshlash, WAF yoki PHP/kengaytmalardagi farqlar.
  • Bu administrator uchun ishlaydi, lekin muharrir uchun emas : rolga qarab filtrlaydigan imkoniyatlar, nonces yoki plagin.
  • Bu faqat CPTda buziladi : show_in_rest yo'qolgan yoki halokatli bo'lgan maxsus REST marshruti.

Tez diagnostika jadvali

alomat Ehtimoliy sabab tekshiruv qaror
"JSON javobi noto'g'ri" RESTga HTML/ogohlantirish kiritildi Tarmoq javobini oching /wp-json/... Plagin/parchani o'chirib qo'yish, to'g'ri Ogohlantirishlar, 1-yechimga qarang
403 tadan /wp-json/ WAF, xavfsizlik qoidasi, asosiy autentifikatsiya Shaxsiy ko'rish rejimida RESTni sinab ko'ring + WAF jurnallari REST + sarlavhalarining oq ro'yxati, 1-yechimga qarang
Cheksiz aylanuvchi, JS xatolari Buzilgan administrator navbati / JS optimallashtirish Konsol: “Aniqlanmagan xususiyatlarni oʻqib boʻlmadi” Tuzatish uchun Navbatga qo'ying, aktivlarni chiqarib tashlang, 2-yechimga qarang
404 tadan wp-includes/js/dist/ Tugallanmagan joylashtirish / CDN keshi CDNni o'chirib qo'yish va keshni tozalash orqali sinovdan o'tkazing Tozalash va qayta joylashtirish, 3-yechimga qarang
REST yo'lida 500 Fatal PHP (plagin/mavzu) WP_DEBUG_LOG + So'rov monitori Muhim xatolarni tuzatish, orqaga qaytarish uchun 1-yechimga qarang

Nima uchun bu sodir bo'lmoqda?

Sodda qilib aytganda: blok muharriri - bu veb-saytingiz bilan REST API orqali doimiy ravishda aloqada bo'ladigan JavaScript ilovasi. Agar REST toza JSONdan boshqa narsani qaytarsa ​​(yoki kerakli skriptlar yuklanmasa), muharrir o'z holatini ishga tushira olmaydi.

Sahna ortida nimalar bo'layotgani (texnik versiya):

  • Gutenberg paketlarni yuklaydi wp-includes/js/dist/ va administrator uslublari.
  • U ma'lumotlarni REST so'nggi nuqtalari (turlari, taksonomiyalari, ri, avtomatik saqlashlar, post, Va hokazo).
  • U nonces bilan tasdiqlangan so'rovlarni yuboradi. Agar plagin sarlavhalarni o'zgartirsa, marshrutlarni bloklasa yoki "kontekstni tahrirlash" javoblarini keshlasa, u ishdan chiqadi.
  • PHP ogohlantirishi, "bildirishnoma" yoki hatto undan oldin bo'sh joy qoldirish <?php JSON javobini ifloslantirish uchun yetarli bo'lishi mumkin.

Ehtimoliy sabablar (eng tez-tez uchraydiganidan eng kam uchraydiganiga qadar):

  1. Xavfsizlik/kesh/CDN orqali REST bloklanishi (403, sinov, Asosiy autentifikatsiya, ModSecurity qoidasi).
  2. ifloslangan REST javobi PHP ogohlantirishi bilan, a var_dump()yoki HTML ni chop etadigan plagin.
  3. JS/CSS optimallashtirish bu administratorni birlashtiradi/minimallashtiradi (yoki WordPress skriptlarini "kechiktiradi".
  4. Yomon ishlab chiqilgan administrator navbati (yo'q bog'liqliklar, mos kelmaydigan kanca, barcha sahifalarda global yuklanish).
  5. CSP/xavfsizlik sarlavhalari juda qattiq (bloklar blob:, data:yoki kutilgan skriptlar/uslublar).
  6. Kesh nomuvofiqligi (xizmat ko'rsatuvchi xodim, brauzer keshi, obyekt keshi, CDN) boshqa versiyadagi aktivlarga xizmat ko'rsatadi.
  7. Server muammosi (fayl ruxsatnomalari, to'liq joylashtirilmagan, opcache, PHP kengaytmasi yo'q).

Boshlashdan oldin zarur shartlar

  • saqlash fayllar + ma'lumotlar bazasi (yoki agar siz boshqariladigan xosting xizmatida bo'lsangiz, surat). Ishlab chiqarishda "tasodifiy" tarzda sinovdan o'tkazmang.
  • Sinov muhiti ideal holda sahnalashtirish yoki hech bo'lmaganda texnik xizmat ko'rsatish oynasi.
  • versiyalari WordPress 6.9.4 va PHP 8.1+ tavsiya etiladi. Kirish Asboblar → Sayt salomatligi.
  • Foydali plaginlar :
  • Qaydlar vaqtincha faollashtirish WP_DEBUG_LOG (old tomonda ko'rsatmasdan).

Tavsiya etilgan (vaqtinchalik) konfiguratsiya wp-config.php :

<?php
// Active le debug sans afficher les erreurs à l'écran (évite de polluer des réponses JSON).
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );

// Log dans wp-content/debug.log
define( 'WP_DEBUG_LOG', true );

// Optionnel : réduit les "notices" bruyantes de certains plugins (à ajuster selon votre besoin).
// error_reporting( E_ALL & ~E_NOTICE & ~E_DEPRECATED );

Xavfsizlik xavfi ketmang WP_DEBUG ommaviy saytda doimiy ravishda yoqilgan. Jurnallarda yo'llar, so'rovlar va hatto maxfiy ma'lumotlar bo'lishi mumkin.

1-yechim: REST API bloklangan (403/401/500) va Gutenberg endi ishga tushira olmaydi

Gutenberg yuklay olmaganida, men har doim oddiy REST so'rovi bilan boshlayman. Chunki agar REST buzilgan bo'lsa, siz dunyodagi barcha skriptlarni tuzatishingiz mumkin: muharrir beqaror bo'lib qoladi.

diagnostika

  1. Administrator sifatida muharrirni oching, so'ngra F12 → tab tugmasini bosing tarmoq.
  2. Filtrlash yoqilgan wp-json.
  3. Birinchi xato so'rovini aniqlang (ko'pincha types, settings, posts).
  4. So'rovni bosing → ko'rish javob :
    • Agar siz HTML (xato sahifasi, sinov, kirish) ni ko'rsangiz, uni topdingiz.
    • Agar WordPressda JSON xatosini ko'rsangiz, uni yozib qo'ying code et message.

Tez buyruq satri testi (agar sizda WP-CLI + cookie/bo'lsa, u murakkabroq). Oddiy test uchun uni tizimga kirgan holda brauzerda ishga tushiring:

URL : https://votre-site.tld/wp-json/wp/v2/types/post?context=edit

Agar siz 403/401 xatosini yoki HTML sahifa xatosini olsangiz, sabab deyarli har doim WordPressdan tashqarida (WAF, xavfsizlik plagini, asosiy autentifikatsiya, teskari proksi).

Umumiy holat: plagin RESTni haddan tashqari tajovuzkor filtr orqali bloklaydi

Men xavfsizlik nuqtai nazaridan "REST API-ni o'chirib qo'yadigan" parchalarga tez-tez duch kelganman, lekin ular muharrirni (va ba'zan administrator tomonida Elementor/Divi/Avada-ni ham) buzadi.

OLDINGI (singan)

<?php
// Mauvaise idée : bloque l'API REST pour tout le monde, y compris l'admin.
// Résultat : Gutenberg ne peut plus charger.
add_filter( 'rest_authentication_errors', function( $result ) {
	return new WP_Error(
		'rest_disabled',
		'REST API désactivée',
		array( 'status' => 403 )
	);
} );

KEYIN (tuzatilgan, maqsadli cheklov)

<?php
/**
 * Restriction REST plus sûre : ne bloque pas l'admin, et limite seulement certaines routes publiques.
 * À placer dans un plugin (ou MU-plugin), pas dans functions.php si vous changez souvent de thème.
 */
add_filter( 'rest_authentication_errors', function( $result ) {

	// Si une authentification a déjà échoué/réussi, respectez le résultat.
	if ( ! empty( $result ) ) {
		return $result;
	}

	// Autorisez toujours les utilisateurs connectés (Gutenberg en dépend).
	if ( is_user_logged_in() ) {
		return $result;
	}

	// Exemple : bloquer uniquement une route custom publique (à adapter).
	$request_uri = isset( $_SERVER['REQUEST_URI'] ) ? (string) $_SERVER['REQUEST_URI'] : '';

	if ( str_contains( $request_uri, '/wp-json/mon-namespace/v1/' ) ) {
		return new WP_Error(
			'rest_forbidden',
			'Accès REST interdit.',
			array( 'status' => 403 )
		);
	}

	return $result;
} );

Nima uchun to'g'rilaydi Gutenberg REST so'nggi nuqtalarini kontekstda chaqiradi edit ulangan sessiyani talab qiladi. RESTni "global" darajada bloklash nashriyotchining ichki API'sini uzishga tengdir.

Hushyorlik nuqtasi Bu turdagi filtr aniq bo'lishi kerak. "Mavjudligi" bo'yicha bloklang /wp-json/" anti-naqshdir. Agar siz REST ta'sirini chindan ham kamaytirmoqchi bo'lsangiz, uni marshrut bo'yicha bajaring va administratorni sinab ko'ring.

Umumiy holat: PHP ogohlantirishi tufayli “Noto'g'ri JSON javobi”

REST javobi HTML bilan boshlanganida, Gutenberg ko'pincha "noto'g'ri JSON javobi" ni ko'rsatadi. Buning asl sababi ba'zan JSONdan oldin chop etilgan oddiy PHP ogohlantirishidir.

OLDINGI (singan)

<?php
// Exemple réaliste : un plugin/thème affiche un warning (variable non définie) et pollue la réponse REST.
add_action( 'init', function() {
	// Mauvais : echo en init, peut s'exécuter pendant une requête REST.
	if ( isset( $_GET['debug'] ) ) {
		echo "DEBUG"; // Pollue la sortie JSON.
	}
} );

KEYIN (tuzatilgan)

<?php
// Ne jamais "echo" dans le cycle WordPress global.
// Utilisez error_log() et limitez à WP_DEBUG.
add_action( 'init', function() {
	if ( defined( 'WP_DEBUG' ) && WP_DEBUG && isset( $_GET['debug'] ) ) {
		error_log( 'Debug init déclenché' );
	}
} );

Nima uchun to'g'rilaydi REST API qat'iy JSON qaytarishi kerak. Har qanday chiqish belgisi (ogohlantirish, BOM, echo) brauzer tomonida JSON tahlilini buzadi.

Umumiy holat: WAF/CDN bloklanishi (403, muammo, asosiy autentifikatsiya)

Agar 403 javobi "Kirish taqiqlangan" HTML sahifasi yoki chaqiruv bo'lsa, WordPress javobgar emas.

  • WAF/CDN ni vaqtincha o'chirib qo'ying (yoki "ishlab chiqish rejimiga" o'ting).
  • Aniq ruxsat berish /wp-json/ et /wp-admin/admin-ajax.php.
  • Agar siz bosqichma-bosqich rejimida Basic Auth yoqilgan bo'lsa, Gutenberg brauzeringiz konfiguratsiyasiga qarab ishlamay qolishi mumkin. Bunday holda, administrator IP-manziliga ruxsat bering yoki tahrirlash paytida Basic Authni vaqtincha o'chirib qo'ying.

WordPress tomonidagi REST shartnomasini tushunish uchun rasmiy hujjatlar bu yerda: REST API qo'llanmasi.

2-yechim: Buzilgan muharrir skriptlari (navbat, bog'liqliklar, yuklash tartibi)

Ikkinchi klassik stsenariy: mavzu yoki plagin administrator panelida skriptni yuklaydi, lekin:

  • noto'g'ri ilgakda,
  • qaramliklarsiz,
  • yoki WordPress allaqachon taqdim etgan kutubxonani (React, lodash) bekor qilish orqali.

Natija: JS xatolari turi wp is not defined, Cannot read properties of undefinedyoki jimgina avariya.

diagnostika

  1. F12 → Konsol: e'tibor bering Premer xato (15-chi emas). Birinchisi ko'pincha sabab bo'ladi.
  2. F12 → Tarmoq: 404/bloklangan xatolikli JS faylini qidirish.
  3. Administrator paneliga ta'sir qiluvchi optimallashtirish plaginlarini (minimallashtirish/birlashtirish/kechiktirish) vaqtincha o'chirib qo'ying.

Umumiy holat: global so'rovnoma admin_enqueue_scripts ekranni nishonga olmasdan

Men tez-tez hamma joyda "admin" skriptining yuklanganini ko'rganman va u mavjudligini taxmin qiladi wp.data (Gutenberg) hatto uni yuklamaydigan ekranlarda ham. Yoki aksincha: u global o'zgaruvchilarni ustiga yozadi.

OLDINGI (singan)

<?php
// Mauvais : charge un script partout dans l'admin, sans dépendances, et trop tôt.
// Sur l'écran de l'éditeur, ça peut entrer en conflit.
add_action( 'admin_enqueue_scripts', function() {
	wp_enqueue_script(
		'mon-admin',
		get_stylesheet_directory_uri() . '/assets/admin.js',
		array(), // Oublie des dépendances éventuelles.
		'1.0',
		true
	);
} );

KEYIN (tuzatilgan: nishonga olish + bog'liqliklar + versiyalashtirish)

<?php
/**
 * Charge un script admin uniquement sur l'éditeur de blocs, avec des dépendances correctes.
 * Compatible WP 6.9.4+.
 */
add_action( 'admin_enqueue_scripts', function( $hook_suffix ) {

	// Cible les écrans post.php (édition) et post-new.php (création).
	if ( ! in_array( $hook_suffix, array( 'post.php', 'post-new.php' ), true ) ) {
		return;
	}

	$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
	if ( ! $screen ) {
		return;
	}

	// Optionnel : ne chargez que pour certains post types.
	$allowed_post_types = array( 'post', 'page' );
	if ( empty( $screen->post_type ) || ! in_array( $screen->post_type, $allowed_post_types, true ) ) {
		return;
	}

	$src  = get_stylesheet_directory_uri() . '/assets/admin-editor.js';
	$path = get_stylesheet_directory() . '/assets/admin-editor.js';

	wp_enqueue_script(
		'mon-admin-editor',
		$src,
		array( 'wp-data', 'wp-edit-post', 'wp-element' ), // Dépendances Gutenberg.
		file_exists( $path ) ? filemtime( $path ) : '1.0.0',
		true
	);
} );

Nima uchun to'g'rilaydi Siz butun administrator panelini chalkashtirib yuborishdan qochasiz, faqat Gutenberg mavjud bo'lgan joylarni yuklaysiz va barqaror bog'liqliklarni e'lon qilasiz. Versiyalar filemtime() Shuningdek, u joylashtirilgandan so'ng "arvoh" keshlaridan qochadi.

Umumiy holat: plagin React/ReactDOM ni qo'lda yuklaydi

Agar plagin administrator panelida Reactning o'z versiyasini o'z ichiga olsa (yoki uni CDN orqali yuklasa), ayniqsa WordPress yangilanishidan keyin tashxislash qiyin bo'lgan xatolarga duch kelishingiz mumkin. WordPress allaqachon muharrir uchun zarur paketlarni taqdim etadi.

OLDINGI (singan)

<?php
// Anti-pattern : charger React via CDN dans l'admin.
// Peut casser Gutenberg (deux React différents).
add_action( 'admin_enqueue_scripts', function() {
	wp_enqueue_script( 'react', 'https://unpkg.com/react@18/umd/react.production.min.js', array(), null, true );
	wp_enqueue_script( 'react-dom', 'https://unpkg.com/react-dom@18/umd/react-dom.production.min.js', array( 'react' ), null, true );
} );

KEYIN (tuzatildi: WordPress paketlaridan foydalaning)

<?php
// Utilisez les packages WordPress (wp-element) au lieu de React embarqué.
add_action( 'admin_enqueue_scripts', function( $hook_suffix ) {
	if ( ! in_array( $hook_suffix, array( 'post.php', 'post-new.php' ), true ) ) {
		return;
	}

	wp_enqueue_script(
		'mon-ui',
		plugin_dir_url( __FILE__ ) . 'assets/mon-ui.js',
		array( 'wp-element', 'wp-components', 'wp-i18n' ),
		'1.0.0',
		true
	);
} );

Foydali hujjatlar: wp-element paketi et Blok muharriri qo'llanmasi.

Divi 5 / Elementor / Avada mosligi

  • 5-bo'lim Agar siz administrator interfeysini "optimallashtiradigan" ishlash parametrlarini yoqsangiz, keyin Gutenbergni sinab ko'ring. Divi ba'zan o'z modullari uchun aktiv muharrirlarini yuklaydi; ularni chiqarib tashlaydi. /wp-admin/ agressiv optimallashtirishlar.
  • Elementor Elementor o'zining muharririga ega bo'lsa-da, u WordPress administrator paneli bilan integratsiyalashgan. Administrator skriptlarini birlashtirgan optimallashtirish plagini Gutenberg va Elementor ekranini buzishi mumkin.
  • Avada Fusion Builder va Avada Live og'ir skriptlarni yuklaydi. Agar sizda administrator maydoniga ta'sir qiluvchi kesh/minify jarayoni bo'lsa, Avada ko'pincha muammoni birinchi bo'lib aniqlaydi.

3-yechim: Administratorni buzadigan keshlash, xavfsizlik va CSP (Kontent-Xavfsizlik-Siyosat)

Gutenberg faqat yarim vaqtda yoki faqat qattiq yangilanishdan keyin ishlayotganini ko'rsam, kesh muammosi bor deb o'ylayman. "Yuklashdan bosh tortdi… chunki u CSP ni buzadi" xatolarini ko'rsam, xavfsizlik sarlavhalari noto'g'ri sozlangan deb o'ylayman.

Umumiy holat: administratorni minimallashtiradigan/birlashtiradigan optimallashtirish

Ko'pgina optimallashtirish plaginlarida "Administrator maydonini ham optimallashtirish" opsiyasi mavjud. WordPress 6.9.4 da bu ko'pincha yomon fikr: administrator interfeysi tez o'zgaradi, paketlar allaqachon optimallashtirilgan va qaramliklarni buzish xavfi realdir.

Aniq harakat:

  • JS/CSS optimallashtirishni o'chirib qo'yish /wp-admin/.
  • Hech bo'lmaganda chiqarib tashlang:
    • /wp-includes/js/dist/
    • /wp-admin/js/
    • load-scripts.php et load-styles.php (agar ishlatilgan bo'lsa)
  • Tozalash: plagin keshi + server keshi + CDN + brauzer.

Umumiy holat: Haddan tashqari qattiq ijtimoiy-iqtisodiy holat

"Yuqori darajada xavfsiz" CSP nashriyotchi tomonidan ishlatiladigan mexanizmlarni bloklashi mumkin (plaginlar, media, iframe va boshqalarga qarab). Xatolar WordPressda emas, balki konsolda paydo bo'ladi.

Konsol xatosiga misol:

Refused to load the script 'blob:https://example.com/...' because it violates the following Content Security Policy directive...

Agar siz CSP ni PHP (xavfsizlik plagini, maxsus sarlavhalar) orqali boshqarsangiz, faqat administrator paneli uchun cheklovlarni yumshatish orqali sinab ko'ring. Mana bir misol. minimal (xavfsizlik siyosatingizga moslashtirilishi va tasdiqlanishi kerak):

<?php
/**
 * Exemple : définir des headers CSP uniquement dans l'admin.
 * Attention : une CSP doit être pensée globalement. Ne copiez pas ceci sans comprendre votre surface d'attaque.
 */
add_action( 'send_headers', function() {

	if ( ! is_admin() ) {
		return;
	}

	// Exemple volontairement simple. Ajustez selon vos besoins.
	// Objectif : éviter de casser des scripts/styles nécessaires à l'éditeur.
	header( "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob:; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; connect-src 'self' https:; frame-src 'self';" );
}, 20 );

Nima uchun to'g'rilaydi Gutenberg va ba'zi administrator komponentlari URL manzillaridan foydalanishi mumkin. blob: / data: (xususiyatlar va kengaytmalarga qarab). Haddan tashqari cheklovchi CSP yuklashni/baholashni bloklaydi va JS ilovasi ishga tushmaydi.

Xavfsizlik xavfi : 'unsafe-inline' et 'unsafe-eval' Bu XSS xavfini oshiradi. Ideal holda, siz buni xohlamaysiz. Lekin aslida ko'plab WP stacklari (plaginlarni ham qo'shgan holda) mukammal "qat'iy dinamik" CSPga tayyor emas. Progressiv CSP ni joriy qiling va rejimdan foydalaning. Faqat hisobot uchun takrorlash uchun.

Umumiy holat: CDN/opcache orqali taqdim etiladigan eski versiyadagi aktivlar

WordPress yangilanishidan so'ng, men allaqachon ba'zilarini ko'rdim wp-includes/js/dist/* oldingi versiyadagi fayllarni CDN orqali taqdim etadi. Keyin Gutenberg bir-biriga mos kelmaydigan versiyalar aralashmasini yuklaydi.

Tekshirish ro'yxati:

  • CDNni tozalang (va nafaqat plagin keshini).
  • Agar kirish imkoningiz bo'lsa, PHP opcache-ni tozalang (yoki PHP-FPM-ni qayta ishga tushiring).
  • Joylashtirish muvaffaqiyatli yuklanganligini tasdiqlang. hamma WordPress fayllari (ayniqsa qo'lda SFTP orqali).

Tuzatishdan keyingi tekshiruvlar

  • Mavjud maqolani oching va yangisini yarating: ikkala ekran ham ishlashi kerak.
  • Hisob bilan sinovdan o'tkazing Admin keyin hisob nashriyotchi (REST imkoniyatlari farq qiladi).
  • Konsol: nol Dastlabki yuklanishda qizil xatolik. Ba'zi ogohlantirishlar mavjud bo'lishi mumkin, ammo blokirovka qilishda xatolik yo'q.
  • Tarmoq: so'rovlar /wp-json/ 200 formatida bo'lishi kerak va javob JSON formatida bo'lishi kerak.
  • Tez nashr qilish testi: qoralama → nashr qilish → yangilash.

Agar siz Elementor/Divi/Avada dan foydalanayotgan bo'lsangiz, ularning tahrirlash ekranlarini ham oching: "admin" patch nafaqat Gutenbergni, balki butun narsani yaxshilashi kerak.

Agar bu hali ham ishlamasa

Muammo davom etganda qo'llanadigan protsedura (bu tartibda, chunki u aylana bo'ylab yurishdan qochadi).

1) Mehmonlarga ta'sir qilmasdan muammolarni bartaraf etish rejimi

  • Faollashtirish Sog'liqni saqlash nazorati va foydalaning Muammolarni bartaraf etish rejimi.
  • Ushbu rejimdagi barcha plaginlarni o'chirib qo'ying, mavzuni faol holda saqlang.
  • Gutenbergni sinab ko'ring.

Agar bu ish bersa, aybdorni topmaguningizcha plaginlarni birma-bir qayta faollashtiring (ko'pincha xavfsizlik, kesh, optimallashtirish yoki yomon kodlangan maxsus maydonlar plagini).

2) PHP jurnallarini va REST xatolarini tekshiring

  • ochiq wp-content/debug.log muvaffaqiyatsiz yuklashdan so'ng darhol.
  • Ni qidirish: Fatal error, headers already sent, Deprecated (agar ko'rsatilsa, ba'zi eskirgan qoidabuzarliklar chiqishni ifloslantirishi mumkin), REST.

"Noto'g'ri JSON" xatolarini tushunish uchun rasmiy nosozliklarni tuzatish hujjatlari bu yerda: WordPress-da disk raskadrovka.

3) So'rovlar monitori: xatolar va AJAX/REST so'rovlarini tekshiring

Query Monitor PHP xatolarini, hiyla-nayranglarni va ba'zan HTTP chaqiruvlarini ko'rsatadi. Gutenberg bilan bog'liq muammolarni bartaraf etishda men undan asosan quyidagilar uchun foydalanaman:

  • REST so'rovida ishga tushirilgan ogohlantirishni aniqlash uchun,
  • Mas'ul plaginni stek izi orqali aniqlang.
  • administrator kutilmagan skriptlarni yuklayotganini tekshiring.

4) Saytning sog'lig'i va server chegaralarini tekshiring

  • PHP xotirasi Gutenberg, quruvchilar va katta plaginlar muammolarga olib kelishi mumkin. Xotiraning yetarli emasligi vaqti-vaqti bilan ishdan chiqishiga olib kelishi mumkin.
  • Cheklovlar : max_input_vars Juda past ko'rsatkich ba'zi ekranlarga ta'sir qilishi mumkin (sof Gutenbergda kamroq, og'ir meta-qutilarda ko'proq).
  • ruxsatlar : agar WP yadro fayllarini o'qib bo'lmaydigan bo'lsa, aktivlarda 404/500 xatolik yuzaga keladi.

5) Doimiy havolalarni qayta tiklash (kamdan-kam uchraydigan, ammo tez)

REST fayl mavjud bo'lsa ham 404 xatolikni qaytarganda, migratsiyadan keyin nomuvofiq qayta yozish qoidalarini ko'rdim.

  1. Sozlamalar → Doimiy havolalar → Saqlash (o'zgartirmasdan).

6) Parchadagi ziddiyatni tekshiring

Parcha plaginlari (yoki functions.php) asosiy sababdir, chunki oddiy sintaksis xatosi hamma narsani buzadi.

  • "Nuqta-vergul yo'q" yoki qavs ichida xato borligini qidiring.
  • Parcha ishlayotganini tekshiring init / wp_loaded va qildi echo / var_dump.

7) WP-CLI: Yaxlitlik va versiyalarni tekshiring

To'liq joylashtirilmagan deb gumon qiladigan saytda WP-CLI juda samarali:

# Vérifie l'intégrité des fichiers du core WordPress
wp core verify-checksums

# Liste plugins et mises à jour en attente
wp plugin list
wp plugin update --all

# Vérifie la version PHP (vue par WP-CLI)
php -v

WP-CLI hujjatlari: WP-CLI buyruqlari.

Umumiy xatolar va kamchiliklar

alomat Ehtimoliy sabab Tavsiya etilgan yechim
Parcha qo'shilgandan so'ng "Noto'g'ri JSON javobi" echo/var_dump yoki REST paytida PHP ogohlantirishi Chiqishni o'chirish, foydalaning error_log()To'g'ri ogohlantirishlar (1-yechim)
Gutenberg faqat ma'lum brauzerlarda yuklanadi. Brauzer keshi/xizmat ko'rsatuvchi xodim yoki kengaytma Shaxsiy brauzerni sinab ko'ring, kengaytmalarni o'chiring, keshni tozalang (3-yechim)
JS xatosi "wp aniqlanmagan" Skript juda erta yoki noto'g'ri ekranda yuklandi Maqsad post.php/post-new.php + bog'liqliklar (2-yechim)
403 tadan /wp-json/ faqat ishlab chiqarishda WAF/CDN, ModSecurity qoidasi, Asosiy autentifikatsiya Oq ro'yxat REST/admin-ajax, WAF jurnallari, chetlab o'tish (1-yechim)
Keshni o'chirib qo'ygandan so'ng ishlaydi, keyin yana buziladi. Reaktiv optimallashtirish plagini “minify admin” Istisno qilish /wp-admin/ va WP to'plamlari (3-yechim)
WP yangilanishidan keyin xatolik yuz berdi, JS fayllari 404 ni ko'rsatmoqda Tugallanmagan joylashtirish/CDN eski versiyani taqdim etmoqda CDN tozalash + wp core verify-checksums (3-yechim)
Kod "to'g'ri joyda", lekin u ishlamayapti. Noto'g'ri faylga nusxalangan (plagin va bola mavzusi) yoki noo'rin ilmoq MU-plaginga qo'shing, ilmoq va ustuvorlikni tekshiring
Bu faqat Muharrir roli uchun buziladi. REST/nonce imkoniyatlari, rol plagini Ushbu rol bilan REST marshrutlarini sinab ko'ring, imkoniyatlarni to'g'rilang

O'rta darajadagi foydalanuvchilar orasida tez-tez uchraydigan xatolar:

  • Zaxira nusxasisiz to'g'ridan-to'g'ri ishlab chiqarishda sinovdan o'tkazing, keyin shoshilinch ravishda "ta'mirlang".
  • Eski qo'llanmada (6.x versiyasidan oldingi) topilgan va "xavfsizlik uchun" RESTni bloklaydigan parcha qo'shing.
  • WordPress yangilanishidan keyin CDN keshini tozalashni unutib qo'ydim.
  • Juda global bo'lgan ilgakdan foydalanish (masalan, init) HTML ni chop etish yoki JS ni yuklash uchun.
  • Administratorni "0,2 soniyani tejash" uchun minify/birlashtirish va muharrirni yo'qotish.

Variant / muqobil

Kodsiz usul: Health Check + nazorat ostidagi qaytarib olish bilan izolyatsiya qilish

  • Sog'liqni tekshirish → muammolarni bartaraf etish rejimi → plaginlarni kategoriya bo'yicha o'chirib qo'yish (xavfsizlik/keshlash/optimallashtirish).
  • Agar aybdor aniqlansa, uni yangilang yoki almashtiring.
  • Agar xato yaqinda yangilangan yangilanish tufayli yuzaga kelgan bo'lsa, vaqtinchalik orqaga qaytarish (plagin) ni amalga oshiring va keyin nashriyotchi bilan chiptani oching.

Keyinchalik rivojlangan usul: REST xatolarini qayd etish uchun MU-plagin "himoyasi"

Sayt murakkab bo'lganda (Avada + Elementor + xavfsizlik + kesh), men ba'zan ishlab chiqarishni buzmasdan REST xatolarini qayd qilish uchun vaqtinchalik MU-plaginni o'rnataman.

<?php
/**
 * Plugin Name: MU - Debug REST pour éditeur de blocs
 * Description: Journalise les erreurs REST (temporaire) pour diagnostiquer Gutenberg.
 * Author: Votre équipe
 * Version: 1.0.0
 *
 * À placer dans wp-content/mu-plugins/mu-debug-rest.php
 */

add_filter( 'rest_request_after_callbacks', function( $response, $handler, $request ) {

	// Ne loguez que si WP_DEBUG est actif pour éviter du bruit en prod.
	if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
		return $response;
	}

	if ( is_wp_error( $response ) ) {
		error_log( '[REST][WP_Error] route=' . $request->get_route() . ' code=' . $response->get_error_code() . ' message=' . $response->get_error_message() );
		return $response;
	}

	if ( $response instanceof WP_REST_Response ) {
		$status = $response->get_status();
		if ( $status >= 400 ) {
			error_log( '[REST][HTTP ' . $status . '] route=' . $request->get_route() );
		}
	}

	return $response;
}, 10, 3 );

Ushbu himoya vositasi singan Gutenberg ekranini aniq REST yo'nalishi bilan bog'lashga yordam beradi.

Kelajakda bu muammodan qoching

  • RESTni global miqyosda bloklamangAgar siz xavfsizlikni kuchaytirmoqchi bo'lsangiz, buni marshrutlar, rollar va kontekstlar orqali bajaring. Har bir o'zgarishdan keyin administratorni sinab ko'ring.
  • Administratorni optimallashtirmang (minimallashtirish/birlashtirish/kechiktirish) juda nazorat ostidagi holatlar bundan mustasno. Foyda minimal, xavf juda katta.
  • Admin skriptlaringizni to'g'ri yuklang :
    • ekran nishonga olish ($hook_suffix + get_current_screen()),
    • qaramliklar wp-* e'lon qilindi,
    • ishonchli versiyalash (filemtime oddiy muhitda).
  • PHP ogohlantirishlarini monitoring qilish PHP 8.1+ da ba'zi andozalar ko'proq ogohlantirishlar/eskirishlarni keltirib chiqaradi. Ko'rsatilgan ogohlantirish JSONni buzishi mumkin.
  • Yangilash jarayoni : bosqichma-bosqich → keshlarni tozalash → mahsulot. Va WordPress yangilanishidan so'ng, CDNni muntazam tozalash.
  • Xavfsizlik sarlavhalari : CSP ni joylashtiring Faqat hisobot uchun Avval uni asta-sekin torting. Aks holda, iframe yoki blob qo'shadigan keyingi plagin bilan "adminni buzib qo'yasiz".

Foydali PHP ma'lumotlari: PHP xatolarini boshqarish konfiguratsiyasi.

resurslari

tez-tez so'raladigan savollar

Nima uchun Gutenberg "Javob haqiqiy JSON javobi emas" deb ko'rsatadi?

Chunki REST so'rovi JSONni kutadi, lekin boshqa narsani oladi (403/500 xatolik HTML, PHP ogohlantirishi, kiruvchi natija). Javobni Tarmoq yorlig'ida oching: ko'pincha sababni darhol ko'rasiz.

REST API'sini "xavfsizlik nuqtai nazaridan" o'chirib qo'yish yaxshi amaliyotmi?

Yo'q, global miqyosda emas. WordPress (va Gutenberg) uni ichki jihatdan ishlatadi. Agar uni mustahkamlasangiz, buni yo'l-yo'riq bilan va administrator panelini ish holatida ushlab turish bilan bajaring. Tizimli ravishda sinab ko'ring. /wp-json/wp/v2/types/post?context=edit bog'langan.

Nima uchun bu administrator uchun ishlaydi, lekin muharrir uchun emas?

Imkoniyatlar farq qiladi va ba'zi rol/xavfsizlik plaginlari RESTni rolga qarab filtrlaydi. Tegishli hisob bilan sinab ko'ring va kontekstda REST marshrutlarida 403 ta xato bor-yo'qligini tekshiring. edit.

Keshlash plagini Gutenbergni buzishi mumkinmi?

Ha, ayniqsa, agar u tasdiqlangan REST so'nggi nuqtalarini keshlasa yoki administrator skriptlarini optimallashtirsa/minimallashtirsa. Istisno qiling /wp-admin/ et /wp-json/ agressiv keshlash qoidalari.

Agar faqat REST marshrutida 500 xatolik yuzaga kelsa, nima qilishim kerak?

Bu deyarli har doim ushbu so'rov paytida ishga tushiriladigan halokatli PHP chaqiruvidir. Yoqish WP_DEBUG_LOGtakrorlang, keyin tomosha qiling debug.logQuery Monitor mas'ul plagin/mavzuni aniqlashga yordam beradi.

Divi 5 / Elementor / Avada Gutenberg bilan mos keladimi?

Ha, lekin ular skriptlar va ishlash parametrlarini qo'shadilar. Mojarolar asosan administrator optimallashtirishlari, minififikatsiya yoki haddan tashqari qattiq xavfsizlik qoidalaridan kelib chiqadi. Agar Gutenberg buzilsa, quruvchi muharririni ham sinab ko'ring: sabab ko'pincha umumiy bo'ladi.

"Doimiy havolalarni qayta saqlash" yordam beradimi?

Ba'zan, agar REST migratsiya yoki server o'zgarishidan keyin 404 xatosini qaytarsa, bu birinchi navbatda qilinadigan ish emas, lekin bu tez va xavfsizdir.

JQuery-ni qayta yuklash yoki maxsus JS qo'shish orqali "Gutenbergni tuzatishim" mumkinmi?

Bu odatda haqiqiy muammoni (nuqsonli REST serveri, ziddiyatli skriptlar) yashiradigan band-aid yechimidir. Buning sababini tuzating: REST bloklanishi, nosoz navbat, kesh/CDN muammolari yoki halokatli PHP.

Gutenberg aktivlari 404 xatosini qaytarayotganda qaysi fayllarga qarashim kerak?

URL manzillariga qarang wp-includes/js/dist/ et wp-includes/css/dist/404 xatosi tugallanmagan joylashtirishni yoki eski versiyani taqdim etuvchi CDNni ko'rsatishi mumkin. wp core verify-checksums juda ko'p yordam beradi.

Men “Yuklashdan bosh tortildi… Kontent xavfsizligi siyosatini buzadi” degan xabarni ko‘ryapman. Nima qilishim kerak?

Administrator uchun CSPni bo'shating, ideal holda Faqat hisobot uchun Avvalo, ko'rsatmalarni tekshiring. script-src, style-src, connect-srcva vakolati blob:/data: Agar kerak bo'lsa. XSS xavfini cheklash uchun buni asta-sekin bajaring.