Perché non posso inviare richieste HTTP non elaborate con intestazioni arbitrarie da un'applicazione Web? [chiuso]

1

Sto provando a scrivere uno script per testare una firma di rete Suricata . Per fare questo ho bisogno di simulare lo stesso agente utente del malware. Ho provato quanto segue.

$.ajaxSetup({
    beforeSend: function(request) {
        request.setRequestHeader("User-Agent","XAgent/1.");
    }
});
$.ajax({
    url: "localhost",
    type: "GET"
});

Ma ho ricevuto l'errore Refused to set unsafe header "User-Agent" .

Ho anche provato WebSocket e socket.io.js ma ognuno di questi non mi consente di inviare effettivamente una richiesta HTTP non elaborata.

Quello che voglio è uno strumento come telnet nel browser, quindi posso semplicemente inviare la richiesta HTTP non elaborata e definire tutti i campi, ma ciò non sembra possibile. C'è un modo per farlo?

    
posta MikeSchem 09.06.2017 - 20:47
fonte

1 risposta

2

But I got the error Refused to set unsafe header "User-Agent"

Il comportamento del browser varia qui. Firefox consente alle applicazioni Web non privilegiate di inviare un'intestazione User-Agent personalizzata allo stesso dominio (o ad altre origini tramite CORS ), ma Google Chrome non lo fa.

User-Agent non è nell'elenco di Mozilla di intestazioni vietate :

Note: The User-Agent header is no longer forbidden, as per spec — see forbidden header name list (this was implemented in Firefox 43,) so can now be set in a Fetch Headers object, via XHR setRequestHeader(), etc.

Ma non sarai mai in grado di inviare l'intestazione cross-domain senza autorizzazione. Questo è anche il motivo per cui i difetti XSS basati su stringhe user-agent alterate di solito non sono sfruttabili .

Oltre a ciò, un'applicazione web non privilegiata non può emettere "richieste HTTP non elaborate" per ovvi motivi di sicurezza. Anche se si scrive un plug-in del browser, è probabile che si debbano passare attraverso le rispettive API di livello superiore e non è possibile interamente controllare le richieste HTTP a livello di byte, poiché è possibile utilizzare netcat .

    
risposta data 09.06.2017 - 23:48
fonte

Leggi altre domande sui tag