Protecția scripturilor PHP de analiză și modificare. Nu uitați să vă schimbați cheile secrete ale cookie-urilor

Toate produsele software pentru protejarea scripturilor PHP sunt împărțite în două categorii: cele care necesită instalarea de module suplimentare pe server și care funcționează cu configurația obișnuită a serverelor web. Primele sunt mai fiabile din punct de vedere al securității, deoarece traduc scripturile PHP dintr-o formă textuală într-un cod binar special, dar necesită acces la serverul cu drepturi de administrator. Acestea din urmă pot funcționa pe aproape toate găzduirea cu suport PHP, inclusiv cele gratuite, dar nu sunt foarte greu de piratat. Codul sursă care nu utilizează criptarea sau compresia poate fi distins într-un subgrup separat.

Protecții la nivel de server:

Zend Encoder / Zend SafeGuard Suite este cea mai populară protecție comercială, modulele pentru suport Zend sunt de obicei instalate pe toate găzduirea plătită. Zend oferă scripturi de domeniu și IP, sincronizare a scriptului de probă și ofuscare puternică. Toate sistemele de operare sunt acceptate. În domeniul public există mai multe opțiuni pentru utilitățile de îndepărtare Zend, toate acestea sunt versiuni PHP modificate 4 și 5. Versiunile mai vechi de Zend sunt eliminate fără probleme, în ultimele apar dificultăți din cauza înfundării codului sursă.

Protecție comercială nouă, în curs de dezvoltare. Oferă interacțiune cu scripturi protejate la nivelul propriilor API-uri; sunt acceptate sistemele de operare Windows și Linux. Datorită prevalenței sale scăzute, nu este instalat pe găzduire virtuală obișnuită, dar poate fi instalat de către utilizatori pe servere dedicate. Nu există decodoare publice.

Protecția comercială practic nu este găsită, nu este instalată pe găzduire virtuală. Vă permite să setați o perioadă de probă pentru scripturi pentru a verifica data pe servere de oră externe, pentru a lega scripturile protejate la servere, adresa IP, adresa MAC a plăcii de rețea, iar aceste date sunt folosite pentru decriptare. Toate sistemele de operare sunt acceptate. Nu există decodoare publice.

phpSHIELD. SourceGuardian pentru prototipul PHP. După fuziunea celor doi dezvoltatori, a încetat să se dezvolte ca produs independent. Funcționalitatea principală este aceeași, nu există decodoare publice.

codificator PHP ionCube. Al doilea cel mai popular produs comercial pentru protejarea scripturilor. După apariția decodoarelor publice pentru Zend, acesta a devenit din ce în ce mai utilizat și instalat pe găzduire partajată. Vă permite să criptați nu numai scripturi, ci și șabloane, documente xml, imagini, fișiere binare. Leagă fișierele protejate de servere, există un obfuscator puternic, toate sistemele de operare sunt acceptate. Nu există decodoare publice, dar în unele cazuri poate fi eliminat de deZender.

Codificator PHTML. Un sistem de securitate comercial rar, care oferă funcționalitatea obișnuită pentru produse de acest tip, funcționează sub toate sistemele de operare. Pentru o taxă separată, puteți achiziționa codurile de securitate originale și le puteți modifica pentru a se potrivi nevoilor dvs. Nu există decodoare publice.

DWebEncoder. Protecție exotică pentru Windows concepută pentru a crea prezentări și cataloage cu scripturi pe CD-uri. În forma instalată, este ceva ca un server web independent pe care sunt executate scripturi php codificate. Nu există decodoare publice.

PHP Compact. Apărarea este mai degrabă teoretică decât practică. A fost dezvoltat pe unul dintre forumurile interne, dar se pare că nu a progresat dincolo de lansările autorului. Nu există decodoare, precum și scripturi protejate.

Un supliment cu sursă deschisă pentru acceleratoarele php vechi Turck MMCache și eAccelerator. Convertește scripturile în bytecode pentru a crește viteza de execuție a acestora. Există versiuni de module pentru Windows și Linux. Nu există decodoare publice, dar poate că codul open source al proiectului va ajuta cumva în studiu.

Protecții la nivel de sursă:

PHP LockIt! ... Protecția comercială populară, este foarte comună, în principal în scripturile de la dezvoltatori străini. Vă permite să setați o perioadă de probă pentru funcționarea scripturilor, legarea la domenii și adrese IP, comprimă scripturi folosind instrumente php standard (gzinflate). Singura parte dificilă este un ofuscator bun. Diferitele versiuni de protecție diferă doar prin modificarea modulului de despachetare. Se demontează cu ușurință atât în ​​modul manual, cât și în cel automat. Fără un obfuscator, este eliminat exact la codul sursă, cu un obfuscator, necesită procesare suplimentară.

CNCrypto. Nu există nici măcar o versiune demo în domeniul public, analiza a fost efectuată folosind scripturi protejate. Modulul articulat nu este greu de despachetat, protecția se bazează doar pe o ofucare bună a codului sursă.

PHPCipher. Protecția este un serviciu online. O arhivă cu scripturile dvs. este încărcată pe site și cea deja protejată este descărcată înapoi. O licență plătită vă permite să semnați scripturi protejate cu datele dvs. și să le utilizați în scopuri comerciale. Licența gratuită permite doar uz personal. Protecția în sine este un modul php protejat de Zend, care se conectează la scripturi protejate.După deZend, modulul de protecție și obținerea tuturor constantelor necesare din acesta este eliminat complet în codul sursă. Nu există nicio funcție de ofuscator.

ByteRun Protector pentru PHP. Un produs comercial, în funcție de tipul de licență, vă permite să protejați scripturile atât la nivel de server, cât și la nivel de cod sursă. Protecție server cu caracteristici standard, nimic special. Protecția la nivel de script poate fi îndepărtată foarte ușor automat și manual. Nu există un decodor public pentru versiunea de server.

Protecția foarte populară în rândul dezvoltatorilor autohtoni. Este un modul de protecție plin de cod gol, care este conectat prin includere la scripturi protejate. Algoritmul de decodare este foarte simplu, nu provoacă dificultăți în eliminarea manuală și automată. În toate cazurile, este eliminat complet din codul sursă, nu există nicio funcție de ofuscator. Există mici caracteristici pentru cazuri speciale de decodare, dar acestea nu vor fi descrise aici.

CodeLock. O altă apărare populară, un exemplu grozav de programare analfabetă. Este o aplicație php care vă permite să codificați atât scripturile în sine, cât și rezultatul muncii lor în browser folosind javascript. Scripturile pot fi protejate cu o parolă, dar din cauza implementării mediocre, parola este ușor de aflat chiar și fără a elimina protecția articulată. Modulul de protecție este un script php plin de cod gol care se conectează la scripturi protejate. Algoritmul de protecție este foarte simplu, este eliminat complet în codul sursă. Nu există nicio funcție de ofuscare.

TrueBug PHP Encoder, mai recent TrueBug PHP Obfuscator & Encoder. O pistă foarte interesantă de explorat. Înainte de versiunea 1.0.2, au fost utilizate instrumentele standard php pentru compresia gzip, începând cu versiunea 1.0.3 autorii au dezvoltat propriul algoritm de compresie. Noul produs TrueBug PHP Obfuscator & Encoder adaugă funcția de ofucare și optimizare a codului sursă. Singurul punct slab al protecției este algoritmul de decodare a scriptului invariabil, dar algoritmul în sine se modifică pentru fiecare versiune a protecției. După parsare, protecția este ușor îndepărtată exact la codul sursă, desigur, cu condiția ca obfuscatorul să nu fie folosit.

