it-swarm.com.de

Ist es wirklich notwendig, nach mod_write zu suchen?

Kürzlich ist mir aufgefallen, dass viele Leute .htaccess Dateien hier posten mit:

<IfModule mod_rewrite.c>

Manchmal taucht das sogar mehrmals in der Datei auf! Es wird offensichtlich geprüft, ob mod_write tatsächlich aktiviert ist, aber die Anweisungen, die es schützt, sind für diese Sites trotzdem erforderlich. Wenn also IfModule ausfällt, ist die Website trotzdem kaputt.

Gibt es einen Vorteil, wenn die <IfModule mod_rewrite.c> -Anweisungen fehlschlagen anstatt der RewriteRule -Anweisungen darunter?

mod_write ist jetzt so wichtig und allgegenwärtig, dass ich nicht mehr danach suche. Könnte dies zu einer Sicherheitslücke führen?

7
Itai

Nein, die meiste Zeit ist es nicht erforderlich, nach mod_rewrite zu suchen. In der Tat ist es oft vorzuziehen, diese Prüfung zu entfernen.

Wenn die mod_rewrite-Direktiven von Ihrer Site erforderlich sind, sollten Sie sie nicht in einen <IfModule mod_rewrite.c> -Container einschließen. Denn wenn sie erforderlich sind und mod_rewrite nicht verfügbar ist, schlagen die Anweisungen einfach fehl stillschweigend und Ihre Site bricht weiterhin auf andere Weise ab (Maskierung der zugrunde liegenden Ursache) und macht möglicherweise etwas sichtbar du hast nicht damit gerechnet. Ohne den Wrapper <IfModule> würde die Site sofort (und vollständig) mit einem leicht identifizierbaren Fehler beschädigt und nichts Unerwartetes wird angezeigt.

Die einzige Zeit, in der der Wrapper <IfModule mod_rewrite.c> verwendet werden sollte, ist entweder:

  1. Die Seite ist so konzipiert, dass sie mit oder ohne mod_rewrite funktioniert. Dies ist bei WordPress der Fall. Ohne mod_rewrite "funktioniert" die Seite immer noch, man bekommt nur nicht die "hübschen" URLs.

Oder

  1. Sie haben Anweisungen von einem anderen Modul, die davon abhängen, dass mod_rewrite erfolgreich ausgeführt wurde. In diesem Fall würden Sie diese anderen Anweisungen in einen <IfModule mod_rewrite.c> Wrapper einbinden. Beispielsweise können Sie einen HTTP-Antwortheader (mit mod_headers) basierend auf einer Eigenschaft der Anforderung festlegen, die Sie mit mod_rewrite ermittelt haben. In diesem Fall können Sie die Anweisung Headers in einen Container <IfModule mod_rewrite.c> einschließen.

Wenn Sie Ihren Server kennen, brauchen Sie in den meisten Fällen die <IfModule mod_rewrite.c> -Prüfung nicht - da Sie bereits wissen, ob mod_rewrite aktiviert ist oder nicht. Dies ist nur dann erforderlich, wenn Sie portablen Code schreiben, um auf mehreren Servern zu arbeiten, und entweder die Bedingung 1 und/oder die Bedingung 2 oben erfüllt sind.

Manchmal taucht das sogar mehrmals in der Datei auf!

Und das ist die meiste Zeit völlig unnötig. Zur Verteidigung dieses Verhaltens tritt dies jedoch häufig auf, wenn Sie über verschiedene Plug-ins verfügen, die .htaccess automatisch und unabhängig voneinander bearbeiten. Gleiches gilt für mehrere Anweisungen RewriteEngine und RewriteBase.

Bei handgeschriebenem Code sollte dies niemals angezeigt werden. Bei handgeschriebenem Code geschieht dies in der Regel durch sinnlos Kopieren/Einfügen (was bei .htaccess -Anweisungen leider häufig vorkommt).

Gibt es einen Vorteil, wenn die <IfModule mod_rewrite.c> -Anweisungen fehlschlagen und nicht die darunter stehenden RewriteRule-Anweisungen?

Nur im Fall von # 1 oder # 2 oben. Meistens nein.

mod_write ist jetzt so wichtig und allgegenwärtig, dass ich es nicht mehr überprüfe. Könnte dies zu einer Sicherheitslücke führen?

Wenn es wesentlich für Ihre Site ist, müssen Sie nicht danach suchen. Keine Verwundbarkeit.

In der Tat könnte das Gegenteil der Fall sein ... Wenn die mod_rewrite-Direktiven wesentlich sind, kann das Überprüfen auf das Vorhandensein von mod_rewrite sogar noch mehr Probleme verursachen, wenn mod_rewrite plötzlich aus irgendeinem Grund nicht mehr verfügbar ist. Wie oben erwähnt, würden Ihre mod_rewrite-Direktiven jetzt nbemerkt ausfallen (Stress "unbemerkt" - kein Fehler), aber die Website kann weiterhin funktionieren, ohne dass Serverfehler ausgelöst wird Rückgabe von Unsinn an den Benutzer (und Suchmaschinen-Bots) mit einem 200-OK-Status. Wenn der Wrapper <IfModule> weggelassen worden wäre, wären Sie sofort über das Problem informiert worden. Wenn dieser Fehler behoben wurde, kann es einige Zeit dauern, bis das Problem entdeckt wird. Zu diesem Zeitpunkt ist möglicherweise bereits ein größerer Schaden aufgetreten.

5
MrWhite

Es wird hauptsächlich von Content Management Systemen wie WordPress verwendet, da diese mit PHP rewrite oder mod_rewrite arbeiten können, wenn das mod_rewrite nicht unterstützt wird und Sie nicht verwenden). IfModule dann führen einige Sites zu Fehler 5 .

Bei jeder Installation von WordPress wird versucht, .htaccess zu verwenden, und bei größeren Upgrades kann eine Überprüfung ausgelöst werden, um festzustellen, ob dieser Code vorhanden ist:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Bei mehreren Gelegenheiten habe ich gesehen, wie WordPress den Code _ erneut hinzugefügt hat , wenn der Code geändert wurde. Dies ist der Grund, warum WordPress Benutzer diesen Code im Allgemeinen unverändert lassen oder chmod verwenden, um zu verhindern, dass WordPress daran angehängt wird. Aus Sicherheitsgründen ist dies eine gute Idee um Ihren .htaccess auf 444 zu setzen.

Aus diesem Grund habe ich beschlossen, es in Ruhe zu lassen, wenn Beantwortung einer meiner Fragen in Bezug auf WordPress HTTP zu HTTPS ohne abschließenden Schrägstrich führt zu doppelter Umleitung

Zusammenfassung

Wenn Sie <IfModule mod_rewrite.c> verwenden oder nicht, wird dies keinen messbaren Unterschied in Bezug auf die Leistung der normalen Website bedeuten. Wenn Sie es entfernen können, tun Sie dies auf jeden Fall, es macht keinen Unterschied, ob Sie es tun oder nicht. rollen Sie einfach mit dem, was für Ihr Setup am besten geeignet ist.

1
Simon Hayter