Nima uchun sizga xmlrpc php kerak. Dasturlash musobaqalari

  • Xmlrpc mijozlari va serverlarini yaratishni qo'llab-quvvatlash
  • To'liq avtomatlashtirilgan yoki to'liq qo'lda, PHP qiymatlaridan xmlrpcgacha nozik kodlash va dekodlash
  • UTF8, Lotin-1 va ASCII belgilar kodlashlarini qo'llab-quvvatlash. php mbstring kengaytmasi yoqilgan bo'lsa, yanada ko'proq belgilar to'plami qo'llab-quvvatlanadi.
  • php cURL kengaytmasi bilan so'rovlar va javoblar, cookie-fayllar, proksi-serverlar, asosiy auth va https, ntlm auth va keepalives uchun http siqishni qo'llab-quvvatlash
  • Kiruvchi xmlrpc so'rovining parametr turlarini ixtiyoriy tekshirish
  • system.listMethods, system.methodHelp, system.multicall va system.getCapabilities usullarini qo'llab-quvvatlash
  • uchun qo'llab-quvvatlash va xmlrpc kengaytmalari
  • Mavjud PHP funktsiyasi yoki sinf usullarini veb-xizmatlar sifatida ro'yxatdan o'tkazish, phpdoc sharhlaridan qo'shimcha qiymatli ma'lumotlarni olish imkoniyati
  • Veb-ga asoslangan vizual tuzatuvchi kutubxonaga kiritilgan

Talablar

  • PHP 5.3.0 yoki undan keyingi versiyalari; 5.5 yoki undan keyingi versiyalar tavsiya etiladi
  • Agar siz masofaviy serverlar bilan aloqa qilish uchun SSL yoki HTTP 1.1 dan foydalanmoqchi bo'lsangiz, php "curl" kengaytmasi kerak bo'ladi.
  • php "mbstring" kengaytmasi ASCII, Lotin-1, UTF-8 dan boshqa belgilar to'plamida so'rovlar/javoblarni qabul qilishga ruxsat berish uchun kerak
  • php "xmlrpc" mahalliy kengaytmasi talab qilinmaydi, lekin u o'rnatilgan bo'lsa, ushbu kutubxonaning ishlashiga hech qanday xalaqit bermaydi.

Yuklab oling