Zorex PHP CryptZ. Protecția, ca și CodeLock, este o aplicație php, necesită o bază de date MySQL pentru a funcționa. Modulul de protecție este un plug-in script php criptat în mai multe straturi. După analiză, algoritmul este îndepărtat foarte ușor exact în codul sursă. Nu există nicio funcție de ofuscator.

Cod PHP gratuit. Serviciu online gratuit pentru codificarea scripturilor php. Modulul de protecție este un plug-in php-script acoperit de Zend, care trebuie descărcat de pe site.După ce Zend este eliminat și algoritmul este analizat, protecția poate fi ușor eliminată complet în codul sursă. Algoritmul de protecție este neschimbat, nu există nicio funcție de ofuscator.

Script PHP, codificare primitivă, standard base64. Nu merită mai multă atenție și nu prezintă niciun interes practic.

Creăm propria noastră pagină de înregistrare pentru multisite în locul standardului wp-signup.php.

Într-o instalare tipică WordPress, pagina de înregistrare (autentificare, resetare parolă) afișează fișierul wp-login.php.

  • /wp-login.php - autorizare
  • /wp-login.php?action=register - înregistrare
  • /wp-login.php?action=lostpassword - resetați parola

Există condiții separate pentru multisite în wp-login.php. Deci, când faceți clic pe linkul /wp-login.php?action=register pe un multisite, WordPress va redirecționa către pagina /wp-signup.php. În multe teme, pagina nu arată foarte atractivă, așa că ne vom crea propria noastră.

Site-ul principal al rețelei

Implicit, WordPress deschide o pagină de înregistrare (wp-signup.php) pe domeniul (site-ul) principal al rețelei. Cu toate acestea, puteți face o pagină de înregistrare separată pentru fiecare site din rețea, chiar dacă acestea au teme diferite. Vom lua în considerare cazul în care toate site-urile din rețea au propria lor pagină de înregistrare, dar se folosește aceeași temă, iar site-urile diferă doar prin limbă. Dacă utilizați teme diferite, va trebui să scrieți mai mult cod.

functions.php?

Nu. Numele acestui fișier pare să fie menționat în fiecare articol WordPress. În cazul nostru, având în vedere că funcționalitatea de înregistrare este concepută pentru mai multe site-uri, este logic să o mutați în plugin-uri MU care se încarcă atunci când deschideți orice site.

Digresiune lirică

Este de remarcat faptul că pluginurile MU sunt încărcate mai devreme decât pluginurile obișnuite și înainte ca nucleul WordPress să fie complet încărcat, astfel încât apelarea unor funcții poate duce la erori fatale în PHP. Această încărcare „devreme” are și avantajele sale. De exemplu, în interiorul oricărei teme, nu vă puteți agăța de unele acțiuni care sunt declanșate chiar înainte ca fișierul functions.php să fie încărcat din temă. Un exemplu în acest sens sunt acțiunile din pluginul Jetpack de forma jetpack_module_loaded_related-posts (related-posts - numele modulului) cu care este posibilă urmărirea activității modulelor în Jetpack. Este imposibil să te „agățăm” de această acțiune din fișierul temă, deoarece acțiunea a fost deja declanșată înainte ca tema să fie încărcată - pluginurile sunt încărcate înaintea temelor. Puteți arunca o privire la o imagine generală a ordinii de încărcare WordPress pe pagina Action Reference din codex.

Ordinea fișierelor

Pluginurile MU pot conține orice număr de fișiere și orice structură care vi se pare logică. Mă țin de ceva ca această ierarhie:

| -mu-plugins | - | -load.php | - | - | -selena-network | - | - | - | -înregistrare | - | - | - | - | -plugin.php | - | - | - | - | -... | - | - | - | -jetpack | - | - | - | - | -plugin.php

Toate „pluginurile” necesare pentru rețeaua noastră sunt conectate în fișierul load.php:

// Încărcați traduceri pentru toate suplimentele load_muplugin_textdomain ("selena_network", "/ selena-network / languages ​​​​/"); // Înregistrarea în rețea necesită WPMU_PLUGIN_DIR. „/selena-network/signup/plugin.php”; // Alte pluginuri // necesită WPMU_PLUGIN_DIR ...

Folderele cu pluginuri sunt stocate în folderul selena-network, fiecare având propriul plugin.php, pe care îl includem în load.php. Acest lucru vă oferă flexibilitate și capacitatea de a opri și a porni rapid lucrurile.

Adresa paginii de înregistrare

Pentru a specifica adresa paginii de înregistrare, se folosește filtrul wp_signup_location. Acesta poate fi găsit în interiorul fișierului wp-login.php și este responsabil pentru redirecționarea către wp-signup.php.

