Cele mai bune 5 moduri de a rezolva vulnerabilitatea WordPress

Publicat: 2020-02-01

În prezent, WordPress acoperă 33% din web. Înseamnă că un număr mare de utilizatori îl folosesc, ceea ce va atrage cu siguranță mai mulți atacatori și hackeri. Din această cauză, există mai multe amenințări și atacuri precum atacul de injecție SQL, atacul de redirecționare, atacul CSRF, atacul XSS etc. care provoacă o vulnerabilitate în WordPress. Din acest motiv, acest lucru nu înseamnă că WordPress nu este sigur. Trebuie să ne concentrăm pe igienizarea datelor, validarea datelor, evadarea datelor, utilizarea și verificarea nonce, redirecționarea sigură, capabilitățile utilizatorului etc. pentru a face WordPress securizat. Cu toate acestea, vulnerabilitățile din WordPress îl fac nesigur. Deci, să discutăm despre problemele de securitate WordPress.

Vulnerabilitățile vin și la WordPress. Dar cum?

Pe de o parte, există amenințări și atacuri majore din cauza vulnerabilității WordPress . Pe de altă parte, trebuie să depășim sau să prevenim aceste atacuri cu codul nostru în timpul dezvoltării WordPress.

Chiar dacă nu ești un dezvoltator WordPress, te încurajăm să citești postarea pentru că vei putea cunoaște atacurile majore care atrag hackerii să-ți atace site-ul. Și, de asemenea, veți putea înțelege cum să cunoașteți pluginurile și temele prost codificate ale WordPress. Dacă conduceți un magazin online, vă este util să decideți care sunt cele mai bune plugin-uri și teme WooCommerce care sunt sigure.

Cuprins
1 Vulnerabilități de securitate WordPress
2 Amenințări și atacuri
2.1 Vulnerabilitatea WordPress – Atacul de injecție SQL
2.2 Sanitizarea datelor
2.2.1 Exemplu de igienizare a datelor:
2.3 Vulnerabilitatea WordPress – Atacul XSS
2.3.1 Exemplu de atac XSS:
2.4 Validarea datelor
2.4.1 Exemplu de validare a datelor:
2.5 Escape de date
2.5.1 Exemplu de evacuare a datelor:
2.6 Vulnerabilitatea WordPress – Atacul CSRF
2.7 Utilizarea Nonce
2.8 Verificarea unui nonce
2.9 Vulnerabilitatea WordPress – atac de redirecționare
2.10 Redirecționare sigură
2.11 Vulnerabilitatea capacităților utilizatorului
2.12 Reveniți sau ieșiți întotdeauna în WordPress

Vulnerabilități de securitate WordPress

De unde provin codurile vulnerabile?

La început, ar trebui să înțelegem bine unde sunt problemele de securitate WordPress . WordPress constă din cod de bază WordPress, teme și pluginuri care includ PHP, Html, javascript și alte coduri.

Comunitatea open-source inspectează codul de bază WordPress. Există un număr mare de persoane care raportează eroarea și remediază vulnerabilitățile și își asumă meritul pentru aceasta. Vulnerabilitatea din WordPress poate fi exploatată prin atac SQL Injection, atac CSRF, atac XSS, atac de redirecționare și alte tehnici similare. Deci, vulnerabilitatea WordPress din dezvoltarea de bază nu este prea mare.

Nici temele nu interacționează de obicei cu bazele de date wp, nici site-urile nu schimbă temele des. Deoarece Gutenberg este editorul implicit al WordPress, trebuie să alegem Teme WordPress compatibile cu Gutenberg pentru performanță și securitate mai bune. Deci, apar mai puține vulnerabilități cu acesta.

Pe de altă parte, pluginurile WordPress au caracteristici și comportament complexe. De asemenea, interacțiunea este mare cu utilizatorii și bazele de date. Site-ul include un număr mare de plugin-uri pentru a avea funcții externe. Drept urmare, acestea pot aduce un număr mare de vulnerabilități site-ului. Pluginurile introduc vulnerabilități majore în WordPress.

