Veb
WordPress xavfsizligi: ekspertizadan oldin 12 bandli checklist
Yangilanishlar, plaginlar auditi, xmlrpc, fayl tahrirlashni o'chirish, uploads'da PHP taqiqi, adminlar, 2FA, zaxira, WAF va nazorat yig'indilari — buyruq va sozlamalar bilan.
· 11 daq. o'qish

WordPress — keng tarqalgan sayt platformasi, O'zbekistonda ham ko'plab korporativ saytlar va portallar unda ishlaydi. Uning yadrosi yaxshi qo'llab-quvvatlanadi, lekin real saytdagi xavf odatda yadroda emas: eskirgan plaginlar, ochiq qolgan standart funksiyalar, ortiqcha administratorlar va tekshirilmagan zaxira nusxalarda bo'ladi.
Bu maqolada WordPress saytni rasmiy kiberxavfsizlik ekspertizasiga topshirishdan oldin tekshirish kerak bo'lgan 12 bandni yig'dik. Har bir band uchun — nima uchun muhim, qanday tekshirish va qanday tuzatish. Buyruqlarning ko'pi WP-CLI orqali bajariladi.
Nima uchun WordPress alohida e'tibor talab qiladi
Ekspertiza skanerlari WordPress'ni darhol taniydi va unga xos tekshiruvlarni ishga tushiradi: yadro va plaginlar versiyalari, foydalanuvchi nomlarini aniqlash, xmlrpc.php, readme.html, uploads papkasi. Bu tekshiruvlar avtomatlashtirilgan va tez, shuning uchun ochiq qolgan har bir standart narsa hisobotda topilma bo'lib chiqadi.
Yaqinda biz tozalagan real buzilish ham aynan shunday boshlangan: bitta yangilanmagan plagin.
1. Yadro, plaginlar va mavzular yangilangan
Eng muhim band. Yangilanish mavjud plaginlarni ko'ring:
wp core check-update
wp plugin list --update=available --fields=name,version,update_version
wp theme list --update=available
Yangilash:
wp core update && wp core update-db
wp plugin update --all
wp theme update --all
Production'da yangilashdan oldin zaxira oling va iloji bo'lsa, avval staging nusxada sinab ko'ring. PHP versiyasi ham qo'llab-quvvatlanadigan va xavfsizlik tuzatishlari o'rnatilgan bo'lishi kerak.
2. Plaginlar auditi
Har bir plagin — qo'shimcha kod va qo'shimcha hujum yuzasi. Ro'yxatni ko'rib chiqing:
wp plugin list --fields=name,status,version
- Faol bo'lmagan plaginlarni o'chiring. O'chirilgan (deactivated) plagin fayllari serverda qoladi va ulardagi zaiflik baribir ishlashi mumkin. Faqat o'chirib emas, butunlay olib tashlang:
wp plugin delete <nom>. - Tashlab qo'yilgan plaginlarni almashtiring. Agar plagin uzoq vaqt yangilanmagan yoki katalogdan olib tashlangan bo'lsa, unga muqobil toping.
- "Nulled" (buzilgan pullik) plaginlardan voz keching. Ular ko'pincha oldindan o'rnatilgan backdoor bilan tarqatiladi.
- Tanimagan plaginlarni tekshiring. Tasodifiy nomli plagin — buzilish belgisi bo'lishi mumkin.
3. xmlrpc.php yopilgan
xmlrpc.php — eski masofaviy boshqaruv interfeysi. U parol tanlash hujumlarida ko'p ishlatiladi: bitta so'rov ichida ko'plab login urinishlarini yuborish mumkin. Agar uni ishlatadigan servis (masalan, mobil ilova yoki Jetpack) bo'lmasa, yoping.
Tekshirish:
curl -s -X POST https://sayt.uz/xmlrpc.php \
-d '<?xml version="1.0"?><methodCall><methodName>system.listMethods</methodName></methodCall>'
Agar javobda metodlar ro'yxati qaytsa, interfeys ochiq. nginx'da yopish:
location = /xmlrpc.php { deny all; }
Apache'da .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>
4. Admin paneldan fayl tahrirlash o'chirilgan
WordPress admin panelida mavzu va plagin fayllarini to'g'ridan-to'g'ri tahrirlash imkoniyati bor. Administrator akkaunti qo'lga kiritilsa, bu bir zumda serverda kod bajarishga aylanadi. wp-config.php ga qo'shing:
define('DISALLOW_FILE_EDIT', true);
Qattiqroq variant — DISALLOW_FILE_MODS: u admin paneldan plagin o'rnatish va yangilashni ham taqiqlaydi. Bu holatda yangilanishlar WP-CLI yoki deploy jarayoni orqali bajarilishi kerak — aks holda sayt yangilanmay qoladi.
define('DISALLOW_FILE_MODS', true);
5. uploads papkasida PHP bajarilmaydi
wp-content/uploads — foydalanuvchilar fayl yuklaydigan joy. Agar hujumchi u yerga PHP fayl joylashtira olsa va server uni bajarsa, bu to'liq nazorat demak. Tekshirish:
find wp-content/uploads -type f -iname '*.php*'
Natija bo'sh bo'lishi kerak. Keyin veb-server darajasida PHP bajarishni taqiqlang. nginx:
location ~* ^/wp-content/uploads/.*\.(php|phtml|phar)$ {
deny all;
}
Apache uchun wp-content/uploads/.htaccess:
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
Fayl yuklash bo'yicha batafsil: fayl yuklash zaifliklari.
6. Administrator akkauntlari tartibda
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
- Har bir administrator kimga tegishli ekanini biling. Tanimagan akkaunt — darhol tekshiriladi.
adminkabi taxmin qilinadigan login ishlatmang.- Kontent bilan ishlaydigan xodimlarga
editoryokiauthorroli yetarli — administrator emas. - Ishdan ketgan xodimlarning akkauntlarini o'chiring.
Foydalanuvchi nomlari ochiqlanishini ham tekshiring — ekspertiza buni alohida qayd etadi:
curl -s https://sayt.uz/wp-json/wp/v2/users | head -c 300
curl -sI 'https://sayt.uz/?author=1' | grep -i location
Agar loginlar ko'rinsa, mehmonlar uchun users endpoint'ini yoping (mavzuning functions.php yoki kichik must-use plagin orqali):
add_filter('rest_endpoints', function ($endpoints) {
if (!is_user_logged_in()) {
unset($endpoints['/wp/v2/users']);
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
}
return $endpoints;
});
7. Kirish himoyasi va 2FA
Administratorlar uchun ikki bosqichli autentifikatsiya (2FA) yoqilgan bo'lishi kerak — buning uchun ishonchli plaginlar mavjud. Bundan tashqari:
- Login urinishlari sonini cheklang (plagin yoki veb-server darajasida rate limiting).
- Kuchli parollar talab qiling.
wp-login.phpvawp-adminga kirishni iloji bo'lsa IP ro'yxati bilan cheklang.
nginx'da wp-login.php uchun oddiy rate limiting:
limit_req_zone $binary_remote_addr zone=wplogin:10m rate=5r/m;
location = /wp-login.php {
limit_req zone=wplogin burst=5 nodelay;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Login himoyasi haqida batafsil: login himoyasi.
8. wp-config.php va fayl huquqlari
wp-config.phpboshqa foydalanuvchilar o'qiy olmaydigan bo'lsin:chmod 640 wp-config.php(yoki PHP fayl egasi nomidan ishlasa,600).- Papkalar
755, fayllar644—777hech qayerda bo'lmasligi kerak:
find . -type d -perm -o+w
find . -type f -perm -o+w
- Debug rejimi production'da o'chiq:
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
define('FORCE_SSL_ADMIN', true);
- Kalitlar va salt'lar noyob bo'lsin. Shubha bo'lsa,
wp config shuffle-salts.
Debug rejimi haqida: debug rejim va ma'lumot ochiqlanishi.
9. Versiya va ortiqcha fayllar yashirilgan
readme.html, license.txt va sahifadagi <meta name="generator"> WordPress versiyasini oshkor qiladi. Ularni olib tashlang yoki yoping:
rm -f readme.html license.txt wp-config-sample.php
remove_action('wp_head', 'wp_generator');
Shuningdek, veb-ildizda .zip, .sql, .bak, .git kabi fayl va papkalar qolmaganini tekshiring:
find . -maxdepth 2 \( -name '*.zip' -o -name '*.sql' -o -name '*.bak' -o -name '.git' \)
Ochiq qolgan zaxira arxivi — butun sayt va baza bir faylda.
10. Zaxira nusxalar mavjud va tiklash sinovdan o'tgan
- Zaxira avtomatik va muntazam olinadi: fayllar va baza.
- Nusxa serverdan tashqarida saqlanadi — sayt buzilsa, zaxira ham buzilmasligi kerak.
- Zaxira arxivlari veb-ildizda emas. Ba'zi zaxira plaginlari arxivlarni
uploadsichida saqlaydi — ularga brauzer orqali kirish mumkinmi, tekshiring. - Tiklash kamida bir marta sinab ko'rilgan. Tiklab bo'lmaydigan zaxira — zaxira emas.
11. WAF yoqilgan
Web Application Firewall ma'lum hujum namunalarini (SQL injection, zaif plagin endpoint'lariga so'rovlar, skanerlar) saytga yetib bormasdan to'xtatadi. Variantlar:
- Server darajasida: ModSecurity va OWASP Core Rule Set.
- Tashqi proksi yoki CDN darajasidagi WAF.
- WordPress plagini darajasidagi firewall.
WAF yangilanishlarning o'rnini bosmaydi — u qo'shimcha qatlam. Lekin yangi zaiflik e'lon qilinib, tuzatish hali chiqmagan oraliqda u foydali.
12. Nazorat yig'indilari tekshirilgan
Yadro va plagin fayllari rasmiy versiyaga mos kelishini tekshiring:
wp core verify-checksums
wp plugin verify-checksums --all
Bu buyruqlar o'zgartirilgan yoki begona fayllarni ko'rsatadi. Natija toza bo'lishi kerak. Agar biror fayl mos kelmasa — buni jiddiy qabul qiling va sababini aniqlang. Ushbu tekshiruvni har yangilanishdan keyin va muntazam ravishda bajarish foydali.
Qo'shimcha sifatida HTTPS va xavfsizlik headerlarini sozlang: xavfsizlik headerlari: CSP va HSTS.
Qisqa checklist
- Yadro, plaginlar, mavzular va PHP — so'nggi versiyada.
- Faol bo'lmagan, tashlab qo'yilgan va "nulled" plaginlar olib tashlangan.
xmlrpc.phpyopilgan (agar kerak bo'lmasa).DISALLOW_FILE_EDITyoqilgan.uploadsichida PHP yo'q va bajarilishi taqiqlangan.- Administratorlar ro'yxati tekshirilgan, foydalanuvchi nomlari ochiqlanmaydi.
- Administratorlar uchun 2FA va login rate limiting yoqilgan.
wp-config.phphuquqlari cheklangan, debug o'chiq,777yo'q.readme.html, generator meta tegi, veb-ildizdagi arxiv va.gitolib tashlangan.- Zaxira serverdan tashqarida, tiklash sinovdan o'tgan.
- WAF yoqilgan.
wp core verify-checksumsvawp plugin verify-checksums --alltoza.
Xulosa
WordPress saytni ekspertizaga tayyorlash asosan intizom masalasi: yangilash, keraksizini olib tashlash, standart ochiq narsalarni yopish va natijani tekshirish. Bu 12 band ko'p vaqt olmaydi, lekin ekspertiza hisobotidagi eng ko'p uchraydigan topilmalarning katta qismini oldindan yopadi.
WordPress saytingiz bu ro'yxatga qanchalik mos kelishini aniqlamoqchimisiz? Skanerlash uchun ariza qoldiring — Claude AI agenti va mutaxassisimiz sayt va server sozlamalarini ko'rib chiqadi, topilgan teshiklarni yopishga va ekspertizaga tayyorlanishga yordam beramiz.


