Ochrana PHP skriptov pred analýzou a modifikáciou. Nezabudnite zmeniť svoje tajné kľúče súborov cookie

Všetky softvérové ​​produkty na ochranu PHP skriptov sú rozdelené do dvoch kategórií: tie, ktoré vyžadujú inštaláciu dodatočných modulov na server a ktoré pracujú s bežnou konfiguráciou webových serverov. Prvé sú z hľadiska bezpečnosti spoľahlivejšie, pretože prekladajú PHP skripty z textovej podoby do špeciálneho binárneho kódu, ale vyžadujú prístup k serveru s právami správcu. Posledné menované môžu fungovať takmer na všetkých hostingoch s podporou PHP, vrátane bezplatných, no nie je veľmi ťažké ich hacknúť. Zdrojový kód, ktorý nepoužíva šifrovanie alebo kompresiu, možno rozlíšiť do samostatnej podskupiny.

Ochrana na úrovni servera:

Zend Encoder / Zend SafeGuard Suite je najpopulárnejšia komerčná ochrana, moduly pre podporu Zend sú zvyčajne nainštalované na všetkých platených hostingoch. Zend poskytuje doménové a ip skriptovanie, skúšobné načasovanie skriptov a výkonné zahmlievanie. Podporované sú všetky operačné systémy. Vo verejnej doméne existuje niekoľko možností pre pomocné programy na odstraňovanie Zend, všetky sú upravené PHP verzie 4 a 5. Staršie verzie Zend sa odstraňujú bez problémov, v druhej sú problémy kvôli zahmlievaniu zdrojového kódu.

Nová, aktívne sa rozvíjajúca komerčná ochrana. Poskytuje interakciu s chránenými skriptami na úrovni vlastných API, podporované sú operačné systémy Windows a Linux. Vzhľadom na nízku rozšírenosť sa neinštaluje na bežný virtuálny hosting, ale používatelia si ho môžu nainštalovať na dedikované servery. Neexistujú žiadne verejné dekodéry.

Komerčná ochrana sa prakticky nenachádza, nie je nainštalovaná na virtuálnom hostingu. Umožňuje nastaviť skúšobné obdobie pre skripty na kontrolu dátumu na externých časových serveroch, naviazanie chránených skriptov na servery, ip-adresu, MAC-adresu sieťovej karty a tieto údaje sa použijú na dešifrovanie. Podporované sú všetky operačné systémy. Neexistujú žiadne verejné dekodéry.

phpSHIELD. SourceGuardian pre prototyp PHP. Po zlúčení dvoch vývojárov sa prestal vyvíjať ako samostatný produkt. Hlavná funkcionalita je rovnaká, neexistujú žiadne verejné dekodéry.

ionCube PHP Encoder. Druhý najpopulárnejší komerčný produkt na ochranu skriptov. Po objavení sa verejných dekodérov pre Zend sa stále viac používa a inštaluje na zdieľaný hosting. Umožňuje šifrovať nielen skripty, ale aj šablóny, xml dokumenty, obrázky, binárne súbory. Viaže chránené súbory na servery, existuje výkonný obfuskátor, sú podporované všetky operačné systémy. Neexistujú žiadne verejné dekodéry, ale v niektorých prípadoch ich môže deZender odstrániť.

Kódovač PHTML. Vzácny komerčný bezpečnostný systém, ktorý poskytuje bežné funkcie pre produkty tohto typu, funguje pod všetkými operačnými systémami. Za osobitný poplatok si môžete zakúpiť pôvodné bezpečnostné kódy a upraviť ich tak, aby vyhovovali vašim potrebám. Neexistujú žiadne verejné dekodéry.

DWebEncoder. Exotická ochrana pre Windows určená na vytváranie skriptovaných prezentácií a katalógov na CD. V nainštalovanej podobe je to niečo ako nezávislý webový server, na ktorom sa spúšťajú zakódované php skripty. Neexistujú žiadne verejné dekodéry.

Kompaktný PHP. Obhajoba je skôr teoretická ako praktická. Bol vyvinutý na jednom z domácich fór, no vyzerá to tak, že nad rámec autorských vydaní nepostúpil. Neexistujú však žiadne dekodéry ani chránené skripty.

Open source doplnok k starým php akcelerátorom Turck MMCache a eAccelerator. Konvertuje skripty na bajtový kód, aby sa zvýšila rýchlosť ich vykonávania. Existujú verzie modulov pre Windows a Linux. Neexistujú žiadne verejné dekodéry, ale snáď nejakým spôsobom pomôže pri štúdiu otvorený zdrojový kód projektu.

Ochrana na úrovni zdroja:

PHP LockIt! ... Populárna komerčná ochrana, je veľmi bežná, hlavne v skriptoch od zahraničných vývojárov. Umožňuje nastaviť skúšobnú dobu prevádzky skriptov, viazania na domény a ip-adresy, komprimuje skripty pomocou štandardných php nástrojov (gzinflate). Jediná zložitá časť je dobrý obfuskátor. Rôzne verzie ochrany sa líšia iba úpravou rozbaľovacieho modulu. Ľahko odnímateľný v manuálnom aj automatickom režime. Bez obfuskátora sa odstraňuje presne do zdrojového kódu, s obfuskátorom si vyžaduje dodatočné spracovanie.

CNCrypto. Vo verejnej doméne nie je ani demo verzia, analýza bola vykonaná pomocou chránených skriptov. Výklopný modul nie je náročný na rozbalenie, ochrana je založená len na dobrom zahmlievaní zdrojového kódu.

PHPCipher. Ochrana je online služba. Archív s vašimi skriptami sa nahrá na stránku a už chránený sa stiahne späť. Platená licencia vám umožňuje podpisovať chránené skripty vašimi údajmi a používať ich na komerčné účely. Bezplatná licencia umožňuje iba osobné použitie. Samotná ochrana je php-modul chránený Zendom, ktorý sa pripája na chránené skripty.Po deZende sa ochranný modul a získavanie všetkých potrebných konštánt z neho úplne odstráni do zdrojového kódu. Neexistuje žiadna funkcia obfuskátora.

ByteRun Protector pre PHP. Komerčný produkt vám v závislosti od typu licencie umožňuje chrániť skripty na úrovni servera aj na úrovni zdrojového kódu. Ochrana servera so štandardnými funkciami, nič zvláštne. Ochrana na úrovni skriptov sa odstráni veľmi jednoducho automaticky a manuálne. Pre serverovú verziu neexistuje žiadny verejný dekodér.

Ochrana veľmi populárna medzi domácimi vývojármi. Ide o ochranný modul silne posiaty prázdnym kódom, ktorý je cez include pripojený k chráneným skriptom. Algoritmus dekódovania je veľmi jednoduchý, nespôsobuje žiadne ťažkosti pri manuálnom a automatickom odstránení. Vo všetkých prípadoch je úplne odstránený zo zdrojového kódu, neexistuje žiadna funkcia obfuskátora. Existujú malé funkcie pre špeciálne prípady dekódovania, ale nebudú tu opísané.

CodeLock. Ďalšia populárna obrana, skvelý príklad negramotného programovania. Ide o php aplikáciu, ktorá umožňuje kódovať ako samotné skripty, tak aj výsledok ich práce v prehliadači pomocou javascriptu. Skripty môžu byť chránené heslom, ale kvôli priemernej implementácii je možné heslo ľahko zistiť aj bez odstránenia sklopnej ochrany. Ochranný modul je php skript posiaty prázdnym kódom, ktorý sa pripája k chráneným skriptom. Algoritmus ochrany je veľmi jednoduchý, je úplne odstránený zo zdrojového kódu. Neexistuje žiadna funkcia zahmlievania.

