it-swarm.com.de

Überprüfen Sie 2 Cookies mit mod_rewrite, bevor Sie Bilder bereitstellen

Ich habe die folgende mod_rewrite-Regel, die auf meinem Apache 2.x unter CentOS 6 Linux-Rechner einwandfrei funktioniert, aber nicht vollständig ist:

RewriteCond %{HTTP_COOKIE} !id
RewriteCond %{REQUEST_URI} ^/sites/default/files/pictures/picture-
RewriteRule .* /images/dummy.png [L]

weil ich versuche, es auf zwei Arten zu ändern:

  1. Eigentlich sollten 2 Cookies (und nicht nur 1 wie oben) vorhanden sein: id und auth (aber ich weiß nicht, wie man (X oder Y) und Z mit mod_rewrite macht)

  2. Ich möchte überprüfen, ob der Wert des auth Cookies eine Zeichenfolge mit 32 hexadezimalen Zeichen (ein MD5-Hash) ist und ob der Wert von id Cookie ist numerisch.

Der Hintergrund ist, dass ich von Getty Images eine Rechnung über EUR 1000, - erhalten habe, weil einer der Drupal Benutzer auf meinem Server ihr Bild angeblich als Avatar verwendet hat. Ich suche hier keinen Anwalt oder Pseudo-Anwalt-Rat, nur um Web-Crawlern ein Dummy-Bild anstelle von echten Benutzerbildern anzuzeigen.

Und ja, mir ist in dem mod_rewrite-Dokument aufgefallen, dass ich die Cookie-Werte über mod_rewrite (zum Überprüfen des MD5-Hash) an ein externes Skript übergeben kann, aber ich möchte dies später angehen.

UPDATE 2:

Ich habe mir folgendes ausgedacht

RewriteCond %{REQUEST_URI} ^/sites/default/files/pictures/picture-
RewriteCond %{HTTP_COOKIE} !auth=[a-fA-F0-9]{32} [OR]
RewriteCond %{HTTP_COOKIE} !id=[0-9]+
RewriteRule .* /images/dummy.png [L]

aber ich bin mir nicht sicher, ob die oben genannten RewriteCond als X und (Y oder Z) oder (X und Y) oder Z

1

Wie wäre es damit:

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !(^|;\s*)id=[0-9]+(;\s*)auth=[0-9a-fA-F]{32}(;\s*)
RewriteCond %{REQUEST_URI} ^/sites/default/files/pictures/picture-
RewriteRule .* /images/dummy.png [L]
1
quanta

aber ich bin mir nicht sicher, ob die obigen RewriteCond's als X und (Y oder Z) oder (X und Y) oder Z wirken

In den Anweisungen, die Sie veröffentlicht haben, ist dies die erste: X und (Y oder Z)

Wie in meinem obigen Kommentar erwähnt, ist es jedoch effizienter, die URL-Pfadprüfung im Muster RewriteRule durchzuführen, da dies der Fall ist Was wird zuerst verarbeitet? Dadurch wird vermieden, dass RewriteRule für jede Anforderung verarbeitet wird (wie dies bei Verwendung eines Catch-All-Musters wie .* der Fall ist). Sie haben dann nur zwei ORd Bedingungen, die das Fehlen eines der Cookies überprüfen (in beliebiger Reihenfolge). Zum Beispiel:

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !(^|;\s*)id=[0-9]+ [OR]
RewriteCond %{HTTP_COOKIE} !(^|;\s*)auth=[0-9a-fA-F]{32}
RewriteRule ^/sites/default/files/pictures/picture- /images/dummy.png [L]

Das Musterpräfix (^|;\s*) vor dem Cookie-Namen dient nur als Schutz vor der Situation, wenn Sie andere Cookies mit einem ähnlichen (aber längeren) Namen verwenden. z.B. uid oder userauth usw. Wenn dies nicht möglich ist, kann dieses Untermuster weggelassen werden.

Wie in der Antwort von @ quanta ist es nicht erforderlich, am Ende des Cookie-Werts nach (;\s*) zu suchen, da dies nicht Teil des Werts ist, den Sie validieren möchten. Und der Cookie: -Header wird ohnehin nicht mit einem ; enden, sodass dies möglicherweise nicht einmal übereinstimmt.

2
MrWhite