it-swarm.com.de

Funktioniert diese .htaccess-Sicherheitseinstellung wirklich?

Was macht diese .htaccess?

Bin ich zu Recht der Meinung, dass alles, was es tut, automatische Brute-Force-Angriffe verhindert?

Um auf die wp-login.php zuzugreifen, müssen Sie die URL der Domain manuell eingeben, damit alle Bots, die nach wp-login.php suchen, negiert werden

Hab ich recht?

Hier ist die .htaccess-Regel:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_REFERER} !^https://(.*)?my-domain.com [NC]
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteRule ^(.*)$ - [F]
</IfModule>
7
henry

Es scheint zu verhindern, dass POST Anfragen an wp-login.php gestellt werden, die nicht von einer Seite auf my-domain.com stammen.

Wenn der Browser eine POST -Anforderung sendet, beispielsweise nach dem Absenden eines Formulars, enthält er einen HTTP-Referrer-Header, der dem Server mitteilt, woher die Anforderung stammt.

Dies verhindert theoretisch, dass Bots im Rahmen eines Brute-Force-Angriffs POST Anfragen direkt an wp-login.php senden, aber der HTTP-Referrer ist trivial zu fälschen, sodass er eigentlich nicht allzu hilfreich ist.

9
Jacob Peattie

Was dies nicht verhindert: Brute Force

alles, was es tut, ist automatische Brute-Force-Angriffe zu verhindern?

Nein. Dies verhindert keine Brute-Force-Angriffe.

Bei einem Brute-Force-Angriff hat ein Angreifer die Kontrolle über alle Parameter der HTTP-Anforderung. Dies beinhaltet den Referer. Da der Angreifer beliebige Referer senden kann, werden Brute-Force-Angriffe nicht verhindert. (Fast) alle Brute-Force-Tools erlauben das Setzen eines Referers, und das Setzen der Site selbst als Referer ist ziemlich Standard.

Mechanismen, die vor Brute-Force-Angriffen schützen, sind das Sperren oder Drosseln von IP-Adressen oder Benutzernamen sowie Captchas.

Was könnte dies verhindern sollen: CSRF

Dieser Code wurde möglicherweise eingerückt, um allen POST Anfragen im Admin-Bereich eine Referer-Prüfung hinzuzufügen. Wenn der Referer nicht gültig ist, wird die Anfrage abgelehnt.

Bei einem CSRF-Angriff zwingt ein Angreifer ein Opfer, eine zustandsändernde POST -Anforderung auszuführen. Dies kann beispielsweise durch das Posten von HTML- und Javascript-Code bei attacker.com geschehen, der dann automatisch eine Anfrage an victim.com sendet, sobald ein authentifiziertes Opfer die Site besucht.

Referer Checks sind ein Mechanismus zum Schutz vor CSRF. Da nur victim.com als gültiger Verweis akzeptiert wird, kann ein Angreifer das Opfer nicht zwingen, eine Anfrage von seiner eigenen Domain aus zu senden.

Natürlich hat WordPress einen eigenen CSRF-Schutz (über Anti-CSRF-Nonces). Es kann jedoch vorkommen, dass nicht alle Fälle erfasst werden und die Sicherheit von Plugins sehr stark vom Plugin-Entwickler abhängt.

Eine zusätzliche Referenzprüfung kann dazu beitragen, dass CSRF-Schwachstellen in WP Core und insbesondere in Plugins nicht ausgenutzt werden können.

Wenn dies beabsichtigt war, ist der Code natürlich fehlerhaft. Der $ in RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$ verhindert die Prüfung für die meisten Anforderungen.

Der Scheck kann auch leicht umgangen werden. Die folgenden Referer werden akzeptiert:

Referer: http://example.com.org
Referer: http://not-example.com
Referer: http://notexample.com
Referer: http://attacker.com/example.com
[...]

Um die Sicherheit der Site zu erhöhen, müssen diese beiden Probleme zuerst behoben werden. Der Code könnte auch weiter verbessert werden, indem er nicht auf POST Anforderungen beschränkt wird (in schlecht geschriebenen Anwendungen können GET-Anforderungen auch den Serverstatus ändern oder POST Anforderungen können in umgewandelt werden GET-Anfragen). Da die Prüfung nur für Administratoren gilt, sollte dies die Benutzerfreundlichkeit nicht einschränken.

6
tim

Sie sind teilweise richtig

Ihr oben angegebener Code hilft schützt Ihre WordPress-Site, indem er nur Anmeldeanforderungen zulässt, die direkt von Ihrer Domain stammen.

Die meisten Brute-Force-Angriffe senden POST Anfragen direkt an Ihr wp-login.php-Skript. Wenn Sie also eine POST -Anforderung benötigen, um Ihre Domain als Referrer zu haben, können Sie diese Bots stoppen.

Sie können einen Schritt weiter gehen, wenn Sie über eine statische IP-Adresse verfügen, indem Sie den folgenden Code verwenden:

RewriteEngine on 
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR}!^111\.111\.111\.111$
RewriteRule ^(.*)$ - [R=403,L]

* Ersetzen Sie durch Ihre statische IP-Adresse.

* Funktioniert möglicherweise nicht, wenn sich Ihre Site hinter einem DNS-Dienst wie CloudFlare befindet.

4