Come disabilitare l'uso del tunnel verbo HTTP usando intestazioni HTTP o parametri di query?

1

La richiesta di utente malintenzionato utilizza un verbo HTTP attendibile come GET o POST, ma aggiunge intestazioni di richiesta come X-HTTP-Method, XHTTP-Method-Override, X-Method-Override o un parametro di query come _method per fornire un verbo limitato come PUT o DELETE. Tale richiesta viene interpretata dall'applicazione di destinazione utilizzando il verbo nell'intestazione della richiesta anziché in quello effettivo Verbo HTTP.

Quello che ho capito per limitare questo è aggiungere le seguenti voci in web.xml :

<security-constraint> 
    <web-resource-collection> 
        <web-resource-name>WhiteList_Http_Verbs</web-resource-name> 
        <url-pattern>/*</url-pattern>
        <http-method-omission>GET</http-method-omission>
        <http-method-omission>POST</http-method-omission>
    </web-resource-collection> 
    <auth-constraint/>
</security-constraint>

Secondo queste voci la mia applicazione consente solo le richieste GET e POST per tutti i pattern URL e limita tutti gli altri metodi HTTP.

Il vincolo di sicurezza si applicherà a tutti i metodi tranne quelli che sono stati nominati nelle omissioni e il vincolo si applicherà solo alle risorse corrispondenti ai modelli nel vincolo.

Le mie domande:

  1. In questo caso, impedirà il metodo / verbo HEAD attraverso gli header delle richieste speciali sopra?

  2. Queste voci disabiliteranno l'uso del verbo tunneling usando intestazioni come X-HTTP-Method, XHTTP-Method-Override?

  3. O se questa non è la correzione appropriata, cosa dovremmo fare per evitare questo problema?

posta Afgan 24.10.2018 - 07:13
fonte

1 risposta

1
  1. La configurazione di esempio dovrebbe bloccare l'uso del verbo HEAD , assumendo che il server che ha questa configurazione stia ricevendo il verbo (ad es. se hai una strana configurazione proxy che falsifica HEAD richieste da facendo una chiamata di GET , quindi rilasciando il corpo, non avrà alcun effetto).

  2. No, altre intestazioni saranno ancora presenti - il server non sa che le altre intestazioni sono trattate come verbi dall'applicazione. Se si desidera impedire l'utilizzo di altri metodi passati in questo modo, l'opzione migliore è probabilmente quella di rimuovere le intestazioni che l'applicazione può interpretare come verbi HTTP. A seconda dell'applicazione, questo potrebbe rompere alcune funzionalità - Ho visto applicazioni che usano questo metodo per passare i verbi per cancellare funzioni o per consentire modifiche ai record.

Dalla tua descrizione, sembra che il problema non risieda nell'uso dei verbi HTTP, ma nel modo in cui l'applicazione consente di eseguire le azioni a cui si riferiscono, possibilmente con autorizzazioni inappropriate. È difficile dire senza ulteriori informazioni sulla tua applicazione, ma il blocco di un metodo specifico per eseguire un'azione è probabilmente meno efficace del blocco dell'azione stessa, all'interno dell'applicazione, a meno che non venga fornita l'autorizzazione appropriata.

    
risposta data 24.10.2018 - 12:36
fonte

Leggi altre domande sui tag