TrueBug PHP Encoder, novšie TrueBug PHP Obfuscator & Encoder. Veľmi zaujímavý behúň na preskúmanie. Pred verziou 1.0.2 sa používali štandardné php nástroje na kompresiu gzip, od verzie 1.0.3 autori vyvinuli vlastný kompresný algoritmus. Nový produkt TrueBug PHP Obfuscator & Encoder pridáva funkciu zahmlievania a optimalizácie zdrojového kódu. Jediným slabým miestom ochrany je nemenný algoritmus dekódovania skriptu, ale samotný algoritmus sa mení pre každú verziu ochrany. Po parsovaní sa ochrana jednoducho odstráni presne podľa zdrojového kódu, samozrejme za predpokladu, že nebol použitý obfuskátor.

Zorex PHP CryptZ. Ochrana, podobne ako CodeLock, je php aplikácia, na fungovanie vyžaduje databázu MySQL. Ochranný modul je plug-in php skript zašifrovaný v niekoľkých vrstvách. Po analýze sa algoritmus veľmi jednoducho odstráni presne do zdrojového kódu. Neexistuje žiadna funkcia obfuskátora.

Bezplatný kódovač PHP. Bezplatná online služba na kódovanie php skriptov. Ochranný modul je plug-in php-script krytý Zendom, ktorý je potrebné stiahnuť zo stránky.Po odstránení Zendu a analýze algoritmu je možné ochranu jednoducho úplne odstrániť do zdrojového kódu. Algoritmus ochrany je nezmenený, neexistuje žiadna funkcia obfuskátora.

PHP skript, primitívne kódovanie, štandardný base64. Nezaslúži si väčšiu pozornosť a nemá praktický význam.

Namiesto štandardného wp-signup.php vytvárame vlastnú registračnú stránku pre multisite.

V typickej inštalácii WordPress sa na stránke registrácie (prihlásenie, reset hesla) zobrazí súbor wp-login.php.

  • /wp-login.php - autorizácia
  • /wp-login.php?action=register - registrácia
  • /wp-login.php?action=lostpassword - obnovenie hesla

V súbore wp-login.php sú samostatné podmienky pre viacero lokalít. Takže, keď kliknete na odkaz /wp-login.php?action=register na multisite, WordPress sa presmeruje na stránku /wp-signup.php. V mnohých témach stránka nevyzerá veľmi príťažlivo, tak si spravíme vlastnú.

Hlavná stránka siete

V predvolenom nastavení WordPress otvára registračnú stránku (wp-signup.php) na hlavnej doméne (stránke) siete. Môžete však vytvoriť samostatnú registračnú stránku pre každú stránku v sieti, aj keď majú rôzne témy. Budeme brať do úvahy prípad, keď všetky stránky v sieti majú svoju vlastnú registračnú stránku, ale používa sa rovnaká téma a stránky sa líšia iba jazykom. Ak používate rôzne témy, budete musieť napísať viac kódu.

function.php?

nie Zdá sa, že názov tohto súboru je uvedený v každom článku WordPress. V našom prípade, vzhľadom na to, že funkcia registrácie je navrhnutá pre niekoľko stránok, má zmysel presunúť ju do doplnkov MU, ktoré sa načítajú pri otvorení ľubovoľnej stránky.

Lyrická odbočka

Stojí za zmienku, že MU pluginy sa načítajú skôr ako bežné pluginy a pred úplným načítaním jadra WordPress, takže volanie niektorých funkcií môže viesť k fatálnym chybám v PHP. Toto "skoré" nakladanie má aj svoje výhody. Napríklad v žiadnej téme sa nemôžete držať niektorých akcií, ktoré sa spustia ešte pred načítaním súboru functions.php z témy. Príkladom toho sú akcie z pluginu Jetpack v tvare jetpack_module_loaded_related-posts (related-posts - názov modulu), pomocou ktorých je možné sledovať aktivitu modulov v Jetpacku. Na túto akciu zo súboru témy nie je možné „priľnúť“, pretože akcia už bola spustená pred načítaním témy – pluginy sa načítajú pred témami. Všeobecný obrázok poradia načítania WordPress si môžete pozrieť na stránke Action Reference v kódexe.

Poradie súborov

Zásuvné moduly MU môžu obsahovať ľubovoľný počet súborov a akúkoľvek štruktúru, ktorá sa vám zdá logická. Držím sa niečoho ako táto hierarchia:

| -mu-plugins | - | -load.php | - | - | -selena-network | - | - | - | -registrácia | - | - | - | - | -plugin.php | - | - | - | - | -... | - | - | - | -jetpack | - | - | - | - | -plugin.php

Všetky potrebné "pluginy" pre našu sieť sú pripojené v súbore load.php:

// Načítajte Traslates pre všetky doplnky load_muplugin_textdomain ("selena_network", "/ selena-network / languages ​​​​/"); // Registrácia do siete vyžaduje WPMU_PLUGIN_DIR. "/selena-network/signup/plugin.php"; // Iné doplnky // vyžadujú WPMU_PLUGIN_DIR ...

Priečinky pluginov sú uložené vo vnútri priečinka selena-network, každý má svoj vlastný plugin.php, ktorý zahrnieme do load.php. To vám dáva flexibilitu a možnosť rýchlo veci vypnúť a zapnúť.

Adresa registračnej stránky

Na zadanie adresy registračnej stránky sa používa filter wp_signup_location. Nachádza sa v súbore wp-login.php a je zodpovedný za presmerovanie na wp-signup.php.