Yangiliklar

  • 2017 yil 1 iyul
    Chiqarilgan lib versiyalari 4.2.0 va 3.1.0.
    Chiqarish eslatmalari Github-da mavjud
  • 2016 yil 20 yanvar
    Chiqarilgan lib versiyasi 4.0.0.
    Bu API birinchi marta katta o'zgarishlarni ko'radi, o'tmishni yo'qotadi va zamonaviy PHP ga o'tishni boshlaydi.
    Nom maydonlari kiritildi va agar UTF-8 ishlatilsa, standart belgilar to'plami; mbstring uchun qo'llab-quvvatlash qo'shildi va yana ko'p narsalar.
    O'zgarishlarning to'liq ro'yxati uchun Github-ga o'ting
  • 2015 yil 19 aprel
    Chiqarilgan lib versiyasi 3.0.1.
  • 2014 yil 15 iyun
    Chiqarilgan lib versiyasi 3.0.0.
  • 2013 yil 15 dekabr
    Loyiha GitHub-ga ko'chirildi

    Onlayn xmlrpc tuzatuvchisi

    Ushbu kutubxona ustiga qurilgan xmlrpc disk raskadrovka dasturi http://gggeek.altervista.org/sw/xmlrpc/debugger/ manzilida faol ishlaydi. Tuzatish vositasidan foydalanishingiz mumkin, masalan. SF demo serveriga so'rov yuboring yoki agar tarmoqda mavjud bo'lsa, shaxsiy xmlrpc serveringizni disk raskadrovka qiling.

    Rivojlanish

    TavsifHolati - 2009/07/26 yangilangan
    2-versiyadan beri qo'shilgan barcha xususiyatlar uchun hujjatlarni yangilangSekin-asta rivojlanmoqda...
    Xml xabarlarini formatlashni tanlash imkoniyatini qo'shingPHP mahalliy xmlrpc kengaytmasi qiladigan narsaga o'xshaydi
    PHP 5 bilan STRICT rejimida ishlaganda chiqarilgan ogohlantirishlarni tuzatingPHP 4 moslashuvidan voz kechib, 3.0 versiyasida allaqachon bajarilgan bo'lishi mumkin ...
    Istisnolardan foydalanish va xmlrpc xato javoblarini qaytarish uchun avtomatik PHP funksiyasini xmlrpc usuli oʻramiga kengaytiring.
    PHP funksiyalarini PHP uchun xmlrpc usullariga avtomatik aylantirish uchun avtomatik stub generatorini kengaytiring<= 5.0.2 buni qanday qilish haqida AMFPHP kodiga qarang.
    2.1 versiyasida ko'plab yaxshilanishlar
    Endi server PHP funktsiyalarini avtomatik ravishda ro'yxatdan o'tkazishi mumkin bo'lganligi sababli, bunga kamroq ehtiyoj bor ...
    Mbstring yoqilganda uni yaxshiroq qo'llab-quvvatlashQilish kerak, masalan. charset kodlash tezroq taxmin qilish
    "1-versiya" cookie fayllarini qo'llab-quvvatlashni yaxshilang
    Mahalliy xato kodlari o'rniga foydalanish imkoniyatini qo'shing
    PEAR mosligi: libning PEAR versiyasida turli nomlar bilan mavjud funktsiyalar uchun sinonimlarni qo'shing
    Xmlrpc kengaytmasi uchun qo'llab-quvvatlashni qo'shing
    Nosozliklarni tuzatuvchiga validator1 testlarining to‘liq to‘plamini ishga tushirish imkoniyatini qo‘shing
    Ta'sir qilingan xizmatlarni tavsiflash va system.methodSignature va system.describeMethods ga/dan tarjima qilish uchun WSDL-dan foydalanish mumkinligini tekshiring.Xmlrpc ni qat'iy aniqlash uchun XSD dan foydalanishda ba'zi muammolar mavjud. Relax NG - bu shubhasiz yaxshiroq alternativ, lekin uni WSDL fayli bilan birgalikda ishlatish uchun boshqa asboblar to'plamlarida kam qo'llab-quvvatlanadi ...
    http yo'naltirishni qo'llab-quvvatlash (302)
    Sf.net saytiga kichik ma'lumotlar bazasini qo'shing, shunda biz xmlrpc.com saytida mavjud bo'lgan kiruvchi foydalanuvchilarni qayd qiluvchi validator sahifasini amalga oshirishimiz mumkin.
    Benchmark to'plamiga natijalarni sf.net saytiga yuklash imkoniyatini qo'shing
    Libning eng ko'p ishlatiladigan funktsiyalarini tezlashtiradigan PHP kengaytmasini yozingMisol uchun, adodb buni qanday qilganiga qarang
    Xml ni qo'lda tahlil qilish o'rniga simplexml va relaxng yordamida tezlik/xotira yutuqlarini sinab ko'ring

    Xavfsizlik

    Uchinchi xavfsizlik buzilishi: 2005 yil avgust

    Bu quyidagi ikkinchi xavfsizlik buzilishiga keyingi va faol javob edi. Eval() dan barcha foydalanish o'chirildi, chunki u hali ham potentsial ekspluatatsiya edi.

    Kutubxona dastlab yozilganda, o'sha paytda mavjud bo'lgan PHP versiyalari call_user_func() va boshqalarni o'z ichiga olmagan. Shunday qilib, xml tahlilchisi tomonidan chaqirilgan ikkita funktsiyada eval() dan foydalanish ushbu cheklovlar doirasida yozilgan. Ushbu foydalanish tufayli server klassi ham eval() dan foydalandi, chunki u bir xil funktsiyalardan foydalangan holda xmlni tahlil qilishi kerak edi.

    Ushbu ishlov beruvchi funktsiyalari va asl xabar mazmunini saqlash uchun foydalaniladigan massiv baholash uchun PHP kodini yaratish o'rniga PHP qiymatlarini yaratish uchun qayta yozilgan. Bu kodni bajarish uchun har qanday potentsialni olib tashlashi kerak.

    Ikkinchi xavfsizlik buzilishi: 2005 yil iyul

    2005 yil 27 iyunda GulfTech Security Research kompaniyasi xodimi Jeyms Bercegay tomonidan aniqlangan xavfsizlik zaifligi katta shov-shuvga sabab bo'ldi. U Salshdot-ning birinchi sahifasiga chiqdi, Netcraft, LWN va boshqa ko'plab saytlarda tilga olingan.

    Internetda ekspluatatsiya kodini yaratish bo'yicha batafsil yo'riqnomalar e'lon qilindi va ko'plab veb-xosting ma'murlari eng yaxshi mudofaa rejasi nima va haqiqiy xavflar nima ekanligi haqida hayron qolishadi. Mana bir nechta javoblar.

    Muammo doirasi

    • xato PEAR :: XMLRPC va PHPXMLRMPC deb nomlanuvchi ikkita kutubxonaga ta'sir qiladi.
      Bu php-da o'rnatilgan va kompilyatsiya vaqtida "--with-xmlrpc" opsiyasi bilan yoqilgan xmlrpc dasturiga ta'sir EMAS (Unix-da, odatda Windows-da u php.ini-dagi tegishli qatorni o'zgartirish orqali yoqiladi/o'chiriladi) )
    • xato (masofaviy hostlar tomonidan kiritilgan PHP-kodning bajarilishi) faqat faylda joylashgan xmlrpc.inc phpxmlrpc tarqatilishida va RPC.php PEAR taqsimotida
    • PEAR::XMLRPC va PHPXMLRMPC ham muammoni hal qiladigan kutubxonaning yangilangan versiyalarini chiqardi.
    • ikkala kutubxona ham ko'p sonli PHP ilovalarida ishlatilgan (yuqoridagi to'liq bo'lmagan ro'yxatga qarang).
      Butun lib asosan ikkita juda oddiy fayldan iborat bo'lganligi sababli, har kim ularni o'z didiga/ehtiyojlariga ko'ra tuzatishga va o'z ilovasini tarqatishda ularni to'plashga intiladi.
      Ko'pgina yuqori darajadagi loyihalar o'z ilovalarining yangi versiyalarini chiqarishda juda tez bo'ldi, ammo har bir foydalanuvchi o'z tizimini yangilash uchun ancha ko'proq vaqt talab etadi.
      Aytish kerakki, ko'plab ilovalar yaqin vaqtgacha phpxmlrpc kutubxonasining juda eskirgan versiyalari bilan jo'natilgan; Birinchi in'ektsiya xatosi 2001 yilda tuzatilgan edi Hech kim e'tibor bermasdan (...)

      Bu, afsuski, tizim boshqaruvchilari uchun muammoning oson davosini topishni ancha qiyinlashtiradi: umumiy hosting serverlarida yuqorida aytib o'tilgan fayllarni turli kataloglarda va turli versiyalarda topish imkoniyati katta.

    Zaiflik qanday paydo bo'ladi

    • Xatoni ishga tushirish uchun tajovuzkor xmlrpcval ob'ektini yaratish jarayonida baholangan ba'zi maxsus yaratilgan xmlga ega bo'lishi kerak. Xmlrpcval ob'ektlari server skripti xmlrpc so'rovlarini dekodlashda yoki ba'zi PHP skriptlari xmlrpc mijozi sifatida ishlaganda va server tomonidan yuborilgan javobni dekodlashda yaratiladi.
      Server skripti ilovaga xos boʻlib, u koʻpincha server.php deb nomlanadi (lekin har qanday loyiha yoki foydalanuvchi tanlagan variant boʻlishi mumkin) va u xmlrpc.inc va xmlrpcs.inc fayllarini (armut versiyasi uchun server) oʻz ichiga olishi kerak. .php - xmlrpcs.inc ekvivalenti).
    • Faqatgina xmlrpc.inc va xmlrpcs.inc ni PHP skriptlariga kiritish (afaik...) to'liq xavfsiz, shuningdek ularni to'g'ridan-to'g'ri http so'rovlari orqali chaqirish mumkin, chunki bu ikkita faylda faqat funktsiyalar, o'zgaruvchilar va sinflarni aniqlash amalga oshiriladi, ya'ni. zudlik bilan kod bajarilmaydi.
    • To'liq phpxmlrpc lib bilan tarqatilgan server.php va müzakirə.php fayllari aslida jonli xmlrpc serverini amalga oshiradi, shuning uchun siz ularga kirishni bloklash yoki ishlab chiqarish serverlarida o'rnatilganligini topsangiz, ularni o'chirib tashlashingiz mumkin. Men ikkinchi PHP ilovasi bilan bog'liq qandaydir hujumni taxmin qilishim mumkin - php-faylni qo'shish buzilishidan aziyat chekib, ularni tortib olish + lib ma'lum xatolikdan foydalanish)

    Himoya vositalari

    • Veb-server jarayoniga imkon qadar kamroq tizim imtiyozlarini bering. Unix-da bu odatda Apache-ni hech kim foydalanuvchi sifatida va/yoki jailrooted/chrooted muhitda ishga tushirishni o'z ichiga oladi. PHP dvigateli veb-server bilan bir xil foydalanuvchi ostida ishlaganligi sababli, bu birinchi himoya chizig'i: tajovuzkor tomonidan kiritilgan har qanday PHP kodi serverda eng kam imtiyozli foydalanuvchi sifatida ishlaydi va u keltirishi mumkin bo'lgan barcha zararlar bilan cheklanadi. php ilovasining o'zini buzish
    • PHP ni xavfsiz rejimda ishga tushiring. Agar siz ommaviy xost bo'lsangiz va buni qilmasangiz, serveringiz baribir ildiz otgan bo'lishi mumkin. Bu PHP skriptlarini siz xavfli deb hisoblagan har qanday funksiyadan foydalanishni oldini oladi, masalan, system() yoki eval()
    • Qattiq blok: barcha mavjud phpxmlrpc fayllarini (xmlrpc.inc va xmlrpcs.inc) toping va ularni tizim bo'ylab o'chiring (chmod 0).
      Bu, albatta, ba'zi foydalanuvchi ilovalarining ishlashiga to'sqinlik qilishi mumkin, shuning uchun buni amalga oshirish vaqtida foydalanuvchilaringizni xabardor qilishingiz kerak.
    • Yumshoq blok: mavjud phpxmlrpc fayllarning barcha nusxalarini (xmlrpc.inc va xmlrpcs.inc) 1.1.1 versiyasidan kelganlar bilan almashtiring.
      Afsuski, bu usul barcha ilovalarning ishlashini 100% kafolatlamaydi. lib ob'yektlarining ba'zi ichki qismlari 0.9 versiyasidan 1.0 dan 1.1 gacha (masalan, xmlrpcresp ob'ektida saqlangan http sarlavhalarining ko'rinishi) o'zgartirildi va agar siz serverlaringizda o'rnatgan kod ularni kichik sinflarga aylantirsa, u muammoga duch kelishi mumkin. Sim orqali yuborilgan xml libning ba'zi eski versiyalariga nisbatan ham o'zgargan (xususan: 1.0.99.2 versiyasi ASCII diapazonidan tashqarida html ob'ektlari sifatida noto'g'ri kodlangan belgilar, hozir esa ular xml belgilar majmuasi ob'ektlari sifatida kodlangan). Bir nechta yangi xato javob kodlari ham qo'shildi. Aytgancha, siz ushbu skriptni ishga tushirishda 95% xavfsiz bo'lishingiz kerak va foydalanuvchilar nimadir buzilgan deb baqirishni boshlashlarini kutib o'tirishingiz kerak ...
    • PHP PEAR kutubxonasi bir qatorli buyruq bilan yangilanishi mumkin, shuning uchun bu juda katta muammo emas:
      armut XML_RPC-ni yangilang va uning yangilanganligini aniqlash uchun (1.3.1 yoki undan keyingisi yaxshi, hozirda eng oxirgisi 1.3.2):
      nok ro'yxati | grep RPC

    Ba'zi qo'shimcha fikrlar

    Xmlrpcs.inc fayli ham foydalanuvchi tajribasini yaxshilash uchun 1.1.1 versiyasida tuzatilgan. Batafsil ma'lumot: serverga maxsus ishlab chiqilgan noto'g'ri xml ni yuborish PHP skripti tegishli xml javobini qaytarish o'rniga PHP xatosini chiqarishiga olib keladi.
    Ba'zilarning fikriga ko'ra, bu aslida "yo'lni ochish xavfsizligini buzish" ga olib keladi (ya'ni, ko'rsatiladigan PHP xato xabari odatda fayl tizimi yo'llari haqida nozik ma'lumotlarni o'z ichiga oladi), lekin tizim boshqaruvchisi ishlab chiqarish serverlarida ishlayotgan bo'lsa, har qanday PHP skripti bir xil xavfsizlik muammosiga duch keladi. ini direktivasi display_errors=On.
    Bundan tashqari, men xmlrpc.inc-da kutilmagan parametrga ega funktsiyani chaqirish PHP ogohlantirishi yoki xatosini keltirib chiqaradigan ko'p joylar borligini bilaman va men har bir funktsiya uchun qat'iy parametr tekshiruvini tez orada amalga oshirishni rejalashtirmayman - agar siz Buning uchun maqsad qiling, imho, siz birinchi navbatda Java-da kodlashingiz mumkin.

    Bu dunyoning oxirimi?

    Umid qilamanki, yo'q.
    Buning sababi shundaki, u erda kodni kiritish ekspluatatsiyasidan aziyat chekadigan o'nlab PHP ilovalari mavjud. Shunchaki e'lonlar taxtasining xavfsizlik trekini ko'rib chiqing... va shunga qaramay, ko'pchilik hali ham PHPni veb-ishlab chiqish uchun yaxshi tanlov deb hisoblaydi.
    Esingizda bo'lsin: xavfsizlik - bu erishish mumkin bo'lgan holat emas, balki jarayon.

    Birinchi xavfsizlik buzilishi: 2001 yil sentyabr

    Men bu maslahatni Den Libbidan oldim. Uning ruxsati bilan bu erda ko'paytiriladi. Esda tutingki, bu ekspluatatsiya PHP uchun XML-RPC ning 1.01 va undan yuqori versiyalarida tuzatilgan. -- Edd Dumbill, 2001-yil 24-sentabr =============== PHP xavfsizlik teshigi: potentsial XML-RPC ekspluatatsiyasi ================= = ======================== Annotatsiya: Useful Inc.ning php xmlrpc kutubxonasining so'nggi versiyasidan, 1.0 versiyasidan foydalanib, tajovuzkor xml-ni shunday tuzingki, xml-rpc kutubxonasini aldab, veb-serverda PHP-kodni bajara oldim.Men o'zboshimchalik bilan PHP-kodni bajara oldim va PHP-ning xavfsiz rejimi o'chirilgan bo'lsa, tizim buyruqlari. Buzg'unchi undan osongina viruslarni ishga tushirish uchun shlyuz sifatida foydalanishi mumkin. Tafsilotlar: Men xmlrpc distributiviga kiritilgan server.php misol skriptini o'zgartirish va keyin uni tarqatishning bir qismi bo'lgan client.php skripti orqali chaqirish orqali muammoni ko'rsatdim. Men standart server kodini chetlab o‘tdim va mijozga javoblarni qaytardim. Mijozni o‘zboshimchalik bilan PHP kodini ishga tushirishga majbur qildim. Keyin server.php namunasini asl holatiga qaytardim va o‘zgartirilgan kodni yuborish uchun telnetdan foydalandim. Men, shuningdek, biroz boshqacha sintaksisni talab qilsa-da, serverda kodni bajarishga muvaffaq bo'ldim. Hujum php ning eval() funksiyasidan foydalanishga qaratilgan. Men xml-rpc kutubxonasi o'zining ma'lumotlar tuzilmalarini xml kiritishdan yaratish uchun eval dan foydalanishini bilgani uchun, bu faqat kirish xml ni shunday tuzilish masalasi edi: a) baholashga o'tishdan oldin qochib ketmaydi b) qiladi. php sintaksisi xatosini yaratmaydi Odatda, barcha raqamli bo'lmagan ma'lumotlar baholashga o'tishdan oldin kutubxona tomonidan qochib ketadi. Biroq, agar siz yuborsangiz a teg, keyin kutilmagan teg, masalan , qochish kodini chetlab o'tadi va uning o'rniga "xom" ma'lumotlar baholanadi. Mijozdan foydalanish: Bu erda odatiy xml-rpc javobi: Salom Dunyo Bunday javob baholanganda, u quyidagicha ko'rinadi: new xmlrpcval("salom dunyo", "string") Mana xml-rpc javobi aks-sado uchun PHP kodini bajaradi.

    Salom Dunyo

    "mijoz tomonida: ", "string"); echo "

    Salom Dunyo

    "; \$waste = massiv("
    Bunday holda, baholanadigan satr: new xmlrpcval("", "string"); echo "

    Salom Dunyo

    "; $waste = array("", "string") "string"); va \$waste o'rtasidagi hamma narsani deyarli istalgan uzunlikdagi o'zboshimchalik kodlari bilan almashtirish mumkin. Nihoyat, bu erda tarkibni chop etadigan kod mavjud. joriy katalogdan: ", "string"); echo "

    "; echo `ls -al`; echo "

    "; chiqish; \$waste = massiv("
    Serverni ekspluatatsiya qilish: Serverdan foydalanish mijoz bilan deyarli bir xil, faqat server boshqa baholash buyrug'idan foydalanmoqda va shuning uchun PHP sintaksisi xatolarining oldini olish uchun u biroz boshqacha boshlash va tugatish sintaksisini talab qiladi. Mana yuqoridagi kod bilan bir xil, lekin u serverga qarshi ishlaydi. system.listMethods ", "string")); echo "

    Agar siz katalog ro'yxatini ko'rsangiz, men xml-rpc orqali PHP va tizim kodini bajardim.

    "; echo "endi men ls -al:\n yordamida kataloglar ro'yxatini tuzishga harakat qilaman "; echo `ls -al`; echo ""; echo "Men osongina rm -rf ni chaqirgan bo'lardim yoki diskka dastur yozib, uni ishga tushirgan bo'lardim (masalan, virus) yoki ba'zi fayllarni o'qiyman. Kuningiz xayrli o'tsin.

    "; chiqish; $waste = massiv(massiv("
    Muammo maydoni: xmlrpc.inc da xmlrpc_cd() nomli funksiya mavjud bo'lib, u xml tahlilchisi tomonidan belgilar ma'lumotlarini qayta ishlash uchun chaqiriladi. funksiya xmlrpc_cd($parser, $data) ( global $_xh, $xmlrpc_backslash, $xmlrpc_twoslash; //agar (ereg("^[\n\r \t]+$", $data)) qaytarish; // chop " qo'shish [$(ma'lumotlar)]\n"; if ($_xh[$parser]["lv"]==1) ( $_xh[$parser]["qt"]=1; $_xh[$parser][ "lv"]=2; ) if ($_xh[$parser]["qt"]) ( // $_xh[$parser]["ac"].=str_replace("\$", "\\ $", str_replace(""", "\"", str_replace(chr(92),$xmlrpc_backslash, $data))); ) else $_xh[$parser]["ac"].=$data; ) Bu ma'lumotlarning qochib ketmasdan qo'shilishiga sabab bo'ladigan oxirgi narsa. Bunga ega bo'lish juda xavflidir. Bu boshqa raqamli ma'lumotlar uchun mo'ljallanganga o'xshaydi va qochish va o'chirishni yoqadigan "qt" (iqtibos) o'zgaruvchisini o'rnatish va o'chirish uchun katta kuch sarflanadi. Biroq, nima uchun raqamli ma'lumotlardan xuddi shunday qochish va if/else ni olib tashlamaslik kerakligi darhol tushunarli emas, shuning uchun bu turdagi ekspluatatsiya uchun nol imkoniyat mavjud.

Shanba kuni tushdan boshlab, 25 ga yaqin Wordpress saytlari joylashgan serverim jiddiy sekinlashuvni boshdan kechira boshladi. Oldingi hujumlardan ( , ) e'tiborga olinmasdan omon qolishga muvaffaq bo'lganim uchun, nima bo'layotganini darhol tushunmadim.

Men buni tushunganimda, parollar qo'pol ravishda majburlanganligi va XMLRPC-ga ko'plab so'rovlar bo'lganligi ma'lum bo'ldi.

Natijada, darhol bo'lmasa-da, barchasini kesib tashlashga muvaffaq bo'ldik. Buni oldini olish bo'yicha uchta oddiy hiyla.

Bu usullar, ehtimol, hammaga ma'lum, lekin men tavsiflarda topa olmagan bir nechta xatolarga yo'l qo'ydim - ehtimol bu kimningdir vaqtini tejaydi.

1. Qidiruvni to'xtating, Limit Login Attempts plaginini o'rnating - uni o'rnating, chunki boshqa himoyalar serverni sezilarli darajada sekinlashtiradi, masalan, Login Security Solution plaginidan foydalanganda server yarim soatdan keyin o'lib qoldi, plagin ma'lumotlar bazasini og'ir yuklaydi .

Sozlamalarda "Proksi uchun" katagiga belgi qo'yganingizga ishonch hosil qiling - aks holda u sizning serveringiz IP-ni hamma uchun aniqlaydi va avtomatik ravishda hammani bloklaydi.
YANGILASH, rahmat, tafsilotlar quyida izohlarda keltirilgan - “To'g'ridan-to'g'ri ulanish” yoqilganda, ta'rif ishlamasagina “Proksi uchun” katagiga belgi qo'ying.

2. XML-RPC-ni o'chirib qo'yish - XML-RPC plaginini o'chirish (faollashtirish oson va hammasi).

3. Wp-login.php ni yoping - agar siz IP orqali saytga kirsangiz, plagin ishlamaydi va tanlovchilar saytni buzishda davom etadilar. Buning oldini olish uchun .htaccess ga qo'shing:

Rad etishga buyurtma bering, hammadan rad etishga ruxsat bering

Biz wp-login faylini nusxalaymiz, uni har qanday g'alati nomga o'zgartiramiz, masalan, poletnormalny.php va fayl ichida barcha wp-login.php yozuvlarini poletnormalny.php ga o'zgartirish uchun avtomatik tuzatishdan foydalaning.
Hammasi shu, endi administrator paneliga faqat faylingiz orqali kirishingiz mumkin.

Ushbu 3 oddiy qadamdan so'ng saytlar yana ucha boshladi va tinchlik keldi.

Xo'sh, birdan qiziq

Variantlardan biri sizga hujum qilinayotganini ko'rishdir. Buni nginx jurnallarida ko'rish mumkin (masalan, Debian /var/log/nginx access.log faylining yo'li bu erda).

Shanba kuni tushdan boshlab, 25 ga yaqin Wordpress saytlari joylashgan serverim jiddiy sekinlashuvni boshdan kechira boshladi. Oldingi hujumlardan (1-hujum - roppa-rosa bir yil oldin, 2-hujum - mart oyida) e'tiborga olinmasdan omon qolishga muvaffaq bo'lganim uchun, men nima bo'layotganini darhol tushunmadim.

Men buni tushunganimda, parollar qo'pol ravishda majburlanganligi va XMLRPC-ga ko'plab so'rovlar bo'lganligi ma'lum bo'ldi.

Natijada, darhol bo'lmasa-da, barchasini kesib tashlashga muvaffaq bo'ldik. Buni oldini olish bo'yicha uchta oddiy hiyla.

Bu usullar, ehtimol, hammaga ma'lum, lekin men tavsiflarda topa olmagan bir nechta xatolarga yo'l qo'ydim - ehtimol bu kimningdir vaqtini tejaydi.

1. Qidiruvni to'xtating, Limit Login Attempts plaginini o'rnating - uni o'rnating, chunki boshqa himoyalar serverni sezilarli darajada sekinlashtiradi, masalan, Login Security Solution plaginidan foydalanganda server yarim soatdan keyin o'lib qoldi, plagin ma'lumotlar bazasini og'ir yuklaydi .

Sozlamalarda "Proksi uchun" katagiga belgi qo'yganingizga ishonch hosil qiling - aks holda u sizning serveringiz IP-ni hamma uchun aniqlaydi va avtomatik ravishda hammani bloklaydi.
YANGILISh, DarkByte tufayli, izohlarda quyidagi tafsilotlar - “To'g'ridan-to'g'ri ulanish” yoqilganda, aniqlash ishlamasagina “Proksi uchun” katagiga belgi qo'ying.

2. XML-RPC-ni o'chirib qo'yish - XML-RPC plaginini o'chirish (faollashtirish oson va hammasi).

3. Wp-login.php ni yoping - agar siz IP orqali saytga kirsangiz, plagin ishlamaydi va tanlovchilar saytni buzishda davom etadilar. Buning oldini olish uchun .htaccess ga qo'shing:

Rad etishga buyurtma bering, hammadan rad etishga ruxsat bering

Biz wp-login faylini nusxalaymiz, uni har qanday g'alati nomga o'zgartiramiz, masalan, poletnormalny.php va fayl ichida barcha wp-login.php yozuvlarini poletnormalny.php ga o'zgartirish uchun avtomatik tuzatishdan foydalaning.
Hammasi shu, endi administrator paneliga faqat faylingiz orqali kirishingiz mumkin.

Ushbu 3 oddiy qadamdan so'ng saytlar yana ucha boshladi va tinchlik keldi.

Xo'sh, birdan qiziq

Variantlardan biri sizga hujum qilinayotganini ko'rishdir. Buni nginx jurnallarida ko'rish mumkin (masalan, Debian /var/log/nginx access.log faylining yo'li bu erda).

Bir necha kun oldin men hostingdagi saytlarimdagi yuk sezilarli darajada oshganini payqadim. Agar odatda 100-120 "to'tiqush" (CP) atrofida bo'lsa, so'nggi bir necha kun ichida u 400-500 CP gacha ko'tarildi. Bunda yaxshi narsa yo'q, chunki hoster qimmatroq tarifga o'tishi yoki hatto saytlarga kirishni butunlay yopishi mumkin, shuning uchun men uni ko'rib chiqishni boshladim.

Lekin men XML-RPC funksiyasini saqlab qoladigan usulni tanladim: Disable XML-RPC Pingback plaginini o'rnatish. U faqat pingback.ping va pingback.extensions.getPingbacks "xavfli" usullarni olib tashlaydi va XML-RPC funksiyasini qoldiradi. O'rnatilgandan so'ng, plaginni faqat faollashtirish kerak - boshqa konfiguratsiya talab qilinmaydi.

Yo'lda men barcha tajovuzkorlarning IP-larini saytlarimning .htaccess fayliga kirishini bloklash uchun kiritdim. Men faqat faylning oxiriga qo'shdim:

5.196.5.116 dan buyrugʻiga ruxsat bering, ruxsat bermang.

Hammasi shu, endi biz xmlrpc.php yordamida blogni keyingi hujumlardan ishonchli himoya qildik. Bizning saytlarimiz so'rovlar bilan xostingni yuklashni, shuningdek, uchinchi tomon saytlariga DDoS hujumlarini to'xtatdi.


Uning posti, shuningdek, quyida ko'rsatilgandek, brauzer autentifikatsiyasini qanday amalga oshirishni ko'rsatadi:
$request = xmlrpc_encode_request ("methodName" , massiv("methodParam" ));
$auth = base64_encode ($username . ":" . $parol );
$header = (versiya_qiyoslash(phpversion(), "5.2.8"))
? massiv("Tarkib turi: matn/xml", "Avtorizatsiya: Basic $auth ")
: "Kontent turi: matn/xml\r\nAvtorizatsiya: Asosiy$auth "; //
$context = stream_context_create (massiv("http" => massiv(
"method" => "POST" ,
"header" => $header,
"content" => $so'rov
)));
$webservice = "http://www.example.com/rpc";
$file = file_get_contents($webservice, false, $kontekst);
$response = xmlrpc_decode ($file);
agar (xmlrpc_is_fault($response)) (
return "xmlrpc: $response [ faultString ] ($response [ faultCode ] )" ;
) boshqa (
$response ni qaytarish;
}
?>
1 - MUHARRIRIGA Izoh: BU "SandersWang dt php at gmail dot com" dan tuzatish.

16 yil oldin

Ikkilik satrlar (xmlrpc_set_type bilan o'rnatiladi) a ichiga kiradi ...Siz kutgandek blokirovka qiling. Lekin har 80-belgidan keyin bu funksiya Unicode yangi qatori boʻlgan XML obʼyektini “ “ qoʻyadi, goʻyo satrlarni oʻrashga olib keladi va bu ahmoqona.

Garchi bu ahmoqona bo'lsa ham, bu ba'zi XML-RPC serverlari uchun haqiqiy muammolarni keltirib chiqaradi, masalan, http://jakarta.apache.org/xmlrpc/ (nee Helma). O'sha ob'ektlarni shunga o'xshash narsalar bilan olib tashlash

$req = preg_replace("/ /", "", xmlrpc_encode_request("my.method", $args));

muammo atrofida ishlaydi.

11 yil oldin

Shuni ta'kidlash kerakki, kodlash hech narsani kodlamaydi, faqat XML sarlavhasiga nima kirganini belgilang.

Ushbu funktsiyadan foydalanganda, uni apache xml-rpc servletiga yuborish va MySQL ma'lumotlar bazasida saqlashda ikki tomonlama kodlangan UTF satrlarini ma'lumotlar bazasiga saqlash bilan bog'liq muammolarga duch keldik. Bu "qochish" ni faqat "belgilash" ga va "kodlash" ni "UTF-8" ga o'rnatish orqali hal qilindi (xmlrpc_decode da "utf-8" ni o'rnatishni unutmang).

Ko'rinishidan, UTF-8 kodlangan satrlari ob'ektlar sifatida belgilar o'rniga baytlari bilan qochib ketadi.

9 yil oldin

Hech qachon xmlrpc bilan quyidagi kabi massivni uzatishga harakat qilganmisiz?
$var1=massiv(7=>14,9=>18);

Chiqish massivi butunlay boshqacha ko'rinadi! Bu shunday ko'rinadi:
$var2=massiv(14,18);

Men topgan yagona yechim indeksga bo'sh joy qo'yishdir:
$var3=massiv(" 7"=>14," 9"=>18);

Ushbu usuldan foydalanib, siz to'g'ri natijaga erishasiz. ($var1)

16 yil oldin

Bu funksiyadan XML-RPC mijozi XML-RPC so'rovi uchun XML foydali yukini yaratish uchun foydalanishi kerak;

$params = "system.methodSignature" ;
$metod = "system.methodHelp" ;
$request = xmlrpc_encode_request ($metod, $params);
echo ($ so'rov);
?>

Ishlab chiqaradi;



system.methodHelp

system.methodIzo



Ikkinchi argument o'zgaruvchining turini taniydi va to'g'ri XML-RPC strukturasini yaratadi. Batafsil ma'lumot uchun xmlrpc_encode() ga qarang.

12 yil oldin

Haddan tashqari yuk funksiyasiga ega oddiy OO mijozi:

php usuli test_helloworld xmlrpc usuli test.helloworldga tarjima qilingan.

sinf RpcClient(

xususiy $_methods;
shaxsiy $_kontekst;
shaxsiy $_url;

Funktsiya __construct ($url, $user, $passwd) (
$auth = base64_encode(sprintf("%s:%s", $user,$passwd));
$this->_context = stream_context_create(massiv(
"http" => massiv(
"metod" => "POST",
"header" => "Tarkib turi: text/xml\r\n".
"Avtorizatsiya: Asosiy $auth",

)
));
$this->_url = $url;

$this->registerMethod("Test_HelloWorld");

Funktsiya __call($methodName, $params) (
agar (massiv_kalit_mavjud($methodName,$this->_methods)) (
// appelle la fonction RPC-da
$m = str_replace("_", ".", $methodName);
$r = xmlrpc_encode_request($m, $params,array("verbosity"=>"faqat yangi qatorlar"));
$c = $this->_kontekst;
stream_context_set_option($c,"http","kontent",$r);
$f = file_get_contents($this->_url,false,$c);
$resp = xmlrpc_decode($f);
$respni qaytarish;
) boshqa (
// on appelle la fonction de l"objet
call_user_method_array($methodName, $this,$params);
}
}

Xususiy funktsiya registrMethod ($metod) (
$this->_methods[$method] = true;
}