2016-05-20 18 views
3

Ich frage mich, ob es einen Weg zu HTTP-Header, die von unserem Browser gesendet wurden, um wieder an den Webserver gesendet werden?Wie man HTTP-Header neu anordnet?

Da die Reihenfolge der Header eine Art "Fingerabdrücken" verlässt, siehe this post und this post, dachte ich über die Verwendung von MITMProxy (mit Inline-Scripting, ich denke) Header on-the-fly zu ändern. Ist das möglich?

Wie würde man das erreichen?
Anmerkung: Ich bin auf der Suche nach einer Methode, die scripted werden konnte, kein Verfahren ein grafisches Werkzeug wie die Burp Suite mit (obwohl Spuck bekannt ist, die Lage sein, neu zu ordnen Header)

Ich bin offen für Vorschläge. Vielleicht könnte NGINX auch zur Rettung kommen?

EDIT: Ich sollte genauer sein, durch die ein Beispiel geben ...

Sagen wir, ich bin mit Firefox. Mit dem Einsatz eines funkigen Add-ons spoofe ich meinen User-Agent so, dass er wie ein Chrome-Browser aussieht. Aber wenn ich dann meinen Browser mit ip-check.info teste, bleibt die "Signatur" meines Browsers die von Firefox, obwohl mein gefälschter User-Agent "Chrome" anzeigt.

Die Lösung in diesem speziellen Fall sollte also sein, die HTTP-Header auf die gleiche Weise wie Chrome neu zu ordnen.

Wie kann das gemacht werden?

Antwort

0

Für die Aufzeichnung sollte die Reihenfolge der HTTP-Header überhaupt keine Rolle nach RFC 7230. Aber jetzt, dass Sie gefragt haben ... kann dies in mitmproxy erfolgen wie folgt:

import random 

def request(context, flow): 
    # flow.request.headers.fields is a tuple of (name, value) header tuples. 
    h = list(flow.request.headers.fields) 
    random.shuffle(h) 
    flow.request.headers.fields = tuple(h) 

Siehe mitmproxy Dokumentation auf netlib.http.Headers für weitere Details.

Es gibt Unmengen von Weg, um sie neu zu ordnen, wie Sie wollen:

def reorder(headers, header_order=["Host","User-Agent","Accept"]): 
    lines = [] 
    for name in header_order: # add existing headers in the specified order 
     if name in headers: 
      lines.extend(headers.get_all(name)) 
      del headers[name] 
    lines.extend(headers.fields) # all other headers 
    return lines 
request.headers.fields = reorder(request.headers) 
+0

Dank dafür! Aber ich habe meine Frage präzisiert (Was ist, wenn ich die Header genau so bestellen möchte, wie ich sie haben möchte?) Ich denke [dieser Beitrag] (http://stackoverflow.com/questions/31205415/how-to -capture-http-request-response-headers-with-mitmproxy? rq = 1) könnte ein guter Anfang sein? – Tux

+0

'headers.fields' ist nur die Liste der Header, da sie auf dem Draht gesendet werden, Sie können sie nach Ihren Wünschen neu anordnen. Ich habe oben ein kleines Beispiel hinzugefügt. –

+0

Danke Maximilian, ich werde dein Stück Code versuchen, dieses Wochenende. Denkst du, ich kann dein Skript so wie es ist (offensichtlich nach dem Hinzufügen weiterer Header) in eine .py-Datei speichern und es wird bereit sein, in MITMproxy "geladen" zu werden? Sonst noch etwas benötigt? (Ich sage das, weil ich ein totaler Noob bin, wenn es um Python geht) – Tux