Caz „înregistrare”: if (is_multisite ()) (wp_redirect (aplicare_filtre ("wp_signup_location", network_site_url ("wp-signup.php"))); ieșire;

Să adăugăm funcția noastră la mu-plugins / selena-network / signup / plugin.php, care va returna adresa paginii de înregistrare de pe site-ul curent:

Funcția selena_network_signup_page ($ url) (returl home_url (). "/ Înregistrare /";) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network este prefixul pe care îl folosesc în numele tuturor funcțiilor din interiorul pluginurilor MU de pe site-ul meu pentru a evita coliziunile, ar trebui să fie înlocuit cu propriul meu prefix unic. Filtrul are o prioritate de 99, deoarece unele plugin-uri precum bbPress și BuddyPress pot suprascrie această adresă URL cu propria lor (plugin-urile MU se încarcă mai devreme decât pluginurile obișnuite, vezi mai sus). Rețineți că home_url () este folosit în loc de network_site_url () pentru a menține vizitatorul pe același domeniu. Orice adresă URL poate fi folosită ca adresă.

Creaza o pagina

Acum haideți să creăm o pagină cu adresa site.com/signup/ prin interfața obișnuită, iar în folderul cu tema copil, șablonul pentru noua noastră pagină este page-signup.php. Un ID unic poate fi folosit în locul cuvântului „înscriere”.

În noul șablon, trebuie să apelați funcția selena_network_signup_main (), care va afișa formularul de înregistrare.

Trebuie remarcat că întregul proces cu șabloane nu este necesar și, în schimb, vă puteți crea propriul cod scurt, care va apela și funcția selena_network_signup_main ().

wp-signup.php și wp-activate.php

Acum să începem să creăm o funcție care va afișa formularul de înregistrare. Pentru a face acest lucru, copiați fișierele wp-signup.php și wp-activate.php din rădăcina WordPress în mu-plugings / selena-network / signup / (și nu uitați să le conectați în mu-plugins / selena-network / signup / plugin.php) ... Manipulările ulterioare cu fișierele sunt extrem de dificile și necesită timp de descris, așa că va trebui să le faceți singur. Voi descrie exact ce trebuie făcut și voi publica fișierele sursă ale proiectului meu:

  1. La începutul fișierului, eliminați toate solicitările, apelurile de funcție și alt cod din afara funcțiilor.
  2. Redenumiți toate funcțiile adăugând prefixe unice la nume.
  3. Înfășurați partea de jos a codului wp-signup.php în funcția selena_network_signup_main și scrieți global $ active_signup la început; ...
  4. Înlocuiți aspectul cu al dvs. în locurile potrivite.

În interiorul wp-activate.php, trebuie să faceți aproximativ același lucru:

  1. Eliminați tot codul din afara funcțiilor, înfășurați aspectul într-o funcție separată.
  2. Schimbați aspectul acolo unde este necesar.

Fișierul wp-activate.php este responsabil pentru pagina de activare a contului. Ca și în cazul paginii de înregistrare, trebuie să creați un șablon separat pentru aceasta, în interiorul căruia apelați funcția din fișierul wp-activate.php.

Trimitem scrisori de activare

Pagina de înregistrare trimite vizitatorului un e-mail cu un link pentru a-și activa contul. În mod implicit, acest lucru este realizat de funcția wpmu_signup_user_notification () din fișierul ms-functions.php. Funcționalitatea sa poate fi împrumutată pentru funcția dvs. Motivul pentru a opri utilizarea acestei funcții este că trimite linkul de activare a contului de la wp-activate.php. Puteți „dezactiva” această funcție folosind filtrul wpmu_signup_user_notification, dând false pe el (dacă nu faceți acest lucru, scrisoarea de activare va fi trimisă de două ori, bine, de fapt, două litere diferite).

Funcția armyofselenagomez_wpmu_signup_user_notification ($ user, $ user_email, $ key, $ meta = array ()) (// ... // Cod din funcția wpmu_signup_user_notification () wp_mail ($ user_email, wp_specialchars_decode ($ message_headers), $ mesaj; return false;) add_filter ("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

Drept urmare, pagina de înregistrare în tema Selena pare mult mai curată și mai precisă.

Concluzie

Există multe alte modalități nu foarte corecte de a face același lucru pe Internet - redirecționări Apache, formulare AJAX care nu vor funcționa fără Java Script, etc. site-ul propriu.

Rețineți că ar trebui să editați fișierele cu atenție și să încercați să nu vă abateți mult de la original, astfel încât, în viitor, dacă WordPress modifică fișierele wp-signup.php și wp-activate.php, ar fi mai ușor să le comparați pentru a le găsi schimbări.

Nu uitați să verificați codul sursă al tuturor funcțiilor descrise mai sus pentru a înțelege pe deplin ce și cum se întâmplă în interiorul codului.

Primă. Protecție împotriva spammerului

Chiar și cele mai mici site-uri WordPress sunt supuse înregistrărilor frecvente de spam. Poți scrie condiții nesfârșite pentru filtrarea boților, de multe ori mai degrabă ca încercarea de a crea inteligență artificială 🙂 În cazul unui multisite, m-a ajutat foarte mult redirecționarea obișnuită în Apache, cu care, la deschiderea /wp-signup.php și /wp- acitvate.php, am cerut 404 (nu sunt un expert în configurarea Apache, așa că regulile mele s-ar putea să nu fie foarte corecte).

RewriteEngine On RewriteBase / RewriteRule ^ wp-signup \ .php - RewriteRule ^ wp-activate \ .php - # BEGIN WordPress # Nu atingeți regulile WordPress în mod implicit :) # ... # END WordPress

P. S. Încerc să descriu cât mai detaliat câteva lucruri de la terți, pentru că atunci când am început, uneori nu era nimeni care să solicite și să explice multe lucruri. De asemenea, cred că astfel de sfaturi mici despre alte materiale vor împinge pe cineva să învețe ceva nou și să-și extindă domeniul de cunoștințe. Expresiile regulate sunt folosite în intrările RewriteRule, nu sunt deloc complexe, de exemplu, caracterul ^ înseamnă începutul unei linii.

„Ei sparg site-urile bancare pentru bani, Pentagonul pentru spionaj și nimeni nu are nevoie de proiectul meu”, din păcate, asta cred majoritatea proprietarilor de bloguri personale, cărți de vizită pe Internet, birouri virtuale ale companiilor mici. Doar puțini oameni se gândesc la cum să protejeze site-ul, dar în zadar. În realitățile moderne, absolut orice platformă, indiferent de tip sau popularitate, prezintă interes în ochii hackerilor. Cine poate avea nevoie de resursa dvs. și de ce? Să ne dăm seama:
1. Farse de scriptkiddis. Jargonul se referă la aspiranții hackeri care fac primii pași pe „partea întunecată”. După ce au achiziționat mai multe instrumente sau după ce au scris câteva programe proprii, ei sunt dornici să-și testeze performanța pe prima victimă pe care o întâlnesc și, de regulă, alege cele mai simple ținte (CMS slab protejate și neactualizate).
2. SEO negru. Serviciile optimizatorilor necinstiți sunt încă în uz - încă se practică plasarea de link-uri ascunse în codul proiectelor cu mai mult de 10 TCI. Și, în primul rând, resursele de pe motoarele open source (Joomla, Drupal, OpenCart și așa mai departe) sunt atacate.
3. Construirea unei rețele bot. Protejarea WordPress cu htaccess și plugin-uri este, de asemenea, relevantă, deoarece absolut orice resursă poate fi folosită pentru a crea o rețea zombie folosită în atacurile DDoS, spam, etc.
4. Daune colaterale. În cele din urmă, este posibil să nu fiți atacat - scopul principal va fi găzduirea, iar site-ul va servi doar ca o mare vulnerabilitate a infrastructurii IT a furnizorului. Desigur, hackerilor nu le va păsa de soarta lui.

Consecințele hacking-ului pot fi cele mai neplăcute: pierderea conținutului sau a resursei în ansamblu, pesimizarea rezultatelor motoarelor de căutare, pierderea audienței din cauza inscripției „Site-ul poate amenința securitatea unui computer sau dispozitiv mobil” și chiar și riscul de a fi implicat într-un dosar penal dacă au fost comise acțiuni ilegale pe baza resursei dvs. web.

Deci, putem spune cu încredere că problemele de securitate afectează absolut fiecare webmaster. Și dacă le neglijezi, toate eforturile de a promova motorul de căutare (și asta sunt bani și timp prețios) se pot pierde peste noapte. Problema este foarte urgentă, așa că am decis să încep o serie de articole dedicate amenințărilor rețelei și metodelor de a le trata. Popularul sistem CMS - Wordpress va fi luat în considerare în trei numere.

Metode de securizare a unui site WordPress

Una dintre cele mai primitive metode de hacking este forța brută. Literal, termenul este tradus ca „forță brută” și înseamnă obținerea unei perechi de autentificare/parolă prin enumerarea în forță brută a opțiunilor posibile. Adesea, brute-forcer încearcă să-și facă viața mai ușoară profitând de erorile din setările motorului și serverului - acest lucru îi ajută, de exemplu, să afle numele contului, ceea ce reduce semnificativ numărul de combinații. Este vorba despre eliminarea acestor vulnerabilități, precum și despre metodele de combatere a încercărilor de acces neautorizat care vor fi discutate.

1. Folosiți o autentificare unică de administrator

În mod implicit, sistemul oferă crearea unui utilizator numit admin. Cu toate acestea, pentru a vă proteja site-ul WordPress, cel mai bine este să utilizați un login format dintr-un set de litere și numere aleatorii. Pe o resursă live, numele administratorului poate fi schimbat fără probleme utilizând una dintre cele două metode:

Prin panoul de administrare. Accesați secțiunea „Utilizatori”, faceți clic pe butonul „Adăugați nou” și creați un cont. În câmpul „Rol”, selectați „Administrator” și confirmați operația. Apoi reconectați-vă în numele contului nou creat, reveniți la secțiunea „Utilizatori”, selectați „admin” și faceți clic pe „Șterge”. În fereastra care se deschide, puneți butonul radio în poziția „Conectați tot conținutul” și selectați un nou administrator din lista derulantă, apoi faceți clic pe „Confirmați ștergerea”.
... Folosind phpMyAdmin. Este mult mai ușor să efectuați aceeași procedură prin intermediul panoului de control al bazei de date. Selectați baza de date necesară, găsiți tabelul wp_users, găsiți linia „admin” (ID = 1), faceți clic pe „Schimbare” și introduceți numele dorit.

2. Creați un cont de publicare dedicat

Dacă administratorul este „lăsat afară”, aceasta va oferi protecție suplimentară. Creați un cont separat pentru postarea articolelor și legați-le toate materialele publicate anterior în modul descris în paragraful 1. Apoi, adăugați informații și comunicați cu cititorii numai dintr-un cont nou.

3. Introduceți o parolă puternică

Urmați recomandările general acceptate: parola trebuie să aibă cel puțin 10 caractere, trebuie să fie unică și să fie formată dintr-o succesiune aleatorie de litere mari și mici, cifre și caractere speciale.
În niciun caz nu trebuie să:
... compuneți o parolă din fraze semnificative
... utilizați orice date faptice (data nașterii, numele de fată, numărul contului bancar, anul curent...)
Acest lucru va elimina riscul căutării unei fraze de acces folosind un dicționar și, de asemenea, va crește semnificativ timpul necesar pentru forța brută. Deci, spargerea unei secvențe de 10 caractere, constând doar din litere mici și numere (hki458p1fa), va dura 10 zile de computer pentru un computer, dar dacă adăugați litere mari și caractere suplimentare (Nv6 $ 3PZ ~ w1), această perioadă. va crește până la 526 de ani, garantând protecție WordPress aproape absolută. Este destul de dificil să găsiți și să vă amintiți aceste parole, mai ales dacă sunteți responsabil de mai multe proiecte. Prin urmare, pentru a le genera și stoca, este mai bine să folosiți manageri speciali, de exemplu, KeePassX, distribuit gratuit, sau un document de testare obișnuit (este mai bine dacă este ambalat într-o arhivă cu o parolă).

4. Schimbați parola pentru baza de date

Regulile de mai sus sunt valabile și pentru securitatea codului de acces MySQL. La urma urmei, este acolo care conține tot conținutul, precum și hash-ul frazei secrete a administratorului. Dacă utilizați deja o parolă slabă, merită să vă faceți osteneala să o schimbați. Acest lucru se face după cum urmează:

1. Accesați panoul de control al phpMyAdmin
2. Deschideți fila „Utilizatori” și selectați proprietarul bazei de date
3. Faceți clic pe „Editați privilegii”
4. Găsiți coloana „Schimbați parola” și introduceți noua secvență secretă în câmpurile corespunzătoare
5. Salvați modificările făcând clic pe „Ok”

Acum nu mai rămâne decât să editați wp-config.php, altfel WordPress nu se va putea conecta la baza de date. Găsiți linia definită (‘DB_PASSWORD’, ‘parolă’); și introduceți noua parolă în locul cuvântului parolă. Rețineți că, deoarece caracterul (‘) este folosit pentru a delimita comenzile SQL, acesta nu trebuie utilizat ca parte a unei fraze de acces.

5. Actualizați parolele în mod regulat

Acestea ar trebui schimbate cel puțin o dată la șase luni. O schimbare extraordinară a frazelor de cod ar trebui ÎNTOTDEAUNA să fie efectuată după:

Transferul datelor pentru autentificare către terți (programatori, administratori de sistem, optimizatori și alți specialiști, chiar dacă lucrează în personalul companiei de găzduire)
... conectarea la o resursă web de pe computerul altcuiva (la o petrecere, într-un internet cafe)
... autorizare de la echipamente care ar fi putut fi compromise (o mașină infectată cu un virus)

6. Nu uitați să schimbați cheile secrete pentru cookie-uri

Acestea se află în fișierul wp-config.php. Sunt 8 dintre ele:

define („AUTH_KEY”, „cheie unică”); define („SECURE_AUTH_KEY”, „cheie unică”); define („LOGGED_IN_KEY”, „cheie unică”); define („NONCE_KEY”, „cheie unică”); define („AUTH_SALT”, „cheie unică”); define („SECURE_AUTH_SALT”, „cheie unică”); define („LOGGED_IN_SALT”, „cheie unică”); define („NONCE_SALT”, „cheie unică”);

define („AUTH_KEY”, „cheie unică”); define („SECURE_AUTH_KEY”, „cheie unică”); define („LOGGED_IN_KEY”, „cheie unică”); define („NONCE_KEY”, „cheie unică”); define („AUTH_SALT”, „cheie unică”); define („SECURE_AUTH_SALT”, „cheie unică”); define („LOGGED_IN_SALT”, „cheie unică”); define („NONCE_SALT”, „cheie unică”);

După cum ați putea ghici din numele variabilelor, cheile sunt responsabile pentru criptarea cookie-urilor (argoul binecunoscut: cookie - cookie-uri, sare - sare, hrănim hackerii cu cookie-uri sărate), care sunt folosite la realizarea site-ului. „Amintiți-vă” computerul după autorizare. Concluzia este că, chiar dacă atacatorul pune la dispoziție hash-ul parolei de administrator, nu va putea genera cookie-urile necesare accesării site-ului fără frazele secrete enumerate.

Pentru a îmbunătăți securitatea, secvențele de caractere implicite ar trebui înlocuite cu unele unice imediat după implementarea CMS-ului. Pentru comoditate, dezvoltatorii au creat un generator web situat la adresa www.api.wordpress.org/secret-key/1.1/salt/ - când intrați, veți vedea cheile, iar dacă reîmprospătați pagina, combinațiile sunt actualizate .

7. Autorizare dubla pentru zona de administrare

Htaccess vă permite să vă securizați și mai mult site-ul WordPress prin adăugarea de autentificare la nivel de server. Codul va arăta astfel:

< Files wp- login. php> # Am setat tipul de autentificare de bază - asta înseamnă că atunci când încerci# accesarea directorului sau fișierului specificat va fi solicitată pentru o parolă: AuthType de bază # Introduceți textul care va fi afișat în antetul formularului: AuthName „Identifică-te” # Specificați calea către fișierul care conține expresia de acces: AuthUserFile „/home/site/.htpasswd” # Indicăm că la accesarea fișierului wp-login.php trebuie să introduceți parola: Necesită utilizator valid # Interziceți accesul la fișierul .htpasswd terților:< Files . htpasswd>ordona permite, nega nega de la toti

# Selectați fișierul script de autorizare: # Setați tipul de autentificare de bază - asta înseamnă că atunci când încercați # să accesați directorul sau fișierul specificat, vi se va solicita o parolă: AuthType basic # Introduceți textul care va fi afișat în antetul formularului: AuthName „Identificați-vă” # Specificați calea către fișierul care conține expresia de acces: AuthUserFile „/home/site/.htpasswd” # Indicăm că atunci când accesați fișierul wp-login.php, trebuie să introduceți o parolă: Require valid-user# Interziceți accesul la fișierul .htpasswd terților: ordona permite, nega nega de la toti

În același timp, ar fi bine să aveți grijă de securitatea htaccess-ului în sine. Strict vorbind, o astfel de directivă ar trebui să fie specificată în principalele setări de găzduire, dar având în vedere neglijența unor furnizori, ar trebui să fii sigur:

Înlocuiți numele dorit în loc de „login”. Rămâne să generați parola în sine, precum și să o criptați, deoarece stocarea unor astfel de date în text clar este un lux nepermis. Există multe servicii pentru aceasta, dar este mai bine să scrieți singur scriptul necesar. Acest lucru se face după cum urmează:

1) Creați un fișier .php în notepad, de exemplu crypt.php
2) Introdu codul acolo, înlocuind parola în loc de cuvântul „Parolă”:

3) Salvați fișierul și încărcați-l în directorul rădăcină
4) Urmați linkul site_name.ru / crypt.php - pe ecran va apărea hash-ul parolei
5) Salvați această valoare în fișierul .htpasswd și încărcați-o în directorul rădăcină și ștergeți crypt.php

Atingerea finală este interzicerea vizualizării conținutului directorului de resurse web. Este suficient să adăugați o singură linie la htaccess:

Opțiuni Toate - Indici

Opțiuni Toate -Indici

Acest lucru se face astfel încât hackerii să nu afle ce fișiere se află în directoarele proiectului. Pe multe site-uri de găzduire, această directivă este deja inclusă în setările serverului, dar dacă acest punct este trecut cu vederea, ar trebui să o înregistrați singur.

8. Instalați captcha

Utilizarea captcha vă va permite să tăiați, dacă nu pe toți, cel puțin majoritatea roboților cu forță brută și, în același timp. Directorul de pluginuri pentru protecția site-ului WordPress oferă multe opțiuni. Pe lângă conectarea unei soluții proprietare de la Google, Captcha by BestWebSoft de tip mixt (grafică și text), care se bazează pe operații matematice, prezintă un mare interes. Independența serviciului, claritatea și nivelul acceptabil de complexitate fac din modul unul dintre cele mai bune.

