5 modi migliori per risolvere la vulnerabilità di WordPress
Pubblicato: 2020-02-01Attualmente WordPress copre il 33% del web. Significa che un numero enorme di utenti lo sta utilizzando, il che attirerà sicuramente più aggressori e hacker. A causa di ciò, ci sono più minacce e attacchi come l'attacco SQL Injection, l'attacco di reindirizzamento, l'attacco CSRF, l'attacco XSS, ecc. Che causano una vulnerabilità in WordPress. Per questo motivo, questo non significa che WordPress non sia sicuro. Dobbiamo concentrarci sulla sanificazione dei dati, sulla convalida dei dati, sull'evasione dei dati, sull'utilizzo e sulla verifica del nonce, sul reindirizzamento sicuro, sulle capacità dell'utente, ecc. per rendere sicuro WordPress. Tuttavia, le vulnerabilità di WordPress lo rendono insicuro. Quindi, discutiamo dei problemi di sicurezza di WordPress.
Le vulnerabilità arrivano anche su WordPress. Ma come?
Da un lato, ci sono importanti minacce e attacchi dovuti alla vulnerabilità di WordPress . D'altra parte, dobbiamo superare o prevenire questi attacchi con il nostro codice durante lo sviluppo di WordPress.
Anche se non sei uno sviluppatore WordPress, ti invitiamo a leggere il post perché potrai conoscere i principali attacchi che attirano gli hacker ad attaccare il tuo sito. E sarai anche in grado di capire come conoscere plugin e temi mal codificati di WordPress. Se gestisci un negozio online, è utile per te decidere i migliori plugin e temi WooCommerce che sono sicuri.
Vulnerabilità alla sicurezza di WordPress
Da dove vengono i codici vulnerabili?
All'inizio, dovremmo avere una buona comprensione di dove si trovano i problemi di sicurezza di WordPress . WordPress è costituito da codice core, temi e plugin di WordPress che includono Php, Html, javascript e altri codici.
La comunità open source esamina il codice principale di WordPress. Ci sono un numero enorme di persone che segnalano il bug e correggono le vulnerabilità e se ne prendono il merito. La vulnerabilità in WordPress può essere sfruttata da attacchi SQL Injection, attacchi CSRF, attacchi XSS, attacchi di reindirizzamento e altre tecniche simili. Quindi, la vulnerabilità di WordPress dallo sviluppo principale non è molto.
Né i temi di solito interagiscono con i database wp, né i siti cambiano spesso i temi. Poiché Gutenberg è l'editor predefinito di WordPress, dobbiamo scegliere Temi WordPress compatibili con Gutenberg per prestazioni e sicurezza migliori. Quindi, con esso si verificano meno vulnerabilità.
D'altra parte, i plugin di WordPress hanno caratteristiche e comportamenti complessi. Inoltre, l'interazione è elevata con utenti e database. Il sito include un gran numero di plugin per avere funzionalità esterne. Di conseguenza, possono portare un gran numero di vulnerabilità al sito. I plugin introducono importanti vulnerabilità in WordPress.

Secondo wpscan.org, l'11% delle vulnerabilità proviene da temi mentre il 37% delle vulnerabilità proviene dallo sviluppo di WordPress Core. Allo stesso modo, il restante 52% proviene da Plugin. Presumo che tu sappia già cos'è un plugin per WordPress
Minacce e attacchi
Se sei uno sviluppatore di temi o plugin per WP, devi avere una buona conoscenza delle minacce e degli attacchi per rendere sicuro il tuo codice e ridurre la vulnerabilità di WordPress.

Esistono molti attacchi come l'attacco SQL Injection, l'attacco XSS, l'attacco di reindirizzamento, l'attacco CSRF che possono essere prevenuti mediante la sanificazione dei dati, la convalida dei dati, l'escape dei dati, l'utilizzo e la verifica del nonce, il reindirizzamento sicuro, le funzionalità dell'utente, ecc.
Come sviluppatore, il tuo nemico è generalmente un utente malintenzionato. Tali utenti danneggiano il nostro codice. Quando incorporiamo Never Trust User Inputs nel nostro comportamento di codifica quotidiano, siamo già a metà strada per scrivere codice più sicuro per ridurre i problemi di sicurezza in WordPress. Questo renderà il tuo lavoro più facile come personalizzatore di WordPress.
Vulnerabilità di WordPress – Attacco SQL injection
Nel tentativo di recuperare dati critici e sensibili, l'attacco SQL injection inietta un codice SQL dannoso nel database WP. Si rivolgono a siti WordPress che utilizzano un database SQL: MySQL, Oracle, SQL Server, ecc.
A tal fine, hanno accesso alla password, all'indirizzo e-mail oa qualsiasi dato sensibile in quanto possono facilmente aggiungere, modificare o leggere i dati.
Possiamo fare un esempio del famoso fumetto "Bobby Tables".