Vulnerabilitatea WordPress - Amenințări și atacuri
Vulnerabilitatea WordPress – WPscan.org

Potrivit wpscan.org, 11% dintre vulnerabilități provin din teme, în timp ce 37% dintre vulnerabilități provin din dezvoltarea WordPress Core. În același mod, restul de 52% provine de la Plugins. Presupun că știți deja ce este un plugin WordPress

Amenințări și atacuri

Dacă sunteți un dezvoltator de teme sau plugin WP, atunci trebuie să aveți o bună cunoaștere a amenințărilor și atacurilor pentru a vă asigura codul în siguranță și pentru a reduce vulnerabilitatea WordPress.

Amenințări și atacuri-Injecție SQL-XSS-CSRF-Redirecționare
Amenințări și atacuri

Există multe atacuri precum atacul SQL Injection, atacul XSS, atacul de redirecționare, atacul CSRF, care pot fi prevenite prin igienizarea datelor, validarea datelor, evadarea datelor, utilizarea și verificarea nonce, redirecționarea sigură, capabilitățile utilizatorului etc.

În calitate de dezvoltator, inamicul tău este în general un utilizator rău intenționat. Astfel de utilizatori dăunează codului nostru. Când încorporăm Never Trust User Inputs în comportamentul nostru zilnic de codare, atunci suntem deja la jumătatea drumului de a scrie cod mai sigur pentru a reduce problemele de securitate în WordPress. Acest lucru vă va ușura munca ca Personalizator WordPress.

Vulnerabilitatea WordPress – atac de injecție SQL

În încercarea de a prelua date critice și sensibile, atacul de injecție SQL injectează un cod SQL rău intenționat în baza de date WP. Acestea vizează site-uri WordPress care utilizează o bază de date SQL – MySQL, Oracle, SQL Server etc.

Cu această intenție, aceștia au acces la parolă, adresa de e-mail sau orice date sensibile, deoarece pot adăuga, edita sau citi cu ușurință datele.

Putem lua un exemplu de benzi desenate The Famous „Bobby Tables”.

Celebrele mese bobby Comic- Amenințare și atac
Mesele bobby celebre Comic

În această bandă desenată o doamnă păstrează numele fiului său „Robert”); DROP TABLE Elevii; –') '; cu comanda SQL care la intrarea in baza de date va sterge intregul tabel elev al scolii daca numele nu a fost igienizat.

Deci, pentru a evita injectarea SQL, trebuie să igienizăm datele introduse de utilizator.

Să discutăm în detaliu despre igienizarea datelor.

Sanitizarea datelor

Dezinfectarea înseamnă asigurarea intrării, curățarea aportului utilizatorului. Acest proces elimină textul invalid, caracterele UTF-8 sau codul din intrare pentru a reduce vulnerabilitatea în WordPress.

Convertește caracterele specifice HTML în entități, elimină toate etichetele. De asemenea, elimină întreruperile de linie, filele și un spațiu alb suplimentar, octeți de bandă care sunt un motiv pentru probleme majore de securitate în WordPress.

Există o mulțime de funcții încorporate WordPress pentru a igieniza datele. Câteva dintre ele sunt în lista de mai jos:

  1. sanitize_email(): elimină toate caracterele care nu ar trebui să fie în e-mail
  2. sanitize_text_field(): igienizează un șir (din intrarea utilizatorului/baza de date)
  3. sanitize_file_name(): elimină caracterele (din numele unui fișier)
  4. sanitize_key(): Eliminați tastele, cu excepția caracterelor alfanumerice minuscule, liniuțe și litere de subliniere.

Exemplu de igienizare a datelor:

 $title=sanitize_text_field($_POST['title']); update_post_meta($post->ID,'title',$title);

Aici, la început, igienizăm titlul. După dezinfectare, actualizăm valoarea titlului în baza de date wp.

 $Name= ' Robert'); DROP TABLE Students; --') '; INSERT INTO Students VALUES ('$Name'); INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --')

