2016-11-29 3 views
1

Ich möchte eine rewritecond haben, die true erhält, wenn zwei Variablen HTTP_ORIGIN und HTTP_HOST gleich sind. Ich habe versucht,RewriteCond vergleicht zwei Variablen in Apache htaccess

RewriteCond %{HTTP:Origin} ^http://%{HTTP_HOST}(/|$) 

Aber trotz Netbeans syntaktischen Farbe, scheint es, dass Apache nicht %{HTTP_HOST} durch seinen Wert ersetzt. Ich vermutete es, weil

RewriteCond %{HTTP:Origin} ^http://cnfr005554(/|$) 
RewriteCond %{HTTP_HOST} =cnfr005554 

Works.

Also wie kann ich testen, dass die beiden Variablen %{HTTP:Origin} und %{HTTP_HOST} gleich sind? (und ja, es ist für die Anwendung der OWASP-Richtlinien, um XSRF abzuschwächen)

Antwort

2

In RewriteCond können Sie eine Variable auf der rechten Seite nicht verwenden.

Sie haben es so verwenden:

RewriteCond %{HTTP_HOST}##%{HTTP:Origin} ^(.+)##http://\1(/|$) 

Hier werden zwei Variablen schließen sich mit einem Begrenzer ## (es kann alles sein). Dann stimmen wir auf RHS ab und erfassen den Wert vor ##, der HTTP_HOST darstellt. Nach ## mit einer Rückreferenz \1 machen wir unser Matching.

+0

Ah, ich wusste, dass ich diese Rückreferenz verwenden müsste, aber ich erinnerte mich nicht an den Namen und die Syntax von diesen. Vielen Dank ! Noch eine Frage: Was ist, wenn '##' im Host oder im Ursprung erscheint? sind Apache regex gierig? – Xenos

+0

Fertig (Ich habe es bereits versucht, aber das ist durch Proxy verloren gegangen!) – Xenos

+1

Ich weiß das, aber Proxy Chaos kämpfen/Verwerfen der HTTP-Anfrage hat nicht geholfen ... Sorry für die Verzögerung! – Xenos