Prípad "register": if (is_multisite ()) (wp_redirect (apply_filters ("wp_signup_location", network_site_url ("wp-signup.php"))); exit;

Pridajme našu funkciu do mu-plugins / selena-network / signup / plugin.php, ktorá vráti adresu registračnej stránky na aktuálnej stránke:

Funkcia selena_network_signup_page ($ url) (návrat home_url (). "/ Signup /";) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network je predpona, ktorú používam v názvoch všetkých funkcií v zásuvných moduloch MU na mojej stránke, aby sa predišlo kolíziám, mala by byť nahradená mojou vlastnou jedinečnou predponou. Filter má prioritu 99, pretože niektoré zásuvné moduly ako bbPress a BuddyPress môžu túto URL prepísať vlastnou (MU zásuvné moduly sa načítajú skôr ako bežné zásuvné moduly, pozri vyššie). Všimnite si, že home_url () sa používa namiesto network_site_url () na udržanie návštevníka v rovnakej doméne. Ako adresu možno použiť ľubovoľnú adresu URL.

Vytvorte stránku

Teraz vytvoríme stránku s adresou site.com/signup/ cez bežné rozhranie a v zložke podradenej témy je šablóna pre našu novú stránku page-signup.php. Namiesto slova „registrácia“ možno použiť jedinečné ID.

Vo vnútri novej šablóny je potrebné zavolať funkciu selena_network_signup_main (), ktorá zobrazí registračný formulár.

Je potrebné poznamenať, že celý proces so šablónami nie je potrebný a namiesto toho si môžete vytvoriť svoj vlastný krátky kód, ktorý bude volať aj funkciu selena_network_signup_main ().

wp-signup.php a wp-activate.php

Teraz začnime vytvárať funkciu, ktorá zobrazí registračný formulár. Ak to chcete urobiť, skopírujte súbory wp-signup.php a wp-activate.php z koreňového adresára WordPress do mu-plugings / selena-network / signup / (a ​​nezabudnite ich pripojiť v mu-plugins / selena-network / registrácia / plugin.php) ... Ďalšie manipulácie so súbormi sú mimoriadne náročné a časovo náročné na popísanie, takže ich budete musieť urobiť sami. Popíšem, čo presne je potrebné urobiť, a zverejním zdrojové súbory môjho projektu:

  1. Na začiatku súboru odstráňte všetky požadované funkcie, volania funkcií a ďalší kód mimo funkcií.
  2. Premenujte všetky funkcie pridaním jedinečných predpôn k menám.
  3. Zabaľte spodnú časť kódu wp-signup.php do funkcie selena_network_signup_main a na úplný začiatok napíšte globálne $ active_signup; ...
  4. Vymeňte rozloženie za svoje na správnych miestach.

V súbore wp-activate.php musíte urobiť približne to isté:

  1. Odstráňte všetok kód mimo funkcií, zabaľte rozloženie do samostatnej funkcie.
  2. V prípade potreby zmeňte rozloženie.

Súbor wp-activate.php je zodpovedný za stránku aktivácie účtu. Rovnako ako pri registračnej stránke, aj tu je potrebné vytvoriť samostatnú šablónu, v ktorej zavoláte funkciu zo súboru wp-activate.php.

Posielame aktivačné listy

Registračná stránka odošle návštevníkovi e-mail s odkazom na aktiváciu účtu. Štandardne to robí funkcia wpmu_signup_user_notification () zo súboru ms-functions.php. Jeho funkčnosť si môžete požičať pre svoju funkciu. Dôvod, prečo prestať používať túto funkciu, je ten, že posiela odkaz na aktiváciu účtu z wp-activate.php. Túto funkciu môžete „zakázať“ pomocou filtra wpmu_signup_user_notification, pričom uvediete false (ak to neurobíte, aktivačný list bude odoslaný dvakrát, dobre, v skutočnosti dve rôzne písmená).

Funkcia armyofselenagomez_wpmu_signup_user_notification ($ user, $ user_email, $ kľúč, $ meta = pole ()) (// ... // Kód z funkcie wpmu_signup_user_notification () wp_mail ($ user_email, wp_specialchars_decode ($ message_headers), $ message), $ ; return false;) add_filter ("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

Výsledkom je, že registračná stránka v téme Selena vyzerá oveľa čistejšie a presnejšie.

Záver

Na internete je mnoho iných, nie veľmi správnych spôsobov, ako to isté urobiť – Apache presmerovania, AJAX formuláre, ktoré bez Java Scriptu nefungujú, atď. vlastné webové stránky.

Upozorňujeme, že by ste mali súbory upravovať opatrne a snažiť sa veľmi neodchýliť od originálu, aby v budúcnosti, ak WordPress zmení súbory wp-signup.php a wp-activate.php, bolo jednoduchšie ich porovnať a nájsť zmeny.

Nezabudnite sa pozrieť do zdrojového kódu všetkých vyššie opísaných funkcií, aby ste plne pochopili, čo a ako sa deje vo vnútri kódu.

Bonus. Ochrana proti spamerom

Dokonca aj tie najmenšie stránky WordPress podliehajú častým registráciám spamu. Na filtrovanie botov môžete písať nekonečné podmienky, často skôr pokusy o vytvorenie umelej inteligencie 🙂 V prípade multisite mi veľmi pomohlo bežné presmerovanie v Apache, s ktorým pri otvorení /wp-signup.php a /wp- acitvate.php, požiadal som o 404 (nie som odborník na konfiguráciu Apache, takže moje pravidlá nemusia byť veľmi správne).

RewriteEngine On RewriteBase / RewriteRule ^ wp-signup \ .php - RewriteRule ^ wp-activate \ .php - # ZAČIATOK WordPress # Predvolene sa nedotýkajte pravidiel WordPress :) # ... # KONIEC WordPress

P. S. Snažím sa čo najpodrobnejšie opísať niektoré veci tretích strán, pretože keď som začínal, veľa vecí mi niekedy nemal kto nabádať a vysvetliť. Tiež verím, že takéto malé tipy na ďalšie materiály niekoho postrčia k tomu, aby sa naučil niečo nové a rozšírili si pole vedomostí. V položkách RewriteRule sa používajú regulárne výrazy, nie sú vôbec zložité, napríklad znak ^ znamená začiatok riadku.

„Rozbíjajú stránky bánk kvôli peniazom, Pentagon kvôli špionáži a môj projekt nikto nepotrebuje,“ bohužiaľ, toto si myslí väčšina majiteľov osobných blogov, internetových vizitiek, virtuálnych kancelárií malých firiem. Len málokto rozmýšľa, ako lokalitu ochrániť, no márne. V modernej realite je v očiach hackerov zaujímavá absolútne akákoľvek platforma, bez ohľadu na typ alebo popularitu. Kto môže potrebovať váš zdroj a prečo? Poďme na to:
1. Žarty scriptkiddis. Žargón odkazuje na začínajúcich hackerov, ktorí robia svoje prvé kroky na „temnej strane“. Po získaní niekoľkých nástrojov alebo po napísaní niekoľkých vlastných programov chcú otestovať svoj výkon na prvej obeti, na ktorú narazia, a spravidla si vyberajú najjednoduchšie (slabo chránené a neaktualizované CMS) ciele.
2. Black SEO. Stále sa využívajú služby nepoctivých optimalizátorov – umiestňovanie skrytých odkazov do kódu projektov s viac ako 10 TCI sa stále praktizuje. A v prvom rade, zdroje na open source motoroch (Joomla, Drupal, OpenCart a tak ďalej) sú napadnuté.
3. Budovanie botnetu. Ochrana WordPress pomocou htaccess a doplnkov je tiež dôležitá, pretože na vytvorenie siete zombie používanej pri útokoch DDoS, spamovaní atď. je možné použiť úplne akýkoľvek zdroj.
4. Vedľajšie škody. Konečne vás možno nenapadnú – hlavným cieľom bude hosting a stránka bude slúžiť len ako jedna veľká zraniteľnosť IT infraštruktúry poskytovateľa. Hackerov samozrejme nebude zaujímať jeho osud.

Následky hackingu môžu byť najnepríjemnejšie: strata obsahu alebo zdroja ako celku, pesimizácia vo výsledkoch vyhľadávacieho nástroja, strata publika v dôsledku nápisu „Stránka môže ohroziť bezpečnosť počítača alebo mobilného zariadenia“ a dokonca aj riziko zapletenia sa do trestného prípadu, ak boli na základe vášho webového zdroja spáchané nezákonné činy.

Môžeme teda s istotou povedať, že bezpečnostné problémy sa týkajú absolútne každého správcu webu. A ak ich zanedbáte, všetko úsilie na podporu vyhľadávača (a to sú peniaze a drahocenný čas) môže vyjsť cez noc nazmar. Problém je veľmi naliehavý, preto som sa rozhodol začať sériu článkov venovaných sieťovým hrozbám a metódam ich riešenia. Populárnemu CMS systému - Wordpressu sa budeme venovať v troch číslach.

Metódy zabezpečenia stránky WordPress

Jednou z najprimitívnejších metód hackovania je hrubá sila. Doslova sa tento výraz prekladá ako „hrubá sila“ a znamená získanie dvojice prihlasovacie meno / heslo hrubou silou vymenovaním možných možností. Brute-forcers sa im často snažia uľahčiť život využívaním chýb v nastaveniach motora a servera – pomáha im to napríklad zistiť názov účtu, čo výrazne znižuje počet kombinácií. Bude sa diskutovať o odstránení týchto zraniteľností, ako aj o metódach boja proti pokusom o neoprávnený prístup.

1. Použite jedinečné prihlásenie správcu

V predvolenom nastavení systém ponúka vytvorenie používateľa s názvom admin. Na ochranu vašej stránky WordPress je však najlepšie použiť prihlasovacie meno pozostávajúce zo sady náhodných písmen a čísel. Na živom zdroji je možné meno administrátora bez problémov zmeniť jedným z dvoch spôsobov:

Cez admin panel. Prejdite do sekcie „Používatelia“, kliknite na tlačidlo „Pridať nového“ a vytvorte si účet. V poli „Role“ vyberte „Administrator“ a potvrďte operáciu. Potom sa znova prihláste v mene novovytvoreného účtu, vráťte sa do sekcie „Používatelia“, vyberte „admin“ a kliknite na „Odstrániť“. V okne, ktoré sa otvorí, umiestnite prepínač do pozície „Prepojiť všetok obsah“ a z rozbaľovacieho zoznamu vyberte nového správcu a potom kliknite na „Potvrdiť vymazanie“.
... Pomocou phpMyAdmin. Je oveľa jednoduchšie vykonať rovnaký postup prostredníctvom ovládacieho panela databázy. Vyberte požadovanú databázu, nájdite tabuľku wp_users, nájdite riadok „admin“ (ID = 1), kliknite na „Zmeniť“ a zadajte požadovaný názov.

2. Vytvorte si vyhradený publikačný účet

Ak je správca „vynechaný“, poskytne to dodatočnú ochranu. Vytvorte si samostatný účet na uverejňovanie článkov a prepojte s ním všetky doteraz publikované materiály spôsobom popísaným v odseku 1. Ďalej pridávajte informácie a komunikujte s čitateľmi len z nového účtu.

3. Zadajte silné heslo

Dodržiavajte všeobecne uznávané odporúčania: heslo musí mať aspoň 10 znakov, musí byť jedinečné a pozostávať z náhodnej postupnosti veľkých a malých písmen, číslic a špeciálnych znakov.
V žiadnom prípade by ste nemali:
... poskladať heslo zo zmysluplných fráz
... použiť akékoľvek faktické údaje (dátum narodenia, rodné priezvisko, číslo bankového účtu, aktuálny rok...)
Odstráni sa tak riziko hľadania prístupovej frázy pomocou slovníka a výrazne sa predĺži aj čas potrebný na hrubú silu. Rozlúsknutie sekvencie 10 znakov, ktorá pozostáva iba z malých písmen a číslic (hki458p1fa), zaberie 10 dní počítačového času pre jeden počítač, ale ak pridáte veľké písmená a ďalšie znaky (Nv6 $ 3PZ ~ w1), toto obdobie sa predĺži až na 526 rokov, čo zaručuje takmer absolútnu ochranu WordPress. Vymyslieť a zapamätať si tieto heslá je pomerne náročné, najmä ak máte na starosti viacero projektov. Na ich generovanie a ukladanie je preto lepšie použiť špeciálne správcov, napríklad KeePassX, distribuovaný zadarmo, alebo bežný testovací dokument (je lepšie, ak je zabalený do archívu s heslom).

4. Zmeňte heslo pre databázu

Vyššie uvedené pravidlá platia aj pre bezpečnosť prístupového kódu MySQL. Koniec koncov, je to tam, kde sa nachádza celý obsah, ako aj hash tajnej frázy správcu. Ak už používate slabé heslo, oplatí sa dať si tú námahu a zmeniť ho. Toto sa vykonáva takto:

1. Prejdite na ovládací panel phpMyAdmin
2. Otvorte kartu „Používatelia“ a vyberte vlastníka databázy
3. Kliknite na „Upraviť oprávnenia“
4. Nájdite stĺpec „Zmeniť heslo“ a do príslušných polí zadajte novú tajnú sekvenciu
5. Uložte zmeny kliknutím na „OK“

Teraz už zostáva len upraviť wp-config.php, inak sa WordPress nebude vedieť pripojiť k databáze. Nájdite definíciu riadku („DB_PASSWORD“, „heslo“); a namiesto slova heslo zadajte nové heslo. Všimnite si, že keďže znak (‘) sa používa na oddeľovanie príkazov SQL, nemal by sa používať ako súčasť prístupovej frázy.

5. Pravidelne aktualizujte heslá

Mali by sa meniť aspoň každých šesť mesiacov. Mimoriadna zmena kódových fráz by mala byť vykonaná VŽDY po:

Prenos údajov na autentifikáciu tretím stranám (programátorom, správcom systému, optimalizátorom a iným odborníkom, aj keď pracujú na pracovníkoch hostiteľskej spoločnosti)
... prihlásenie do webového zdroja z počítača niekoho iného (na večierku, v internetovej kaviarni)
... autorizácia od zariadenia, ktoré mohlo byť napadnuté (stroj infikovaný vírusom)

6. Nezabudnite zmeniť tajné kľúče pre súbory cookie

Nachádzajú sa v súbore wp-config.php. Je ich 8:

definovať ("AUTH_KEY", "jedinečný kľúč"); definovať ("SECURE_AUTH_KEY", "jedinečný kľúč"); definovať ("LOGGED_IN_KEY", "jedinečný kľúč"); definovať ("NONCE_KEY", "jedinečný kľúč"); definovať ("AUTH_SALT", "jedinečný kľúč"); definovať ("SECURE_AUTH_SALT", "jedinečný kľúč"); definovať ("LOGGED_IN_SALT", "jedinečný kľúč"); definovať ("NONCE_SALT", "jedinečný kľúč");

definovať ("AUTH_KEY", "jedinečný kľúč"); definovať ("SECURE_AUTH_KEY", "jedinečný kľúč"); definovať ("LOGGED_IN_KEY", "jedinečný kľúč"); definovať ("NONCE_KEY", "jedinečný kľúč"); definovať ("AUTH_SALT", "jedinečný kľúč"); definovať ("SECURE_AUTH_SALT", "jedinečný kľúč"); definovať ("LOGGED_IN_SALT", "jedinečný kľúč"); definovať ("NONCE_SALT", "jedinečný kľúč");

Ako by ste z názvov premenných mohli uhádnuť, kľúče sú zodpovedné za šifrovanie súborov cookie (známy slang: cookie - sušienky, soľ - soľ, kŕmime hackermi slanými cookies), ktoré sa používajú na vytvorenie stránky "zapamätať" si počítač po autorizácii. Pointa je, že aj keď útočník dostane k dispozícii hash hesla správcu, nebude môcť vygenerovať súbory cookie potrebné na prístup na stránku bez uvedených tajných fráz.

Na zlepšenie bezpečnosti by sa predvolené sekvencie znakov mali nahradiť jedinečnými ihneď po nasadení CMS. Pre pohodlie vývojári vytvorili webový generátor, ktorý sa nachádza na adrese www.api.wordpress.org/secret-key/1.1/salt/ - keď zadáte, uvidíte kľúče a ak obnovíte stránku, kombinácie sa aktualizujú .

7. Dvojitá autorizácia pre oblasť správcu

Htaccess vám umožňuje ďalej zabezpečiť vašu stránku WordPress pridaním autentifikácie na úrovni servera. Kód bude vyzerať takto:

< Files wp- login. php> # Nastavili sme základný typ autentifikácie - to znamená, že keď sa pokúsite# pri prístupe k zadanému adresáru alebo súboru sa zobrazí výzva na zadanie hesla: AuthType základné # Zadajte text, ktorý sa zobrazí v hlavičke formulára: AuthName "Identifikujte sa" # Zadajte cestu k súboru obsahujúcemu prístupovú frázu: AuthUserFile "/home/site/.htpasswd" # Upozorňujeme, že pri prístupe k súboru wp-login.php musíte zadať heslo: Vyžadovať platný používateľ # Zakázať prístup k súboru .htpasswd tretím stranám:< Files . htpasswd>poriadok povoliť, odoprieť odoprieť zo všetkých

# Vyberte súbor autorizačného skriptu: # Nastavte základný typ autentifikácie – to znamená, že keď sa # pokúsite o prístup k zadanému adresáru alebo súboru, budete vyzvaní na zadanie hesla: AuthType basic # Zadajte text, ktorý sa zobrazí v hlavičke formulára: AuthName „Identifikujte sa“ # Zadajte cestu k súboru obsahujúcemu prístupovú frázu: AuthUserFile "/home/site/.htpasswd" # Upozorňujeme, že pri prístupe k súboru wp-login.php musíte zadať heslo: Vyžadovať platného používateľa# Zakázať prístup k súboru .htpasswd tretím stranám: poriadok povoliť, odoprieť odoprieť zo všetkých

Zároveň by bolo pekné postarať sa o bezpečnosť samotného htaccess. Presne povedané, takáto smernica by mala byť uvedená v hlavných nastaveniach hostingu, ale vzhľadom na neopatrnosť niektorých poskytovateľov by ste mali hrať na istotu:

Namiesto „login“ nahraďte požadované meno. Zostáva vygenerovať samotné heslo, ako aj zašifrovať, pretože ukladanie takýchto údajov v čistom texte je neprípustný luxus. Na to existuje veľa služieb, ale je lepšie napísať potrebný skript sami. Toto sa vykonáva takto:

1) Vytvorte súbor .php v poznámkovom bloku, napríklad crypt.php
2) Zadajte tam kód a namiesto slova „Heslo“ nahraďte svoje heslo:

3) Uložte súbor a nahrajte ho do koreňového adresára
4) Kliknite na odkaz site_name.ru / crypt.php - na obrazovke sa zobrazí hash hesla
5) Uložte túto hodnotu do súboru .htpasswd a nahrajte ju do koreňového adresára a odstráňte súbor crypt.php

Posledným krokom je zákaz prezerania obsahu adresára webových zdrojov. Do htaccess stačí pridať jeden riadok:

Možnosti Všetky - Indexy

Možnosti Všetky - Indexy

Deje sa tak, aby hackeri nemohli zistiť, ktoré súbory sa nachádzajú v adresároch projektu. Na mnohých hostingových stránkach je táto smernica už zahrnutá v nastaveniach servera, ale ak tento bod prehliadnete, mali by ste si ju zaregistrovať sami.

8. Nainštalujte captcha

Používanie captcha vám umožní odrezať, ak nie všetkých, tak aspoň väčšinu robotov hrubou silou a súčasne. Adresár doplnkov na ochranu stránok WordPress ponúka veľa možností. Okrem pripojenia proprietárneho riešenia od Google je veľkým záujmom Captcha od BestWebSoft zmiešaného (grafického a textového) typu, ktorý je založený na matematických operáciách. Nezávislosť na službách, prehľadnosť a prijateľná úroveň zložitosti robia z modulu jeden z najlepších.