Aici, în comanda SQL de mai sus, numele are șir de caractere și caractere speciale și entități care sunt introduse în tabelul student, numele „Robert”); Aceasta închide comanda de inserare SQL și o altă comandă va rula cu jumătate din numele DROP TABLE Students; –') '; iar acest tabel drop studenți șterg toate înregistrările studenților din baza de date.

Deci, aici, dacă igienizarea a fost făcută înainte de a introduce valoarea în baza de date, atunci nu ați fi pierdut întregul tabel al bazei de date pentru elevi.

Să vedem un exemplu de mai jos pentru a face igienizare.


 $Name=sanitize_text_field("' Robert'); DROP TABLE Students; --') ';"); $sql = $wpdb->prepare("INSERT INTO Students VALUES ($Name)"); /* this will only insert 'Robert DROP TABLE Students' */ $wpdb->query($sql);

Aici, în exemplul de mai sus, igienizarea a eliminat entitățile și caracterul suplimentar din nume și permite doar șirul să fie inserat într-o bază de date. În acest fel, putem introduce în siguranță datele și să fim feriți de injecțiile SQL.

Urmați acest link pentru a afla mai multe despre securizarea intrării .

Vulnerabilitatea WordPress – Atacul XSS

Atacul Cross-Site Scripting (XSS) injectează cod javascript vulnerabil în limbajul de scripting pentru a fura date similare ale celuilalt utilizator, cum ar fi cookie-uri, jetoane de sesiune și alte informații. Dacă avem informații despre cookie-uri, atunci ne putem conecta automat. Problemele de securitate din WordPress vin cu cookie-uri furate, deoarece ne putem autentifica cu ușurință cu alte identități.
Se rulează pe un browser. Milioane de oameni care navighează pe site vor fi afectați de acest atac. Fără îndoială, acest atac este unul dintre cele mai grave atacuri.

Exemplu de atac XSS:

 <script <script type=”text/javascript”>
var hacker ='../hacker.php? cookie_data=' +escape(document.cookie);
</script>
</script>

Aici, în acest exemplu de atac XSS, cookie-urile scapă și sunt trimise la variabila „cookie_data” a scriptului hacker.php

Dacă atacatorul ar injecta acest script în codul site-ului web, atunci acesta va fi executat în browserul utilizatorului și cookie-urile vor fi trimise atacatorului, ceea ce este o problemă periculoasă. Deci, pentru a evita acest lucru, trebuie să validăm. Validați și igienizați toate datele de intrare de utilizator și evadați datele de ieșire.

Să discutăm în detalii mai jos.

Data validarii

Validarea înseamnă verificarea introducerii utilizatorului. Acest lucru se face pentru a verifica dacă utilizatorul introduce o valoare validă sau nu.
Există trei moduri de a valida datele, care sunt funcții PHP încorporate, funcții de bază WordPress și funcții personalizate. Nu scăpați niciodată de asta pentru a evita vulnerabilitatea WordPress. Câteva dintre ele sunt în lista de mai jos:

  1. isset()/empty(): verificați dacă variabila există sau nu
  2. is_email(): verificați dacă datele date sunt în format de e-mail sau nu
  3. is_serialized(): verificați dacă valoarea este șir sau nu

