Pericolo di avere il mio sito Web fare richieste web arbitrarie

2

Sto installando un piccolo sito Web di hosting di codice, in vena di github o bitbucket. Vorrei consentire agli utenti di specificare un URL arbitrario dal quale il server del mio sito inizialmente clonerà il proprio repository. Sto usando mercurial, quindi la clonazione essenzialmente significa solo negoziare un semplice protocollo basato su HTTP tra il client (il mio server in questo caso) e l'host (l'URL che l'utente ha fornito).

Non conosco tutti i dettagli del protocollo mercuriale, ma implica l'esecuzione di alcune richieste HTTP GET e POST e la specifica di alcuni parametri di query sull'URL fornito dall'utente. Oltre all'URL, l'utente non deve avere alcun controllo su quali richieste vengono inviate dal mio sito all'URL che specificano.

In caso di successo, l'interazione con l'URL fornito produrrà un insieme di file, che verranno offerti dal mio sito, possibilmente ad altri utenti, ma non direttamente, ad eccezione delle immagini. In altre parole, se si tratta di un file immagine, lo servirò, ma altrimenti sarà visibile solo come testo di escape.

Ci sono delle implicazioni sulla sicurezza di cui dovrei essere a conoscenza? Capisco che non posso servire HTML, Javascript, Flash, ecc. Arbitrari forniti dall'utente e, a meno che non ci siano problemi nel fornire immagini arbitrarie di cui non sono a conoscenza, penso che la porzione di servizio dovrebbe andare bene. Sono interessato più all'interazione con URL arbitrari forniti da un utente.

    
posta brianmearns 10.03.2014 - 17:08
fonte

1 risposta

2

are issue serving arbitrary images that I'm not aware of

In realtà ci sono - Gifars che sono un'immagine GIF e un file JAR combinati.

Per quanto riguarda la tua domanda originale, devi convalidare l'URL per verificare che sia un formato valido per un http o https URL (cioè non FTP o un altro protocollo), e dovresti controllare che il dominio si risolva in un esterno sito Web (ovvero che un utente malintenzionato non ha inserito un IP interno come 192.168.1.1 o che DNS risolva un IP interno che potrebbe sondare l'infrastruttura di rete interna). Assicurati che la tua richiesta HTTP vada allo stesso IP di quello utilizzato dalla tua convalida. Inoltre, dovresti bloccare il tuo ambiente server il più possibile, in modo che solo i server interni siano contattabili sulla tua rete.

Devi assicurarti che i reindirizzamenti HTTP non vengano seguiti, o se è necessario eseguire la stessa convalida su ciascun reindirizzamento nella catena. Dovresti anche controllare che non ci siano loop di reindirizzamento che potrebbero fare il tuo sistema, forzando un conteggio di reindirizzamento massimo.

Inoltre, dovresti sapere che gli aggressori potrebbero utilizzare il tuo servizio come proxy. Ad esempio, inviando attacchi SQL injection ad altri server internet che segnalerebbero l'indirizzo IP del tuo servizio come sorgente. Assicurati di registrare tutte le richieste contro l'IP dell'utente e l'account. Puoi anche valutare il limite basato su questi dati per impedire a un utente / IP di fare troppe richieste, nel qual caso puoi convalidare con un CAPTCHA.

    
risposta data 10.03.2014 - 17:43
fonte

Leggi altre domande sui tag