In questo fumetto una signora mantiene il nome di suo figlio 'Robert'); DROP TABLE Studenti; –') '; con comando SQL che una volta entrato nel database cancellerà l'intera tabella studenti della scuola se il nome non è stato sanificato.
Quindi, per evitare l'iniezione SQL, dobbiamo disinfettare i dati di input dell'utente.
Parliamo in dettaglio della sanificazione dei dati.
Sanificazione dei dati
Igienizzare significa proteggere l'input, pulire l'input dell'utente. Questo processo rimuove testo non valido, caratteri UTF-8 o codice dall'input per ridurre la vulnerabilità in WordPress.
Converte caratteri specifici HTML in entità, rimuove tutti i tag. Rimuove anche interruzioni di riga, schede e uno spazio bianco aggiuntivo, ottetti di strip che sono una ragione per i principali problemi di sicurezza in WordPress.
Ci sono molte funzioni integrate in WordPress per disinfettare i dati. Pochi di loro sono nell'elenco seguente:
- sanitize_email(): elimina tutti i caratteri che non dovrebbero essere presenti nell'e-mail
- sanitize_text_field(): disinfetta una stringa (dall'input/database dell'utente)
- sanitize_file_name(): rimuove i caratteri (da un nome file)
- sanitize_key(): strisce di chiavi ad eccezione di caratteri alfanumerici minuscoli, trattini e trattini bassi.
Esempio di sanificazione dei dati:
$title=sanitize_text_field($_POST['title']); update_post_meta($post->ID,'title',$title);Ecco, in un primo momento, igienizziamo il titolo. Dopo la sanificazione, stiamo aggiornando il valore del titolo nel database wp.
$Name= ' Robert'); DROP TABLE Students; --') '; INSERT INTO Students VALUES ('$Name'); INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --')Qui nel comando SQL sopra il nome ha una stringa e caratteri speciali ed entità che inseriscono nella tabella dello studente, il nome 'Roberto'); Questo chiude il comando di inserimento SQL e un altro comando viene eseguito con metà del nome DROP TABLE Students; –') '; e questa tabella a discesa gli studenti eliminano tutti i record degli studenti del database.
Quindi qui se la sanificazione è stata eseguita prima di inserire il valore nel database, non avresti perso l'intera tabella del database degli studenti.
Vediamo un esempio qui sotto per fare la sanificazione.
$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);Qui nell'esempio sopra la sanificazione ha rimosso le entità e il carattere extra dal nome e consente solo l'inserimento della stringa in un database. In questo modo, possiamo inserire i dati in sicurezza ed essere al sicuro dalle iniezioni SQL.
Segui questo link per saperne di più sulla protezione dell'input .
Vulnerabilità di WordPress – Attacco XSS
L'attacco Cross-Site Scripting (XSS) inietta il codice javascript del linguaggio di scripting vulnerabile per rubare dati simili dell'altro utente come cookie, token di sessione e altre informazioni. Se disponiamo di informazioni sui cookie, possiamo connetterci automaticamente. I problemi di sicurezza in WordPress derivano dai cookie rubati, poiché possiamo facilmente accedere con altre identità.
Funziona su un browser. Milioni di persone che stanno navigando nel sito saranno colpite da questo attacco. Indubbiamente, questo attacco è uno degli attacchi più gravi.