Personalizarea nu este o mare problemă. Fila „De bază” vă permite să alegeți unde să afișați captcha, precum și să specificați un titlu și un simbol pentru a marca câmpurile necesare.

Secțiunea „Avansat” oferă posibilitatea de a crea propriile mesaje de eroare, precum și de a activa pachete de imagini suplimentare pentru a face viața și mai dificilă pentru roboți.

O altă caracteristică utilă este lista albă încorporată de adrese IP pentru care captcha nu va fi afișat.

Rezultatul instalării și activării pluginului va fi apariția unui formular pe pagina de autorizare:

9. Schimbați adresa de administrator

Vorbind despre cum să protejați un site WordPress, merită menționat o modalitate mai radicală, dar și mai complicată - schimbarea URL-ului paginii de autentificare la nivel de script. Procedura se desfășoară în mai multe etape:

1. Redenumiți fișierul wp-login.php. Utilizați o secvență aleatorie de litere mici, numere și liniuțe latine. De exemplu: abc-123.php
2. Găsiți toate referințele la wp-login.php în fișierul rezultat și înlocuiți-le cu noul nume.
3. Pentru ca site-ul să funcționeze corect, înlocuirea trebuie făcută și în: 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

După aceste manipulări, panoul de administrare va fi localizat pe site-ul / abc-123.php. Accesul la noul fișier ar trebui să fie limitat și protejat cu parolă, așa cum este descris mai sus. De asemenea, este posibil să induceți în eroare potențialii hackeri creând un fișier wp-login.php fals și setând și o parolă pentru acesta.

O opțiune și mai simplă este să utilizați extensia „Redenumiți wp-login.php”. După instalarea pluginului pentru protejarea site-ului, va apărea un câmp nou în meniul „Setări” -> „Permalink-uri”:

10. Specificați IP-ul administratorului

Securitate suplimentară poate fi furnizată dacă aveți o adresă IP statică. Interzicerea accesului la wp-login.php de pe orice alt computer decât al tău va face viața mult mai grea hackerilor:

< Files wp- login. php>comanda refuza, permite refuzul de la toate permit din 127.0.0.1, 127.0.02 # Separați-vă adresele IP cu virgule

comanda refuza, permite refuzul de la toate permit de la 127.0.0.1, 127.0.02 # Separați adresele IP cu virgule

11. Dezactivați erorile de autorizare

La forțarea brutală a parolelor, un atacator va găsi foarte util să știe că datele introduse sunt incorecte. Astfel de mesaje sunt afișate la fiecare încercare de conectare nereușită, iar WordPress raportează și ceea ce a fost introdus incorect, nume de utilizator sau parolă. Pentru a scăpa de ele, trebuie doar să adăugați o singură linie la functions.php:

add_filter („erori de conectare”, create_function („$ a”, „return null;”));

add_filter („erori de conectare”, create_function („$ a”, „return null;”));

Pentru a face acest lucru, selectați „Aspect” -> „Editor” -> „Funcții tematice” în panoul de administrare. Este necesar să scrieți codul după eticheta de deschidere

12. Utilizați o conexiune sigură.

Pentru a cripta traficul dintre computerul utilizatorului și serverul web, există protocolul https, a cărui utilizare exclude posibilitatea interceptării datelor importante, în cazul nostru, a datelor de identificare. Pentru a-l activa, mai întâi trebuie să achiziționați un certificat SSL care îndeplinește două funcții simultan: autentificarea unei resurse web și criptarea informațiilor transmise. Îl puteți obține în centre specializate sau de la un număr de registratori de nume de domenii. În scopuri non-comerciale este suficient să obțineți un certificat de nivel de intrare gratuit (un astfel de certificat este oferit de compania www.startssl.com). În ceea ce privește procesul de instalare, de regulă, acesta este descris în detaliu în secțiunea de ajutor a hosterului.

După ce ați primit un certificat SSL, trebuie să configurați redirecționarea părții administrative a resursei web către o conexiune securizată. În cazul WordPress, acest lucru se face folosind următoarea construcție:

< IfModule mod_rewrite. c>Opțiuni + FollowSymlinks RewriteEngine On RewriteCond% (HTTPS) = dezactivat RewriteCond% (REQUEST_URI) = / wp- login. php RewriteRule (. *) https:

Opțiuni + FollowSymlinks RewriteEngine On RewriteCond% (HTTPS) = dezactivat RewriteCond% (REQUEST_URI) = / wp-login.php RewriteRule (. *) Https: //% (HTTP_HOST)% (REQUEST_URI)

De asemenea, puteți forța utilizarea certificatelor SSL la nivel de motor. Pentru a face acest lucru, deschideți fișierul wp-config.php și adăugați după

define ("FORCE_SSL_ADMIN", adevărat);

define ("FORCE_SSL_ADMIN", adevărat);

În plus, puteți configura o redirecționare globală de la http la https. Pentru site-urile noi, această abordare este optimă, având în vedere că Google încurajează proiectele securizate, acordându-le o anumită prioritate în rezultatele căutării:

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