Prispôsobenie nie je veľký problém. Karta „Základné“ vám umožňuje vybrať, kde sa má zobraziť obrázok captcha, ako aj zadať názov a symbol na označenie požadovaných polí.

Sekcia „Rozšírené“ poskytuje možnosť vytvárať si vlastné chybové hlásenia, ako aj aktivovať ďalšie balíčky obrázkov, aby sa robotom ešte viac sťažil život.

Ďalšou užitočnou funkciou je vstavaný whitelist IP adries, pre ktoré sa captcha nezobrazí.

Výsledkom inštalácie a aktivácie doplnku bude zobrazenie formulára na autorizačnej stránke:

9. Zmeňte adresu správcu

Keď už hovoríme o tom, ako chrániť WordPress stránku, stojí za zmienku radikálnejší, ale aj komplikovanejší spôsob – zmena URL prihlasovacej stránky na úrovni skriptu. Postup sa vykonáva v niekoľkých etapách:

1. Premenujte súbor wp-login.php. Použite náhodnú postupnosť malých latinských písmen, číslic a pomlčiek. Napríklad: abc-123.php
2. Nájdite všetky odkazy na wp-login.php vo výslednom súbore a nahraďte ich novým názvom.
3. Aby stránka fungovala správne, výmena musí byť vykonaná aj v: wp-activate.php, general-template.php, post-template.php, functions.php, class-wp-customize-manager.php, general -template.php, link-template.php, admin-bar.php, post.php, pluggable.php, ms-functions.php, canonical.php, functions.wp-scripts.php, wp-signup.php, my -sites.php, schema.php, ru_RU.po

Po týchto manipuláciách sa panel správcu nachádza na stránke / abc-123.php. Prístup k novému súboru by mal byť obmedzený a chránený heslom, ako je popísané vyššie. Potenciálnych hackerov je tiež možné uviesť do omylu vytvorením falošného súboru wp-login.php a nastavením hesla aj preň.

Ešte jednoduchšou možnosťou je použitie doplnku „Premenovať wp-login.php“. Po nainštalovaní doplnku na ochranu stránky sa v ponuke „Nastavenia“ -> „Trvalé odkazy“ objaví nové pole:

10. Zadajte IP adresu správcu

Dodatočné zabezpečenie môže byť poskytnuté, ak máte statickú IP adresu. Odmietnutie prístupu k wp-login.php z akéhokoľvek iného počítača, než je váš, hackerom značne sťaží život:

< Files wp- login. php>objednávka zamietnuť, povoliť odmietnuť od všetkých povoliť od 127.0.0.1, 127.0.02 # Adresy IP oddeľte čiarkami

objednávka zamietnuť, povoliť odmietnuť od všetkých povoliť od 127.0.0.1, 127.0.02 # Svoje IP adresy oddeľte čiarkami

11. Vypnite chyby autorizácie

Pri hrubom vynucovaní hesiel bude útočníkovi veľmi užitočné vedieť, že zadané údaje boli nesprávne. Takéto správy sa zobrazujú pri každom neúspešnom pokuse o prihlásenie a WordPress hlási aj to, čo bolo zadané nesprávne, používateľské meno alebo heslo. Aby ste sa ich zbavili, stačí pridať iba jeden riadok do functions.php:

add_filter ("login_errors", create_function ("$ a", "return null;"));

add_filter ("login_errors", create_function ("$ a", "return null;"));

Ak to chcete urobiť, vyberte na paneli správcu "Vzhľad" -> "Editor" -> "Funkcie témy". Za úvodnú značku je potrebné napísať kód

12. Použite zabezpečené pripojenie.

Na šifrovanie komunikácie medzi počítačom užívateľa a webovým serverom slúži protokol https, ktorého použitie vylučuje možnosť zachytenia dôležitých údajov, v našom prípade identifikačných údajov. Na jeho aktiváciu je potrebné najprv zakúpiť SSL certifikát, ktorý vykonáva dve funkcie naraz: autentifikáciu webového zdroja a šifrovanie prenášaných informácií. Dostanete ho v špecializovaných centrách alebo u viacerých registrátorov doménových mien. Na nekomerčné účely úplne stačí získať bezplatný vstupný certifikát (ten ponúka spoločnosť www.startssl.com). Pokiaľ ide o proces inštalácie, spravidla je podrobne popísaný v časti pomocníka hostiteľa.

Po prijatí certifikátu SSL je potrebné nakonfigurovať presmerovanie administratívnej časti webového zdroja na zabezpečené pripojenie. V prípade WordPress sa to robí pomocou nasledujúcej konštrukcie:

< IfModule mod_rewrite. c>Options + FollowSymlinks RewriteEngine On RewriteCond% (HTTPS) = off RewriteCond% (REQUEST_URI) = / wp- prihlásenie. php RewriteRule (. *) https:

Options + FollowSymlinks RewriteEngine On RewriteCond% (HTTPS) = off RewriteCond% (REQUEST_URI) = / wp-login.php RewriteRule (. *) Https: //% (HTTP_HOST)% (REQUEST_URI)

Môžete tiež vynútiť používanie certifikátov SSL na úrovni stroja. Ak to chcete urobiť, otvorte súbor wp-config.php a pridajte ho

definuj ("FORCE_SSL_ADMIN", true);

definuj ("FORCE_SSL_ADMIN", true);

Okrem toho si môžete nastaviť globálne presmerovanie z http na https. Pre nové stránky je tento prístup optimálny vzhľadom na to, že Google podporuje bezpečné projekty a dáva im určitú prioritu vo výsledkoch vyhľadávania:

< IfModule mod_rewrite. c>Options + FollowSymlinks RewriteEngine on RewriteCond% (HTTPS) = off RewriteRule ^ (. *) $ Https: //% (HTTP_HOST)% (REQUEST_URI)

Options + FollowSymlinks RewriteEngine on RewriteCond% (HTTPS) = off RewriteRule ^ (. *) $ Https: //% (HTTP_HOST)% (REQUEST_URI)

13. Blokujte votrelcov