Exemplu de validare a datelor:

 $number='12323'; if(intval(number)){ //do your things } else{ esc_html_e('Enter valid number','text-domain'); }

Exemplul de mai sus verifică dacă datele de intrare sunt un număr sau nu, va rula programul doar dacă este un număr. Astfel, validarea datelor ajută la reducerea problemelor de securitate WordPress.

Urmați acest link pentru a afla mai multe despre validarea datelor

Escape de date

Evadarea înseamnă securizarea ieșirii. Este procesul de eliminare a datelor nedorite, cum ar fi etichetele HTML sau scripturi malformate. Escape nu numai că convertește caracterele HTML speciale în entități HTML, ci și afișează, în loc de execuție. Acest lucru se face pentru a preveni atacul XSS și, de asemenea, pentru a vă asigura că datele sunt afișate așa cum se așteaptă utilizatorul să fie.
WordPress oferă câteva funcții de ajutor. Sunt folosite în majoritatea cazurilor. Unii dintre ei sunt:

  1. esc_html(): Escape caractere specifice HTML
  2. esc_attr(): scapă de valoarea atributelor etichetelor HTML
  3. esc_url(): Escape atributele Hypertext REFERENCE

Exemplu de evadare a datelor:

 $url = "javascript : alert ('Hello')";
<a href= "<?php echo esc_url ($url) ;?>"> Text </a> href= "<?php echo esc_url ($url) ;?>"> Text </a>

În exemplul de mai sus, hackerul a introdus codul limbajului de scripting pentru a contesta problemele de securitate ale site-ului WordPress. Așadar, pentru a evita acest lucru, am folosit esc_url pentru a scăpa de valoarea URL și numai după aceea, repetăm ​​valoarea din codul nostru. În acest fel, am prevenit atacul XSS.

Vulnerabilitatea WordPress – Atacul CSRF

Discutând în continuare în Vulnerabilitatea WordPress, atacul de falsificare a cererilor încrucișate este amenințări și atacuri cu un singur clic sau atac de sesiune.
Atacul CSRF permite unui atacator să forțeze un utilizator conectat să efectueze o acțiune importantă fără consimțământul sau știrea acestuia.
Aici, un utilizator autorizat transmite comenzi neautorizate.
Se bazează pe ideea că un utilizator autorizat trimis la o anumită pagină sau URL poate face lucruri pe care nu își dau seama că le-a făcut. Mai mult, poate fi remediat folosind nonce și verifica nonce.

Folosind Nonce

WP generează un token de securitate numit nonce. Este un număr unic care nu se repetă numai pentru dvs., care poate fi utilizat de dvs. pentru o anumită operațiune. Valoarea nonce este valabilă 24 de ore după care expiră, iar cea nouă va fi generată de wp. De asemenea, puteți seta timpul de validare și pentru nonce.
Protejează adresele URL și formularele împotriva utilizării greșite pentru a reduce problemele de securitate existente în WordPress.

Mai mult, pentru a securiza formularul cu un nonce, creați un câmp nonce care este ascuns folosind funcția wp_nonce_field():

 <form method="post"> <!-- some inputs here ... --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>

Mai jos sunt câteva funcții pentru nonce:

  1. wp_nonce_url() – Pentru a adăuga un nonce la o adresă URL.
  2. wp_create_nonce() – Pentru a utiliza un nonce într-un mod personalizat pentru a procesa cererile AJAX.

Verificarea unui Nonce

  1. check_ajax_referer() – Verifică nonce (dar nu referrer), iar dacă verificarea eșuează, în mod implicit, termină execuția scriptului.
  2. wp_verify_nonce() – Pentru a verifica un nonce.
 if(isset($_POST['name_of_nonce_field']) && wp_verify_nonce($_POST['name_of_nonce_field'],'name_of_my_action')){ //do something } else{ esc_html_e('Sorry,your nonce did not verify.','text-domain'); }

Urmați acest link pentru a afla mai multe despre nonce

Vulnerabilitatea WordPress – atac de redirecționare

Vulnerabilitatea WordPress determină, de asemenea, vizitatorii site-ului cu redirecționare automată către un site web rău intenționat.
Acest lucru se întâmplă în general atunci când un vizitator redirecționează către orice altă pagină în loc de pagina sau site-ul pe care l-a solicitat.
Dacă site-ul dvs. are trafic ridicat, acest atac poate duce la un trafic mai mic către site-ul dvs. Nici nu vă veți da seama că vizitatorul site-ului dvs. va fi redirecționat către orice altă pagină. Cu toate acestea, poate fi remediat cu ajutorul redirecționării sigure.

Redirecționare sigură

După o acțiune sau un formular, dacă redirecționați un utilizator către orice pagină, atunci utilizați wp_safe_redirect. wp_safe_redirect verifică o gazdă permisă. Dacă gazda nu este permisă, atunci va redirecționa către adresa URL a site-ului. Deci, va preveni redirecționarea rău intenționată către o altă gazdă. Dar acest lucru nu este verificat de wp_redirect. Deci, pentru a reduce problemele de securitate WordPress, folosirea wp_safe_redirect este o modalitate mai sigură de a redirecționa link-urile.

 $redirect=admin_url('edit.php'); wp_safe_redirect($redirect);

Vulnerabilitatea capacităților utilizatorului

Pe lângă atacul de redirecționare, atacul XSS, atacul CSRF și atacul de injecție SQL, WordPress este vulnerabil și la Capabilitățile utilizatorului. Dacă permiteți oricărui utilizator să vină pe site-ul dvs. pentru a trimite date, atunci verificați capabilitățile utilizatorului. În caz contrar, vei fi victima amenințărilor și a atacurilor.
Cu cât rolul utilizatorului este mai mare, cu atât utilizatorul are mai multe capacități.
Uneori, dezvoltatorii uită să se asigure că utilizatorul care se află pe o pagină care trimite un formular are privilegiile necesare pentru a efectua sau nu acțiunea. Va aduce o sursă comună de vulnerabilitate WordPress.

 if ( current_user_can( 'edit_posts' ) ) { edit_post_link( esc_html__( 'Edit', 'wporg' ), '', ''); }

Să luăm un exemplu de vulnerabilitate Formular de contact 7 (Tipul de vulnerabilitate WordPress)

Numărul de activare al acestui plugin este de 5+ milioane de utilizatori. Dacă există un singur cod vulnerabil, atunci acesta va afecta peste 5 milioane de oameni.

Vulnerabilitate de privilegii-Formular de contact 7
Vulnerabilitatea de privilegii a formularului de contact 7

A existat o vulnerabilitate a capacității în 5.0.3 și versiunile mai vechi. Un utilizator conectat în rolul de Colaborator poate edita cu ușurință formularele de contact. În mod implicit, era accesibil numai utilizatorilor cu rol de administrator și editor.
Deci, existau șanse mai mari de a fi un hack. Noua versiune a pluginului a rezolvat aceste erori.

Reveniți sau ieșiți întotdeauna în WordPress

Dacă ați ratat revenirea sau ați murit după completarea codului în timp ce scrieți orice funcție sau apel ajax. Poate părea simplu, dar poate duce la probleme importante de securitate.

Asigurați-vă că ați adăugat întotdeauna revenirea și moartea în locul dorit. Puteți lua un exemplu de bug-ul Apple #gotofail.

 defined( 'ABSPATH' ) defined( 'ABSPATH' ) or die ( "No script kiddies please!" );
function function adls_view() { global $wpdb; { global $wpdb;
            include( 'inc/frontend/smls-detail/smls-grid-inline.php' );
           exit(); }
function function adls_generate_random_string ( $length ){
           $string = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            $random_string = '';
            for ( $i = 1; $i <= $length; $i ++ ) { { $random_string .= $string[ rand( 0, 61 ) ];
            }
            return $random_string;
       }
 }

Încheierea

Aceasta a fost o postare importantă pentru profesioniștii WordPress cărora le pasă de securitate. Din această postare, ați aflat despre diferitele amenințări și atacuri care aduc vulnerabilitate WordPress. Include o scurtă introducere despre atacul SQL Injection, atacul XSS, atacul CSRF, atacul de redirecționare și multe altele.

Validare-Sanitizare-Escape-Nonce
Puncte de reținut

Au fost, de asemenea, discutate diferite tehnici precum igienizarea datelor, validarea datelor, evadarea datelor, utilizarea și verificarea nonce, redirecționarea sigură și capabilitățile utilizatorului. Din acest motiv, există probleme de securitate în WordPress.

In concluzie ,

  1. Nu aveți încredere niciodată în intrarea utilizatorului pentru a evita vulnerabilitatea WordPress.
  2. Validați, dezinfectați toate intrările și eliminați toate datele de ieșire
  3. Să avem încredere în WordPress!

Dacă v-ați confruntat cu probleme legate de amenințările și atacurile menționate mai sus, anunțați-ne. Experții noștri vă vor oferi o soluție potrivită în funcție de problema dvs.