Scripting cross-site in WordPress che cos'è XSS?

Uno degli aspetti più eccitanti dello sviluppo web moderno è il potenziale che viene fornito con la creazione di applicazioni specifiche per i browser Web (o per l'esecuzione "nel cloud").

Originariamente, Java era pensato per essere la soluzione "write-once, run-anywhere", ma sembra che il web sia diventato il mezzo perfetto per farlo. Chi avrebbe pensato, giusto?

Ma insieme ai vari browser che abbiamo a disposizione, le tecnologie che possiamo sfruttare, e, semplicemente, il pulito cose che possiamo fare, c'è ancora un lato oscuro per lo sviluppo di applicazioni web - cross-site scripting.

E considerando che WordPress è un'applicazione web su cui molti di noi costruiscono per divertimento, profitto o per guadagnarsi da vivere, è un argomento che non dovremmo evitare particolarmente se vogliamo avere i prodotti più robusti possibili.

In questa serie in due parti, daremo un'occhiata a quale script cross-site veramente è, i suoi pericoli, come influisce sullo sviluppo di WordPress, e quindi i passaggi pratici che possiamo prendere per testare i nostri temi e plugin.


Che cosa è lo scripting cross-site?

Lo scripting cross-site, tipicamente abbreviato in XSS, è definito su Wikipedia come questo:

XSS consente agli aggressori di iniettare script lato client in pagine Web visualizzate da altri utenti. Una vulnerabilità di cross-site scripting può essere utilizzata dagli aggressori per bypassare i controlli di accesso come lo stesso criterio di origine.

Penso che la definizione funzioni bene se hai familiarità con le vulnerabilità, la stessa politica di origine e cosa costituisce esattamente un'iniezione di uno script lato client, ma, per molti, non è sufficiente.

Una visione concettuale di come i dati viaggiano da un cliente all'altro.

Diamo quindi uno sguardo agli script cross-site da zero prima di andare oltre.

Comprensione degli script lato client

Gli script sul lato client sono fondamentalmente tutti i codici che vengono eseguiti sul lato client di un sito Web o di un'applicazione web. Probabilmente, gli script client-side più popolari sono le funzioni JavaScript. Al contrario, PHP sarebbe considerato uno script lato server.

Un altro modo per vederlo è questo: gli script sul lato client vengono inviati dal server al computer del visitatore quando viene caricata la pagina web. Lo script viene quindi eseguito. A volte fa qualcosa di semplice come animare un menu.

Altre volte, può fare qualcosa di più avanzato come fare una chiamata asincrona al server, recuperare alcuni dati in base alla posizione degli utenti e personalizzare le informazioni che vedono.

Sebbene questo possa utilizzare le informazioni sulla posizione fornite dal browser, è comunque sicuro poiché il browser mantiene i dati e le informazioni che vengono recuperati in base alle informazioni disponibili pubblicamente.

Quindi cos'è l'iniezione di script?

Forse un nome migliore per "Script Injection" è "codice di iniezione".

Qui, un utente malintenzionato cerca letteralmente un tipo di elemento di input sul tuo sito, che potrebbe essere un campo di ricerca, un campo di contatto, un campo nome o qualunque altro tipo di elemento che invia dati a un server. Questo è normalmente fatto attraverso l'uso di uno script - a volte si tratta di JavaScript dannoso, ma di aggressori può avere successo nell'inserire comandi PHP o MySQL.

Infine, si parla di iniezione perché se l'attaccante ha successo, allora si sta letteralmente iniettando loro codice in il tuo applicazione.

E cos'è questa "politica della stessa origine?"

Il concetto di una politica della stessa origine è semplice: è una politica che i browser applicano e che in pratica consente agli script sul lato client, come JavaScript, di effettuare richieste ad altre pagine e script sul lato server sullo stesso server (o, la stessa origine), ma non ad altri domini o siti.

Ad esempio, è possibile impostare una funzione JavaScript per effettuare una chiamata da tutsplus.com a wordpress.com, recuperare i dati e visualizzarli su tutsplus.com. Ciò violerebbe la politica della stessa origine.

Ora, per chiarire, questo non vuol dire che sia così non può essere fatto. Attraverso la combinazione di funzioni creative lato client e chiamate lato server, cose può essere raggiunto, ma i browser fanno il meglio che possono per evitare che gli script sul lato client lo facciano effettivamente.


Perché è pericoloso??

A questo punto, le implicazioni dovrebbero essere abbastanza chiare. Le vulnerabilità di cross-site scripting possono consentire ai visitatori malintenzionati di controllare i nostri siti e le nostre applicazioni web in modi che, alla fine, non siamo in grado di controllare.

Ad esempio, possono variare da relativamente minori a molto più critici:

  • Gli aggressori potrebbero essere in grado di accedere al database e inserire dati che sono quindi visibili ai futuri visitatori
  • Gli aggressori potrebbero essere in grado di accedere alle informazioni sulla sessione, dirottarla e impersonare un utente
  • Gli aggressori potrebbero essere in grado di recuperare informazioni finanziarie sensibili
  • Gli aggressori potrebbero essere in grado di fare tutto quanto sopra e / o poi abbattere un intero sito
  • … e tanti altri

Tutto ciò dipende dalle caratteristiche offerte dal sito e dalla sicurezza del sito.

In ogni caso, la sicurezza delle applicazioni Web è qualcosa che è qui per restare. Certo, credo che tutti dovremmo specializzarci nei nostri rispettivi campi, e che gli specialisti della sicurezza sono persone con cui dovremmo consultare prima di lanciare un'applicazione web che potrebbe contenere informazioni sensibili, ma questo non significa che non possiamo familiarizzare con alcune strategie di base per i nostri test.


Come questo influisce sullo sviluppo di WordPress

Prima di esaminare concretamente la praticità di implementare le tecniche XSS-safe nei nostri sforzi di sviluppo, è importante per noi notare perché, come sviluppatori di WordPress, dovremmo preoccuparci di questo.

Considera questo: WordPress è un'applicazione web fullstack. Consiste in un database, un livello di applicazione e un livello di presentazione, tutti estensibili da altri sviluppatori.

Lo stack WordPress

Ciò significa che WordPress stesso è soggetto a molte delle stesse minacce alla sicurezza di qualsiasi altra applicazione Web, ma anche quelli che lo sviluppano per WordPress sono.

Anche se WordPress fosse molto resistente a qualsiasi attacco XSS, ciò non significa che strumenti di terze parti come plug-in o temi raccolgano automaticamente tali vantaggi.

Dopo tutto, sono costruiti da sviluppatori di terze parti che potrebbero non seguire le best practice quando scrivono codice difensivo.

Tutte le funzionalità di WordPress a parte e al livello più elementare, se il tuo lavoro accetta qualsiasi input dell'utente in qualsiasi modo, allora stai potenzialmente aprendo la porta per un exploit XSS.

Direi anche che se stai cercando di sfruttare alcune delle principali API di WordPress per accettare input e archiviare dati, non sei completamente sicuro.

Dopo tutto, WordPress potrebbe avere exploit che devono ancora essere scoperti.


Cosa possiamo fare a riguardo

Quindi questo solleva la domanda: se ci preoccupiamo veramente del lavoro che stiamo facendo e vogliamo creare qualcosa di molto più sicuro, allora ci sono un certo numero di cose che possiamo fare.

Innanzitutto, dobbiamo assicurarci di utilizzare le funzioni API appropriate per la gestione dei campi di input, degli attributi, della convalida e dell'igienizzazione. Alcune di queste funzioni forniscono funzionalità specifiche per:

  • Convalida dei dati
  • Disinfezione dell'output

In effetti, l'articolo del Codex offre funzioni dettagliate su:

  • URL
  • Input e output del database
  • Convalida dei file
  • Campi di input
  • … e altro ancora.

Consiglio vivamente di leggere l'articolo nella sua interezza.

In secondo luogo, possiamo eseguire il nostro tema o plugin attraverso una batteria di test XSS che vengono utilizzati per scoprire eventuali exploit che non siamo riusciti a rilevare. Ma lo tratteremo nel prossimo articolo.


Conclusione

Per riassumere, lo scripting cross-site si riferisce alla possibilità per gli utenti malintenzionati di inserire il proprio codice dannoso nel nostro sito Web, applicazione web, tema o plug-in nel tentativo di ottenere il controllo di alcuni aspetti - o di tutti gli aspetti - del sito Web.

Il potenziale di exploit varia da applicazione a applicazione, ma considerando che la nostra area di specializzazione è con WordPress, ci concentreremo sulle strategie per sfruttare le prove del nostro lavoro nel prossimo articolo.