Ak sa zistí podozrivá aktivita z určitých adries IP, stojí za to zablokovať ich prístup na stránku. Robí sa to analogicky s predchádzajúcou metódou. Rozdiel je v tom, že smernice sú napísané pre projekt ako celok a uvádzame adresy tých, ktorých chceme zakázať:

Objednať Povoliť, Odmietnuť Povoliť zo všetkých Zakázať od 127.0.0.1, 127.0.02 # Zadajte nechcenú IP

Metóda je spoľahlivá, ale neúčinná. Po prvé, je potrebné nejako zaznamenať požiadavky násilných služieb a oddeliť ich od slušných návštevníkov. Po druhé, pri masívnom útoku jednoducho nebudete môcť manuálne sledovať a riadiť IP hackerov a botov. Táto metóda je dobrá iba vtedy, ak má správca spoľahlivú čiernu listinu adries.

V opačnom prípade môžete použiť bezpečnostný doplnok WordPress s názvom WP Cerber. Toto riešenie je úplne zadarmo a zároveň ponúka veľmi pôsobivú sadu nástrojov určených na zabránenie hackovaniu CMS. Môžete si ho nainštalovať priamo z administračného panela.

Štandardne sú ponúkané pomerne rozumné parametre. Počet pokusov by sa však mal zvýšiť na 5, aby sa predišlo nedorozumeniam.

Začiarkavacie políčko vedľa „Blokovať IP pre akúkoľvek požiadavku wp-login.php“ by malo byť začiarknuté, ak zmeníte adresu správcu vyššie popísaným spôsobom.

Na tieto účely môžete použiť aj vlastný nástroj WP Cerber:

Režim zásuvného modulu na ochranu stránky Citadel tiež nevyžaduje ďalšiu konfiguráciu. Je navrhnutý tak, aby „zablokoval“ projekt počas masívneho útoku hrubou silou. Je lepšie zrušiť začiarknutie políčka vedľa položky „Zaznamenať pokusy o prihlásenie do súboru“ - pomôže to eliminovať dodatočné zaťaženie servera.

Karta „Prístupové zoznamy“ sa používa na vytvorenie „čierneho“ a „bieleho“ zoznamu IP adries (ak máte statickú adresu, nezabudnite ju pridať do zoznamu dôveryhodných) a časť „Nástroje“ vám umožňuje importovať a exportovať predtým vykonané nastavenia. Tieto možnosti však nevyžadujú osobitné posúdenie.

14. Presuňte konfiguračný súbor

Ako sme zistili vyššie, wp-config.php ukladá také dôležité údaje, ako je prihlasovacie meno a heslo pre prístup k MySQL, ako aj kľúče API. Ďalší krok sa zdá byť zrejmý – ochrana WordPress prostredníctvom htaccess obmedzením prístupu k súboru:

< Files wp- config. php>Objednávka povoliť, odoprieť Odmietnuť všetkým

Objednávka povoliť, odoprieť Odmietnuť všetkým

Existuje však aj spoľahlivejšia metóda. WordPress má veľmi zaujímavú funkciu, o ktorej vie len málokto. Engine umožňuje umiestniť konfiguračný súbor o jednu úroveň nad koreňový adresár. php je možné presunúť do adresára stránky. V takom prípade sa súbor stane úplne nedostupným cez internet, pričom informácie v ňom obsiahnuté bude CMS stále čítať.

15. Pridajte šek REFERER

Osvedčený spôsob ochrany WordPressu pred spamom pomôže aj pri konfrontácii s hrubou silou. Hrubé vynútenie hesiel nie je v žiadnom prípade manuálna práca: na tieto účely sa používajú špecializované programy. To znamená, že povolením kontroly hlavičiek v prichádzajúcich požiadavkách môžete odrezať roboty, ktoré prišli odnikiaľ s prázdnym HTTP REFERER:

< IfModule mod_rewrite. c>RewriteEngine On RewriteCond% (REQUEST_METHOD) POST RewriteCond% (REQUEST_URI). (wp- komentáre- príspevok | wp- prihlásenie) \. php * RewriteCond% (HTTP_REFERER)!. * tekseo. su. * [ALEBO] RewriteCond% (HTTP_USER_AGENT) ^ $ RewriteRule (. *) http: //% (REMOTE_ADDR) / $ 1

RewriteEngine On RewriteCond% (REQUEST_METHOD) POST RewriteCond% (REQUEST_URI). (Wp-comments-post | wp-login) \. Php * RewriteCond% (HTTP_REFERER)!. * Stránka. * RewriteCond% (HTTP_USER_AGENT) ($ RewriteCond% ( HTTP_USER_AGENT) ($ RewriteCond) ^ $ RewriteCond *) http: //% (REMOTE_ADDR) / $ 1

16. Chráňte XML-RPC

Od verzie 3.5 z WordPressu zmizla možnosť deaktivovať protokol vzdialeného volania procedúr XML-RPC. V podstate je potrebná interakcia s mobilnými aplikáciami, no nie každý potrebuje takúto funkcionalitu. Zároveň je xmlrpc.php aktívne využívaný na vykonávanie DDoS útokov, ktoré sú Achillovou pätou celého projektu.

Hackerov navyše napadlo použiť XML-RPC na hrubú silu. Použitie metódy wp.getUsersBlogs vám umožňuje prechádzať prihlasovacie údaje oveľa rýchlejšie ako pomocou formulára správcu. Keďže mnoho hovorov XML-RPC vyžaduje autorizáciu, požiadavka ako je táto:

< methodCall> < methodName>wp. getUsersBlogs < params>< param>< value>< string>admin < param>< value>< string> 12345

wp.getUsersBlogs admin 12345

spôsobí, že vám motor oznámi, či je odovzdaná kombinácia správna. Aby ste sa zbavili tejto pohromy, musíte protokol úplne zakázať. To možno vykonať niekoľkými spôsobmi:

1) Zablokovaním prístupu k súboru xmlrpc.php cez htaccess

require_once (ABSPATH. "wp-settings.php");

treba sa zaregistrovať

funkcia remove_x_pingback ($ hlavičky) (nenastavené ($ hlavičky ["X-Pingback"]); vrátiť $ hlavičky;) add_filter ("wp_headers", "remove_x_pingback");

4) Pomocou doplnku na publikovanie Control XML-RPC, ktorý vráti príslušnú možnosť v časti Nastavenia -> Zápis:

Upozornenie: doplnok deaktivuje protokol ihneď po aktivácii a v nastaveniach ho môžete povoliť zaškrtnutím príslušného políčka.

17. Monitorujte útoky hrubou silou

Na záver stojí za zmienku zaujímavý plugin pre logovanie pokusov o hackovanie – Authentication and xmlrpc log write. Hoci rovnaký WP Cerber má vstavané monitorovacie nástroje, tento modul bude stále užitočný, najmä pre tých, ktorí potrebujú možnosti protokolu opísaného vyššie. AX LogWriter je schopný sledovať hrubú silu cez xmlrpc.php, takže môžete posúdiť stupeň ohrozenia a vhodnosť úplného odmietnutia použitia jeho schopností. Na záver, tým, ktorí sa na zabezpečení svojho projektu vôbec nepodieľali, plugin na ochranu stránky otvorí oči dôležitosti vymenovaných aktivít.

Používanie AX LogWriter je jednoduché. Po inštalácii sa v ponuke správcu zobrazí príslušná sekcia, kde môžete vykonať všetky potrebné zmeny:

V poli „Typ chyby“ vyberte spôsob uloženia. Podporuje zápis do systémového denníka, denníka servera Apache, ako aj možnosť vytvorenia vlastného súboru. V druhom prípade môže byť nakonfigurovaný aj s vlastným názvom protokolu chýb a vlastnou cestou protokolu chýb. Správcovi systému sa tak otvárajú široké možnosti – riešenie je napríklad možné použiť spolu s fail2ban. Nezabudnite tiež vybrať príslušné časové pásmo v stĺpci Časové pásmo.