Opțiuni + FollowSymlinks RewriteEngine on RewriteCond% (HTTPS) = dezactivat RewriteRule ^ (. *) $ Https: //% (HTTP_HOST)% (REQUEST_URI)

13. Blocați intrușii

Dacă este detectată activitate suspectă de la anumite IP-uri, merită să le blocați accesul la site. Acest lucru se face prin analogie cu metoda anterioară. Diferența este că directivele sunt scrise pentru proiect în ansamblu și listăm adresele celor pe care vrem să-i interzicem:

Comanda Permite, Respinge Permite de la toate Respinge de la 127.0.0.1, 127.0.02 # Specificați IP-ul nedorit

Metoda este fiabilă, dar ineficientă. În primul rând, este oarecum necesar să înregistrăm solicitările serviciilor de forțare brută și să le separăm de vizitatorii respectabili. În al doilea rând, cu un atac masiv, pur și simplu nu veți putea urmări și conduce manual IP-ul hackerilor și roboților. Această metodă este bună numai dacă administratorul are o listă neagră de adrese de încredere.

În caz contrar, puteți utiliza un plugin de securitate pentru site-ul WordPress numit WP Cerber. Această soluție este absolut gratuită, oferind în același timp un set foarte impresionant de instrumente concepute pentru a preveni hackingul CMS. Îl puteți instala direct din panoul de administrare.

În mod implicit, sunt oferiți parametri destul de sensibili. Cu toate acestea, numărul de încercări ar trebui crescut la 5 pentru a evita neînțelegerile.

Caseta de selectare de lângă „Blocați IP pentru orice solicitare wp-login.php” ar trebui bifată dacă schimbați adresa de administrator în modul descris mai devreme.

În aceste scopuri, puteți utiliza și instrumentul propriu al WP Cerber:

Modul de plugin pentru protejarea site-ului Citadel, de asemenea, nu necesită configurare suplimentară. Este proiectat pentru a „bala” proiectul în timpul unui atac masiv de forță brută. Este mai bine să debifați caseta de lângă „Înregistrarea încercărilor de autentificare într-un fișier” - acest lucru va ajuta la eliminarea încărcării suplimentare pe server.

Fila „Liste de acces” este folosită pentru a crea o listă de IP „neagră” și „albă” (dacă aveți o adresă statică, asigurați-vă că o adăugați la lista celor de încredere), iar secțiunea „Instrumente” vă permite să importați și exportați setările efectuate anterior. Cu toate acestea, aceste posibilități nu necesită o analiză separată.

14. Mutați fișierul de configurare

După cum am aflat mai sus, wp-config.php stochează astfel de date critice precum login și parola pentru accesarea MySQL, precum și cheile API. Următorul pas pare a fi evident - protejarea WordPress prin htaccess prin restricționarea accesului la fișier:

< Files wp- config. php>Ordine permite, refuză Deny de la toți

Ordine permite, refuză Deny de la toți

Cu toate acestea, există și o metodă mai fiabilă. WordPress are o caracteristică foarte interesantă despre care puțini oameni o cunosc. Motorul permite plasarea fișierului de configurare la un nivel deasupra directorului rădăcină .. php poate fi mutat în directorul site-ului. În acest caz, fișierul va deveni complet inaccesibil prin Internet, în timp ce informațiile conținute în acesta vor fi în continuare citite de CMS.

15. Adăugați verificarea REFERER

O metodă bine dovedită pentru protejarea WordPress de spam va ajuta, de asemenea, atunci când vă confruntați cu atacuri de forță brută. La urma urmei, forțarea brutală a parolelor nu este în niciun caz o muncă manuală: în aceste scopuri sunt folosite programe specializate. Aceasta înseamnă că, activând verificarea antetului în cererile primite, puteți tăia roboții care au venit de nicăieri cu un REFERER HTTP gol:

< IfModule mod_rewrite. c>RewriteEngine On RewriteCond% (REQUEST_METHOD) POST RewriteCond% (REQUEST_URI). (wp- comentarii- postare | wp- login) \. php * RewriteCond% (HTTP_REFERER)!. * tekseo. d. * [SAU] 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)!. * Site. * RewriteCond% (HTTP_USER_AGENT) ($ RewriteCond) HTTP_USER_AGENT) ($ RewriteCond) ^ $ RewriteCond *) http: //% (REMOTE_ADDR) / $ 1

16. Protejați XML-RPC

Începând cu versiunea 3.5, capacitatea de a dezactiva protocolul de apelare a procedurii de la distanță XML-RPC a dispărut din WordPress. Practic, este nevoie să interacționeze cu aplicațiile mobile, dar nu toată lumea are nevoie de o astfel de funcționalitate. Totodată, xmlrpc.php este folosit activ pentru a efectua atacuri DDoS, fiind călcâiul lui Ahile al întregului proiect.

În plus, hackerii s-au gândit să folosească XML-RPC pentru forța brută. Utilizarea metodei wp.getUsersBlogs vă permite să repetați acreditările mult mai rapid decât folosind formularul de administrare. Deoarece multe apeluri XML-RPC necesită autorizare, o solicitare ca aceasta:

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

wp.getUsersBlogs admin 12345

va determina motorul să vă spună dacă combinația trecută este corectă. Pentru a scăpa de acest flagel, trebuie să dezactivați complet protocolul. Acest lucru se poate face în mai multe moduri:

1) Prin blocarea accesului la fișierul xmlrpc.php prin htaccess

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

trebuie sa te inregistrezi

funcția remove_x_pingback ($ headers) (unset ($ headers ["X-Pingback"]); return $ headers;) add_filter ("wp_headers", "remove_x_pingback");

4) Folosind pluginul de publicare Control XML-RPC, returnând opțiunea corespunzătoare în Setări -> Scriere:

Vă rugăm să rețineți: add-on-ul dezactivează protocolul imediat după activare, iar în setări îl puteți activa bifând caseta de selectare corespunzătoare.

17. Monitorizați atacurile cu forță brută

În cele din urmă, merită menționat un plugin interesant pentru înregistrarea încercărilor de hacking - Authentication and xmlrpc log writer. Deși același WP Cerber are instrumente de monitorizare încorporate, acest modul va fi totuși util, mai ales pentru cei care au nevoie de capacitățile protocolului descris mai sus. AX LogWriter este capabil să urmărească forța brută prin xmlrpc.php, astfel încât să puteți evalua gradul de amenințare și oportunitatea de a refuza complet să-și folosească capacitățile. În sfârșit, pentru cei care nu s-au implicat deloc în securitatea proiectului lor, pluginul pentru protejarea site-ului le va deschide ochii asupra importanței activităților enumerate.

Utilizarea AX LogWriter este simplă. După instalare, secțiunea corespunzătoare va apărea în meniul de administrare, unde puteți face toate modificările necesare:

În câmpul „Tip de eroare”, selectați metoda de salvare. Acceptă scrierea în jurnalul de sistem, jurnalul serverului Apache, precum și capacitatea de a crea un fișier personalizat. În acest din urmă caz, poate fi configurat și cu un nume de jurnal de erori personalizat și o cale de jurnal de erori personalizată. Acest lucru deschide posibilități largi pentru administratorul de sistem - de exemplu, soluția poate fi utilizată împreună cu fail2ban. De asemenea, nu uitați să selectați fusul orar corespunzător în coloana Fus orar.