Esempio di attacco XSS:
<script<scripttype=”text/javascript”>var hacker='../hacker.php?cookie_data='+escape(document.cookie);</script></script>
Qui in questo esempio di attacco XSS, i cookie scappano e vengono inviati alla variabile 'cookie_data' dello script hacker.php
Se l'attaccante inietta questo script nel codice del sito Web, verrà eseguito nel browser dell'utente e i cookie verranno inviati all'attaccante, il che rappresenta un problema pericoloso. Quindi, per evitare ciò, dobbiamo convalidare. Convalida e disinfetta tutti i dati di input dell'utente ed esca dai dati di output.
Discutiamo in dettaglio di seguito.
Convalida dei dati
La convalida sta controllando l'input dell'utente. Questo viene fatto per verificare se l'utente immette un valore valido o meno.
Esistono tre modi per convalidare i dati che sono funzioni PHP integrate, funzioni di base di WordPress e funzioni personalizzate. Non sfuggire mai a questo per evitare la vulnerabilità di WordPress. Pochi di loro sono nell'elenco seguente:
- isset()/empty(): controlla se la variabile esiste o meno
- is_email(): controlla se i dati forniti sono in formato email o meno
- is_serialized(): controlla se il valore è stringa o meno
Esempio di convalida dei dati:
$number='12323'; if(intval(number)){ //do your things } else{ esc_html_e('Enter valid number','text-domain'); }L'esempio sopra controlla se i dati di input sono un numero o meno, eseguirà il programma solo se è un numero. Pertanto, la convalida dei dati aiuta a ridurre i problemi di sicurezza di WordPress.
Segui questo link per saperne di più sulla convalida dei dati
Fuga di dati
L'escape è proteggere l'output. È il processo di eliminazione dei dati indesiderati, come tag HTML o script non corretti. L'escape non solo converte i caratteri HTML speciali in entità HTML, ma li visualizza anche, invece dell'esecuzione. Questo viene fatto per prevenire l'attacco XSS e anche per assicurarsi che i dati vengano visualizzati nel modo in cui l'utente si aspetta che siano.
WordPress fornisce alcune funzioni di supporto. Sono usati per la maggior parte dei casi. Alcuni di loro sono:
- esc_html(): evita i caratteri specifici dell'HTML
- esc_attr(): sfugge al valore degli attributi dei tag HTML
- esc_url(): esegue l'escape degli attributi di riferimento ipertestuale
Esempio di fuga dei dati:
$url="javascript:alert('Hello')";<ahref="<?phpechoesc_url($url);?>">Text</a>href="<?phpechoesc_url($url);?>">Text</a>
Nell'esempio sopra, l'hacker ha inserito il codice del linguaggio di scripting per sfidare i problemi di sicurezza del sito WordPress. Quindi, per evitare ciò, abbiamo usato esc_url per sfuggire al valore dell'URL e solo dopo stiamo facendo eco al valore nel nostro codice. In questo modo abbiamo impedito l'attacco XSS.
Vulnerabilità di WordPress – Attacco CSRF
Discutendo ulteriormente sulla vulnerabilità di WordPress, l'attacco Cross-Site Request Forgery è costituito da minacce e attacchi con un clic o attacchi di sessione.
L'attacco CSRF consente a un utente malintenzionato di costringere un utente connesso a eseguire un'azione importante senza il suo consenso o la sua conoscenza.
Qui, un utente autorizzato trasmette comandi non autorizzati.
Si basa sull'idea che un utente autorizzato inviato a una determinata pagina o URL può eventualmente fare cose che non si rendono conto di aver fatto. Inoltre, può essere risolto con l'uso di nonce e verifica nonce.
Usando Nonce
WP genera un token di sicurezza chiamato nonce. È un numero univoco non ripetuto solo per te che può essere utilizzato da te per un'operazione specifica. Il valore nonce è valido per 24 ore dopodiché scade e quello nuovo verrà generato da wp. Puoi anche impostare il tempo di convalida anche per nonce.
Protegge gli URL e i moduli dall'uso improprio per ridurre i problemi di sicurezza esistenti in WordPress.
Inoltre, per proteggere il modulo con un nonce, crea un campo nonce nascosto usando la funzione wp_nonce_field():
<form method="post"> <!-- some inputs here ... --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>Di seguito sono elencate alcune funzioni per nonce:
- wp_nonce_url() – Per aggiungere un nonce a un URL.
- wp_create_nonce() – Per utilizzare un nonce in modo personalizzato per elaborare le richieste AJAX.
Verifica di un Nonce
- check_ajax_referer() – Controlla il nonce (ma non il referrer) e se il controllo fallisce, per impostazione predefinita termina l'esecuzione dello script.
- wp_verify_nonce() – Per verificare 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'); }Segui questo link per saperne di più su nonce
Vulnerabilità di WordPress – Attacco di reindirizzamento
La vulnerabilità di WordPress causa anche ai visitatori del sito un reindirizzamento automatico a un sito Web dannoso.
Ciò si verifica generalmente quando un visitatore reindirizza a qualsiasi altra pagina anziché alla pagina o al sito Web richiesto.
Se il tuo sito ha un traffico elevato, questo attacco può portare a meno traffico sul tuo sito. Non ti renderai nemmeno conto che il visitatore del tuo sito verrà reindirizzato a qualsiasi altra pagina. Tuttavia, può essere risolto con l'aiuto di Safe Redirect.
Reindirizzamento sicuro
Dopo un'azione o un modulo, se stai reindirizzando un utente a qualsiasi pagina, usa wp_safe_redirect. wp_safe_redirect controlla un host consentito. Se l'host non è consentito, reindirizzerà all'URL del sito. Quindi, impedirà il reindirizzamento dannoso a un altro host. Ma questo non è controllato da wp_redirect. Quindi, per ridurre i problemi di sicurezza di WordPress, l'utilizzo di wp_safe_redirect è un modo più sicuro per reindirizzare i collegamenti.
$redirect=admin_url('edit.php'); wp_safe_redirect($redirect);Vulnerabilità delle capacità dell'utente
Oltre all'attacco di reindirizzamento, all'attacco XSS, all'attacco CSRF e all'attacco SQL Injection, WordPress è vulnerabile anche dalle funzionalità dell'utente. Se consenti a qualsiasi utente di accedere al tuo sito per inviare dati, verifica le capacità dell'utente. In caso contrario, sarai vittima di minacce e attacchi.
Maggiore è il ruolo dell'utente, maggiori sono le capacità dell'utente.
A volte gli sviluppatori dimenticano semplicemente di assicurarsi che l'utente che si trova su una pagina che invia un modulo disponga dei privilegi necessari per eseguire l'azione o meno. Porterà una fonte comune di vulnerabilità di WordPress.
if ( current_user_can( 'edit_posts' ) ) { edit_post_link( esc_html__( 'Edit', 'wporg' ), '', ''); }Prendiamo un esempio di vulnerabilità del Contact Form 7 (Tipo di vulnerabilità di WordPress)
Il numero di attivazione di questo plugin è di oltre 5 milioni di utenti. Se esiste un unico codice vulnerabile, interesserà oltre 5 milioni di persone.

C'era una vulnerabilità di funzionalità in 5.0.3 e versioni precedenti. Un utente che ha effettuato l'accesso con il ruolo di Collaboratore può modificare facilmente i moduli di contatto. Per impostazione predefinita, era accessibile solo agli utenti con ruolo di amministratore e di editor.
Quindi, c'era una maggiore possibilità di essere un hacker. La nuova versione del plugin ha risolto questi errori.
Ritorna o esci sempre in WordPress
Se hai perso il ritorno o muori dopo il completamento del codice durante la scrittura di qualsiasi funzione o chiamata ajax. Può sembrare semplice ma può portare a importanti problemi di sicurezza.
Assicurati di aver sempre aggiunto ritorno e muori nel luogo in cui intendi. Puoi fare un esempio del bug #gotofail di Apple.
defined( 'ABSPATH' )defined( 'ABSPATH' )or die( "No script kiddies please!" );functionfunctionadls_view(){ global $wpdb;{ global $wpdb;include( 'inc/frontend/smls-detail/smls-grid-inline.php' );exit(); }functionfunctionadls_generate_random_string( $length ){$string ='1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';$random_string='';for( $i = 1; $i <= $length; $i ++ ){{$random_string .=$string[ rand( 0, 61 ) ];}return$random_string;}}
Avvolgendo
Questo è stato un post importante per i professionisti di WordPress che hanno a cuore la sicurezza. Da questo post, hai appreso delle varie minacce e attacchi che portano vulnerabilità a WordPress. Include una breve introduzione sull'attacco SQL Injection, l'attacco XSS, l'attacco CSRF, l'attacco di reindirizzamento e molti altri.

Sono state anche discusse le varie tecniche come la sanificazione dei dati, la convalida dei dati, l'escape dei dati, l'utilizzo e la verifica del nonce, il reindirizzamento sicuro e le capacità dell'utente. Per questo motivo, ci sono problemi di sicurezza in WordPress.
In conclusione ,
- Non fidarti mai dell'input dell'utente per evitare la vulnerabilità di WordPress.
- Convalida, disinfetta tutti gli input ed esca da tutti i dati di output
- Fidiamoci di WordPress!
Se hai riscontrato problemi relativi alle minacce e agli attacchi sopra menzionati, faccelo sapere. I nostri esperti ti daranno una soluzione adatta in base al tuo problema.