Vlastný denník je možné zobraziť priamo z administračného panela na stránke Custom Log Viewer:

Poďme si to zhrnúť:

Uvedené metódy pomôžu výrazne zvýšiť bezpečnosť vášho zdroja a ochrániť ho pred robotmi-brute-forced, sieťovými chuligánmi a praktizujúcimi scriptkiddis. Všetko popísané vyššie je však len špičkou ľadovca. Útočníci majú vo svojom arzenáli oveľa sofistikovanejšie metódy. A v ďalšom článku si povieme, ako sa chrániť pred skutočnými hackermi pomocou rôznych zraniteľností enginu a serverového softvéru. Rovnako ako v tomto materiáli budú okrem všeobecných „hygienických pravidiel“ považované za kľúčové nastavenia CMS, spôsoby úpravy kódu, ako aj najrelevantnejšie pluginy.


Pri bezpečnosti aplikácií je dôležité postarať sa nielen o hardvér a operačný systém, ale aj o písanie bezpečných skriptov. V tomto článku sa dozviete, ako zabezpečiť, aby bola vaša aplikácia bezpečná a menej zraniteľná. Nižšie je uvedený zoznam opatrení, ktoré vám pomôžu chrániť vašu aplikáciu pred všetkými druhmi útokov:

  1. Overenie prichádzajúcich údajov
  2. Ochrana proti XSS útokom
  3. Ochrana pred CSRF útokmi
  4. Zabránenie SQL Injection
  5. Ochrana súborového systému
  6. Ochrana údajov relácie
  7. Chyba pri spracovaní
  8. Ochrana zahrnutých súborov

Overenie prichádzajúcich údajov

Pri navrhovaní vašej aplikácie sa musíte snažiť chrániť ju pred „zlými“ prichádzajúcimi údajmi. Pravidlo, ktoré treba dodržiavať, je niečo ako: "Nikdy never tomu, čo používateľ zadal." Hoci väčšina používateľov nepredstavuje hrozbu, vždy existuje možnosť, že niekto chce hacknúť vašu stránku pomocou „zlých“ údajov zadaných prostredníctvom formulárov alebo panela s adresou. Ak vždy overujete a filtrujete prichádzajúce údaje, máte veľkú šancu napísať bezpečnú aplikáciu.

Vždy skontrolujte svoje údaje v PHP skriptoch. Ak na overenie údajov používate JavaScript, útočník ho môže kedykoľvek zakázať vo svojom prehliadači. V tomto prípade je vaša aplikácia ohrozená. Nikto nie je proti validácii JavaScriptu, ale pre dobrú ochranu je potrebné skontrolovať údaje v PHP skriptoch.

Ochrana proti XSS útokom

Skriptovanie medzi stránkami alebo útok XSS je útok založený na vložení kódu do potenciálne zraniteľných stránok. Nebezpečenstvo spočíva v tom, že škodlivý kód je možné zadať prostredníctvom formulárov a následne zobraziť v prehliadači.

Predpokladajme, že vaša stránka má formulár na zadávanie komentárov, ktoré sa po pridaní ihneď zobrazia. Útočník by mohol zadať komentár obsahujúci kód JavaScript. Po odoslaní formulára sú údaje odoslané na server a vložené do databázy. Potom sa údaje načítajú z databázy a nový komentár sa zobrazí na stránke HTML vrátane vloženého kódu JavaScript. Môže presmerovať používateľa na nejakú škodlivú stránku alebo phishingovú stránku.

Na ochranu svojich aplikácií spustite prichádzajúce údaje prostredníctvom funkcie strip_tags (), ktorá odstráni všetky prítomné značky. Pri zobrazovaní údajov v prehliadači použite funkciu htmlentities ().

Ochrana pred CSRF útokmi

Ďalším typom útoku, na ktorý sa pozrieme, je útok CSRF alebo falšovanie požiadavky medzi stránkami. Útočník využíva rôzne triky na získanie dôverných informácií alebo uzavretie obchodu bez vedomia obete. Stáva sa to hlavne na slabo chránených stránkach, kde je obchodná logika založená na práci požiadaviek GET.

Vo všeobecnosti sú požiadavky GET idempotentné. Idempotencia v tomto kontexte znamená, že na jednu a tú istú stránku je možné pristupovať mnohokrát bez akéhokoľvek vonkajšieho zásahu. Preto by sa požiadavky GET mali používať iba na získanie prístupu k informáciám, ale v žiadnom prípade na vykonávanie rôznych druhov transakcií.

Nasledujúci jednoduchý príklad ukazuje, ako môže byť nezabezpečená stránka vystavená CSRF útoku:

Predpokladajme, že Bob chce vykonať CSRF útok na Alicu. Vytvoril špeciálnu url adresu a poslal ju Alici e-mailom:

Navštívte môj web!

Ak má Alice autorizáciu na webovej stránke example.com a nasleduje tento odkaz, z jej účtu sa na Bobov účet prevedie 1 000 USD. Alternatívne môže Bob poslať aj obrázok a vyplniť „zlú“ adresu URL v atribúte src.

Prehliadač nebude môcť zobraziť tento obrázok, pretože neexistuje, ale žiadosť bude podaná bez vedomia a účasti Alice.

Ak chcete zabrániť tomuto druhu útokov, používajte iba požiadavky POST na procesy určené na zmenu informácií v databáze. Nepoužívajte $ _REQUEST. Použite $ _GET na spracovanie parametrov GET a $ _POST na získanie parametrov POST.

Ako dodatočné opatrenie môžete vygenerovať jedinečný token a pripojiť ho ku každej žiadosti POST. Keď sa používateľ prihlási do systému, môžete vygenerovať náhodný token a zapísať ho do relácie. Keďže sa používateľovi zobrazujú všetky formuláre, tento token musí byť zapísaný do skrytého poľa. Obchodná logika aplikácie musí poskytovať funkčnosť, ktorá bude kontrolovať token z formulárov a token uložený v relácii.

Zabránenie SQL Injection

Na spúšťanie dotazov proti databáze by ste mali použiť PDO. Pomocou parametrizovaných dotazov a pripravených príkazov môžete zmierniť hrozbu SQL injection.

Pozrime sa na nasledujúci príklad:

Vo vyššie uvedenom kóde posielame požiadavku na metódu pripraviť () vrátane pomenovaných parametrov:: meno a: vek. Dotaz je teda predkompilovaný na ďalšie nahradenie údajov. Keď sa zavolá metóda execute (), požiadavka sa úplne vytvorí a vykoná. Ak použijete túto techniku, všetky pokusy útočníka o vykonanie SQL injection budú zrušené.

Ochrana súborového systému

Ako zodpovedný vývojár by ste mali vždy písať kód, ktorý neohrozí váš súborový systém. Pozrime sa na kód, ktorý odosiela súbor na stiahnutie v závislosti od údajov odoslaných používateľom.

Tento skript je veľmi nebezpečný, pretože umožňuje prístup k akémukoľvek adresáru, ktorý je prístupný zo súboru so skriptom: adresár s reláciami, systémové priečinky a mnohé ďalšie.

Ochrana údajov relácie

Štandardne sa všetky informácie o relácii zapisujú do dočasného adresára. Ak používate zdieľaný hosting, niekto okrem vás môže písať skript a čítať dáta relácie. Dávajte si preto pozor na ukladanie hesiel alebo čísel kreditných kariet v reláciách.

Ak stále potrebujete ukladať takéto údaje v relácii, najlepším opatrením je šifrovanie. Tým sa problém úplne nevyrieši, pretože zašifrované údaje nie sú 100% bezpečné, ale uložené informácie budú nečitateľné. Tiež by ste mali zvážiť, že údaje o relácii môžu byť uložené inde, napríklad v databáze. PHP má špeciálnu metódu session_set_save_handler (), ktorá vám umožňuje ukladať dáta relácie vlastným spôsobom.

Od PHP 5.4 môžete odovzdať objekt typu SessionHandlerInterface session_set_save_handler ().