Jurnalul personalizat poate fi vizualizat direct din panoul de administrare din pagina Custom Log Viewer:

Să rezumam:

Metodele enumerate vor ajuta la creșterea semnificativă a securității resursei dumneavoastră și la protejarea acesteia de forțarea brută, huliganii de rețea și practicarea scriptkiddis-ului. Totuși, tot ceea ce este descris mai sus este doar vârful aisbergului. Atacatorii au metode mult mai sofisticate în arsenalul lor. Și în următorul articol vom vorbi despre cum să te protejezi de hackeri reali folosind diverse vulnerabilități ale motorului și software-ului serverului. Ca și în acest material, pe lângă „regulile generale de igienă” vor fi considerate setările cheie ale CMS, modalitățile de modificare a codului, precum și cele mai relevante plugin-uri.


Când vine vorba de securitatea aplicațiilor, este important să aveți grijă nu numai de hardware și de sistemul de operare, ci și de scrierea de scripturi securizate. În acest articol, veți învăța cum să vă păstrați aplicația în siguranță și mai puțin vulnerabilă. Mai jos este o listă de măsuri pentru a vă ajuta să vă protejați aplicația de tot felul de atacuri:

  1. Validarea datelor primite
  2. Protecție împotriva atacurilor XSS
  3. Protecție împotriva atacurilor CSRF
  4. Prevenirea injectării SQL
  5. Protecția sistemului de fișiere
  6. Protecția datelor sesiunii
  7. Eroare la procesare
  8. Protejarea fișierelor incluse

Validarea datelor primite

Când vă proiectați aplicația, trebuie să vă străduiți să o protejați de datele primite „proaste”. Regula de urmat este ceva de genul: „Nu credeți niciodată ce a introdus utilizatorul”. Deși majoritatea utilizatorilor nu reprezintă o amenințare, există întotdeauna posibilitatea ca cineva să dorească să-ți pirateze site-ul folosind date „proaste” introduse prin formulare sau bara de adrese. Dacă validezi și filtrezi întotdeauna datele primite, atunci ai șanse mari să scrii o aplicație sigură.

Verificați-vă întotdeauna datele în scripturi PHP. Dacă utilizați JavaScript pentru a valida datele, un atacator le poate dezactiva oricând în browserul său. În acest caz, aplicația dvs. este în pericol. Nimeni nu este împotriva validării JavaScript, dar pentru o bună protecție, trebuie să verificați datele din scripturile PHP.

Protecție împotriva atacurilor XSS

Un atac cross-site scripting sau XSS este un atac bazat pe injectarea de cod în pagini potențial vulnerabile. Pericolul este că codul rău intenționat poate fi introdus prin formulare și apoi afișat în browser.

Să presupunem că site-ul dvs. are un formular pentru introducerea comentariilor, care sunt afișate imediat după adăugare. Un atacator ar putea introduce un comentariu care să conțină cod JavaScript. După trimiterea formularului, datele sunt trimise la server și introduse în baza de date. După aceea, datele sunt preluate din baza de date și noul comentariu este afișat pe pagina HTML, inclusiv codul JavaScript încorporat. Poate redirecționa utilizatorul către o pagină rău intenționată sau un site de phishing.

Pentru a vă proteja aplicațiile, rulați datele primite prin funcția strip_tags (), care va elimina orice etichete prezente. Când afișați datele într-un browser, utilizați funcția htmlentities ().

Protecție împotriva atacurilor CSRF

Următorul tip de atac pe care îl vom analiza este un atac CSRF sau falsificarea cererii între site-uri. Atacatorul folosește diverse trucuri pentru a obține informații confidențiale sau pentru a face o înțelegere fără știrea victimei. Acest lucru se întâmplă în principal pe site-uri prost protejate, unde logica de afaceri se bazează pe munca solicitărilor GET.

În general, cererile GET sunt idempotente. Idempotenta, în acest context, înseamnă că una și aceeași pagină poate fi accesată de orice număr de ori fără nicio interferență din exterior. De aceea, cererile GET ar trebui folosite doar pentru a obține acces la informații, dar în niciun caz pentru a efectua diferite tipuri de tranzacții.

Următorul exemplu simplu arată cum un site nesecurizat poate fi supus unui atac CSRF:

Să presupunem că Bob dorește să efectueze un atac CSRF asupra Alicei. Și-a format o adresă URL specială și i-a trimis-o Alicei prin e-mail:

Vizitați site-ul meu!

Dacă Alice este autorizată pe site-ul example.com și urmează acest link, atunci 1000 USD vor fi transferați din contul ei în contul lui Bob. Alternativ, Bob poate trimite și o imagine și poate completa adresa URL „proastă” în atributul src.

Browserul nu va putea afișa această imagine, deoarece nu există, dar cererea se va face fără știrea și participarea Alicei.

Pentru a preveni acest tip de atacuri, utilizați numai cereri POST către procesele concepute pentru a schimba informațiile din baza de date. Nu utilizați $ _REQUEST. Utilizați $ _GET pentru a gestiona parametrii GET și $ _POST pentru a prelua parametrii POST.

Ca măsură suplimentară, puteți genera un simbol unic și îl puteți atașa la fiecare solicitare POST. Când un utilizator se conectează în sistem, puteți genera un token aleator și îl puteți scrie în sesiune. Deoarece toate formularele sunt afișate utilizatorului, acest simbol trebuie să fie scris într-un câmp ascuns. Logica de afaceri a aplicației trebuie să ofere funcționalitate care va verifica token-ul din formulare și token-ul stocat în sesiune.

Prevenirea injectării SQL

Ar trebui să utilizați PDO pentru a rula interogări în baza de date. Cu interogări parametrizate și instrucțiuni pregătite, puteți atenua amenințarea injectării SQL.

Să aruncăm o privire la următorul exemplu:

În codul de mai sus, trimitem o solicitare către metoda prepare (), inclusiv parametrii numiți:: nume și: vârstă. Astfel, interogarea este pre-compilată pentru înlocuirea ulterioară a datelor. Când este apelată metoda execute (), cererea este complet formată și executată. Dacă utilizați această tehnică, atunci toate încercările unui atacator de a efectua injecția SQL vor fi anulate.

Protecția sistemului de fișiere

În calitate de dezvoltator responsabil, ar trebui să scrieți întotdeauna cod care nu vă compromite sistemul de fișiere. Să ne uităm la codul care trimite un fișier spre descărcare în funcție de datele transmise de utilizator.

Acest script este foarte periculos, deoarece face posibilă accesarea oricărui director care este accesibil din fișierul cu scriptul: directorul cu sesiuni, foldere de sistem și multe altele.

Protecția datelor sesiunii

În mod implicit, toate informațiile despre sesiune sunt scrise în directorul temporar. Dacă utilizați găzduire partajată, cineva în afară de dvs. poate scrie un script și poate citi datele sesiunii. Prin urmare, aveți grijă să stocați parole sau numere de card de credit în sesiuni.

Dacă totuși trebuie să stocați astfel de date într-o sesiune, atunci criptarea este cea mai bună măsură. Acest lucru nu rezolvă complet problema, deoarece datele criptate nu sunt 100% sigure, dar informațiile stocate vor fi ilizibile. De asemenea, ar trebui să luați în considerare faptul că datele sesiunii pot fi stocate în altă parte, cum ar fi o bază de date. PHP are o metodă specială session_set_save_handler () care vă permite să stocați datele sesiunii în felul dumneavoastră.