Chyba pri spracovaní

Pri vývoji aplikácie sa oplatí venovať pozornosť všetkým druhom chýb, ktoré sa môžu vyskytnúť, musia však byť skryté pred koncovými používateľmi. Ak sa používateľom zobrazujú chyby, váš web je zraniteľný. Najlepším riešením by teda bola odlišná konfigurácia pre cieľový server a pre vývojový server.

Na verejnom serveri musíte zakázať voľby ako display_errors a display_start_up_errors, ale voľby ako error_reporting a log_errors by mali byť aktívne, aby sa zaprotokolovali všetky chyby, s ktorými sa používatelia stretli.

Môžete tiež použiť set_error_handler na definovanie vlastného obslužného programu chýb. Môžu však existovať obmedzenia, pretože natívny obslužný program je horší ako natívny mechanizmus PHP. Chyby E_CORE_ERROR, E_STRICT alebo E_COMPILER_ERROR nemožno zachytiť v rovnakom súbore ako konkrétny obslužný program. Okrem toho nemožno zachytiť chyby, ktoré sa môžu vyskytnúť v samotnom psovodovi.

Pre elegantnejší spôsob zachytenia výnimiek by mal byť potenciálne nebezpečný kód umiestnený do bloku try / catch. Všetky natívne výnimky musia byť objektmi tried alebo podtried výnimky. Ak boli vyvolané výnimky, dajú sa spracovať v bloku try / catch.

Ochrana zahrnutých súborov

Často sa v PHP skriptoch načítavajú ďalšie súbory, ako napríklad pripojenie k databáze a mnohé iné. Niektorí vývojári dávajú týmto súborom príponu .inc. PHP štandardne neanalyzuje takéto súbory. Ak ich oslovíte priamo, používateľ bude môcť vidieť text tohto súboru. Ak sa hackerovi podarí získať prístup k súboru uchovávajúcemu dátové pripojenie k databáze, neskôr môže získať prístup ku všetkým údajom vašej aplikácie. Pre nahrávané súbory teda vždy používajte príponu .php a ukladajte ich tam, kde nie je priamy prístup používateľa.

Výsledok

Ak budete dodržiavať uvedených 8 pravidiel, výrazne to zlepší odolnosť vašej aplikácie voči rôznym druhom útokov. Nedôverujte údajom zadaným používateľmi, chráňte svoje súbory a databázu.

Zamyslime sa nad tým, kto je hacker? Hacker nie je cracker! Ľudia si tieto pojmy často zamieňajú. Hacker je v prvom rade človek s neštandardným myslením a v tom je takpovediac jeho sila.

Ak chcete úspešne odolať hackerom, musíte sa tiež naučiť myslieť mimo rámca. Ako sa hovorí, klin sa vybíja klinom.

Dnes vám ponúknem veľmi nezvyčajný spôsob, ako sa chrániť pred útokmi typu php include. Samozrejme, nie je vhodný pre každého. A ak úprimne, chráni nie pred samotným útokom, ale pred jeho odhalením. Zaujatý?

Ako nájsť vrátane...

Najprv pochopme, ako presne sa útočník snaží nájsť zraniteľnosť.

Vyzerá to takto. Útočník postupne upravuje všetky prichádzajúce parametre za predpokladu, že sa údaje týchto parametrov dostanú do funkcie include. No, alebo ak sa jednoduchým spôsobom pokúsi "pripojiť" súbory. A aby mohol určiť, či existuje zraniteľnosť alebo nie, potrebuje k cieľovému systému pripojiť nejaký súbor (ak vie - existuje zraniteľnosť, nie - neexistuje žiadna zraniteľnosť).

Prirodzene, ak útočník koná zvonku, nepozná štruktúru umiestnenia adresárov a súborov a nemôže pripojiť žiadny súbor, pretože nepozná cestu k nemu. Existujú však súbory, ktoré v systéme vždy existujú a ku ktorým vždy existujú povolenia na čítanie. Pre Linux je to / etc / passwd a pre Windows nech je to C: \ boot.ini. Ale mimochodom, Windows nás málo zaujíma, takže ďalej budeme hovoriť o passwd

/ etc / passwd

Pravdepodobne ste vo svojich denníkoch narazili na viac záznamov formulára:

Akcia = .. / etc / passwd% 00
? action = .. / .. / etc / passwd% 00
? action = .. / .. / .. / etc / passwd% 00
? action = .. / .. / .. / .. / etc / passwd% 00
? action = .. / .. / .. / .. / .. / etc / passwd% 00
? do = .. / etc / passwd% 00
? do = .. / .. / etc / passwd% 00
? do = .. / .. / .. / etc / passwd% 00
? do = .. / .. / .. / .. / etc / passwd% 00
? do = .. / .. / .. / .. / .. / etc / passwd% 00
? id = .. / etc / passwd% 00
? id = .. / .. / etc / passwd% 00
? id = .. / .. / .. / etc / passwd% 00
? id = .. / .. / .. / .. / etc / passwd% 00
? id = .. / .. / .. / .. / .. / etc / passwd% 00

Ak áno, mali by ste vedieť, že ste sa pokúsili nájsť php include (dobre, alebo schopnosť čítať ľubovoľné súbory, ale to nás teraz nezaujíma). Ak teda jeden z vašich parametrov nie je správne spracovaný a skončí vo funkcii zahrnúť (), potom by sa pridal súbor / etc / passwd, jeho obsah by bol interpretovaný ako php skript a keďže neobsahuje tagy php kódu, v prehliadači by sa zobrazil nezmenený. To by slúžilo ako „značka“ pre útočníka, aby mal zraniteľnosť.

Prečo to píšem k tomu, že pri hľadaní include sa útočník určite (garantujem, že v 90% prípadov) pokúsi pridať súbor / etc / passwd.

Chráňte sa, pane!

Možno si teraz myslíte: "Chce ponúkať bežný WAF a filtrovať pakety podľa prítomnosti / etc / passwd v nich?" nie Toto je štandardný spôsob. Toto je príklad toho, ako rozmýšľa bežný človek.

Poďme trochu kreatívne. Prečo jednoducho nepridáme nejaký php kód do obsahu súboru passwd? A ak sa útočníkovi náhle podarí pripojiť ho, spustí sa náš php kód. (Považujete to za nezmysel? - pozri záver)

Keďže vieme, že jediný, kto uhádne začlenenie tohto súboru, je cracker, náš php kód to musí zakázať a aby sme zabránili ďalšiemu hacknutiu nášho systému, zablokujte zraniteľný súbor a je vhodné upozorniť správcu o incidente.

Ale ako pridáte php kód do / etc / passwd, pretože jeho syntax je prísne regulovaná? Každý užívateľ má pole “komentár” – popis užívateľa, môžete tam zadať čokoľvek chcete (samozrejme okrem dvojbodky). Preto vezmeme a pridáme používateľa do systému s komentárom, ktorý potrebujeme. Potom bude / etc / passwd obsahovať nasledujúci riadok

root: x: 0: 0: Superuser: /:
démon: *: 1: 5 :: /: / sbin / sh
bin: *: 2: 2 :: / usr / bin: / sbin / sh
sys: *: 3: 3 :: /:
adm: *: 4: 4 :: / var / adm: / sbin / sh
bezpečnostný používateľ: *: 1001: 1001::/:

V skripte zásuvného modulu už vykonávame akcie, ktoré potrebujete - zakázať používateľovi, zablokovať požiadavku, upozorniť správcu.

Výsledkom je, že máme akúsi pascu, ktorá dokáže ochrániť váš web pred hackermi.

Záver

Áno, som si plne vedomý toho, že všetko napísané vyššie vyzerá ako nezmysel. A úplne chápem, že to nikto v praxi nevyužije. Ale nie kvôli tomu som písal. Napísal som preto, aby som ukázal príklad neštandardného prístupu v oblasti ochrany.

Ďakujem za pozornosť =)