Începând cu PHP 5.4, puteți transmite un obiect de tip SessionHandlerInterface la session_set_save_handler ().

Eroare la procesare

În timpul dezvoltării unei aplicații, merită să fiți atenți la tot felul de erori care pot apărea, dar acestea trebuie să fie ascunse de utilizatorii finali. Dacă erorile sunt afișate utilizatorilor, acest lucru face site-ul dvs. vulnerabil. Astfel, cea mai bună soluție ar fi configurația diferită pentru serverul țintă și serverul de dezvoltare.

Pe serverul public, trebuie să dezactivați opțiuni precum display_errors și display_start_up_errors, dar opțiuni precum error_reporting și log_errors ar trebui să fie active, astfel încât toate erorile întâlnite de utilizatori să fie înregistrate.

De asemenea, puteți utiliza set_error_handler pentru a vă defini propriul handler de erori. Cu toate acestea, pot exista limitări, deoarece handlerul nativ este inferior mecanismului PHP nativ. Erorile E_CORE_ERROR, E_STRICT sau E_COMPILER_ERROR nu pot fi capturate în același fișier ca un anumit handler. În plus, erorile care pot apărea în handler în sine nu pot fi detectate.

Pentru o modalitate mai elegantă de a captura excepțiile, codul potențial periculos ar trebui plasat într-un bloc try/catch. Toate excepțiile native trebuie să fie obiecte ale claselor sau subclaselor de excepție. Dacă au fost aruncate excepții, atunci acestea pot fi gestionate în blocul try/catch.

Protejarea fișierelor incluse

Adesea, alte fișiere sunt încărcate în scripturi PHP, cum ar fi conectarea la baza de date și multe altele. Unii dezvoltatori acordă acestor fișiere extensia .inc. PHP nu analizează astfel de fișiere în mod implicit. Dacă le adresezi direct, utilizatorul va putea vedea textul acestui fișier. Dacă hackerul reușește să obțină acces la fișierul care stochează conexiunea de date la baza de date, atunci mai târziu poate obține acces la toate datele aplicației tale. Utilizați întotdeauna extensia .php pentru fișierele încărcate și stocați-le acolo unde nu există acces direct de utilizator.

Rezultat

Dacă urmați cele 8 reguli enumerate, atunci acest lucru va îmbunătăți considerabil rezistența aplicației dvs. la diferite tipuri de atacuri. Nu aveți încredere în datele introduse de utilizatori, protejați-vă fișierele și baza de date.

Să ne gândim cine este un hacker? Un hacker nu este un cracker! Oamenii confundă adesea aceste concepte. Un hacker este, în primul rând, o persoană cu gândire ieșită din cutie, iar aceasta este puterea lui, ca să spunem așa.

Pentru a rezista cu succes unui hacker, trebuie să învățați să gândiți în afara cutiei. După cum se spune, o pană este eliminată de o pană.

Astăzi vă voi oferi o modalitate foarte neobișnuită de a vă proteja de atacuri precum php include. Desigur, nu este potrivit pentru toată lumea. Și dacă sincer protejează nu de atacul în sine, ci de detectarea lui. Intrigat?

Cum să găsiți inclusiv...

Să înțelegem mai întâi exact cum încearcă un atacator să găsească o vulnerabilitate.

Arata cam asa. Atacatorul modifică toți parametrii primiți unul câte unul, presupunând că datele acestor parametri intră în funcția include. Ei bine, sau dacă, într-un mod simplu, încearcă să „atașeze” fișiere. Și pentru a determina dacă există sau nu o vulnerabilitate, trebuie să includă un fișier pe sistemul țintă (dacă știe - există o vulnerabilitate, nu - nu există vulnerabilitate).

Desigur, dacă un atacator acționează din exterior, atunci nu cunoaște structura locației directoarelor și fișierelor și nu poate atașa niciun fișier, deoarece nu va ști calea către acesta. Dar există fișiere care există întotdeauna în sistem și pentru care există întotdeauna permisiuni de citire. Pentru Linux, acesta este / etc / passwd, iar pentru Windows, să fie C: \ boot.ini. Dar apropo, Windows ne interesează puțin, așa că mai departe vom vorbi despre passwd

/ etc / passwd

Probabil că ați întâlnit mai multe înregistrări ale formularului în jurnalele dvs.:

Acțiune = .. / 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

Dacă da, atunci ar trebui să știți că ați încercat să găsiți php include (bine, sau capacitatea de a citi fișiere arbitrare, dar nu ne interesează acest lucru acum). Deci, dacă unul dintre parametrii dvs. nu este procesat corespunzător și ajunge într-o funcție include (), apoi ar fi adăugat fișierul / etc / passwd, conținutul acestuia ar fi interpretat ca un script php, iar din moment ce nu conține etichete de cod php, ar fi afișat în browser neschimbat. Acest lucru ar servi drept „marker” pentru ca atacatorul să aibă o vulnerabilitate.

De ce scriu asta, la faptul că atunci când caută include, atacatorul va încerca cu siguranță (garantesc că în 90% din cazuri) va încerca să adauge fișierul / etc / passwd.

Protejați-vă, domnule!

Poate că acum vă gândiți: "Vrea să ofere un WAF obișnuit și să filtreze pachetele prin prezența / etc / passwd în ele?" Nu. Acesta este modul standard. Acesta este un exemplu despre cum gândește o persoană obișnuită.

Să fim puțin creativi. De ce nu adăugăm un cod php la conținutul fișierului passwd? Și dacă dintr-o dată atacatorul reușește să-l conecteze, atunci codul nostru php va fi executat. (Considerați că este o prostie? - uitați-vă la concluzie)

Din moment ce știm că singurul care va ghici să includă acest fișier este un cracker, codul nostru php trebuie să-l interzică și, pentru a preveni piratarea în continuare a sistemului, blocați fișierul vulnerabil și este de dorit să anunțați administratorul. despre incident.

Dar cum adăugați cod php la / etc / passwd, deoarece sintaxa sa este strict reglementată? Fiecare utilizator are un câmp „comentar” - o descriere a utilizatorului, puteți introduce orice doriți acolo (cu excepția două puncte, desigur). Prin urmare, luăm și adăugăm un utilizator în sistem cu comentariul de care avem nevoie. După aceea, / etc / passwd va conține următoarea linie

rădăcină: x: 0: 0: Superutilizator: /:
daemon: *: 1: 5 :: /: / sbin / sh
bin: *: 2: 2 :: / usr / bin: / sbin / sh
sys:*: 3: 3 :: /:
adm: *: 4: 4 :: / var / adm: / sbin / sh
securityuser:*: 1001: 1001::/:

Ei bine, în scriptul de plug-in, efectuăm deja acțiunile de care aveți nevoie - interziceți utilizatorul, blocați cererea, notificați administratorul.

Drept urmare, avem un fel de capcană care vă poate proteja site-ul de hacking.

Concluzie

Da, sunt pe deplin conștient că tot ce este scris mai sus arată ca o prostie. Și înțeleg perfect că nimeni nu va folosi asta în practică. Dar nu pentru asta am scris. Am scris pentru a arăta un exemplu de abordare non-standard în domeniul protecției.

Multumesc pentru atentie =)