wake-up-neo.net

htaccess 410 URL-Spam-Hack-Anfragen ohne Site-generierte Anfrage

Unsere Website wurde gehackt und Links zu zufälligen Inhalten wurden der Website hinzugefügt. Wir haben die gehackte Site komplett entfernt und eine neue an ihre Stelle gesetzt. Alles neu, einschließlich Bilder und Inhalte, kein anderer Teil der alten Website wurde verwendet.

Das Problem, das wir jetzt haben, ist, dass der Hacker 100.000 Links an die Such-Bots gesendet hat und der Server kontinuierlich alle 1 Sekunde von den Bots besucht wird, die versuchen, die Links zu indizieren, die auf dem alten und noch nie existierten die neue Seite.

Wir haben versucht, dies mithilfe der htaccess-Datei der Website mit mehreren Instanzen verschiedener Bedingungen zu bekämpfen und Regeln neu zu schreiben, die den Bots mitteilen, dass der Inhalt verschwunden ist.

Beispiel

RewriteCond %{REQUEST_URI} .*/product/.*
RewriteRule ^ - [R=410,L]

Das Problem dabei ist, dass einige Anforderungen durchkommen und 301- und 404-Fehler erzeugen.

Dies führt dazu, dass die Bots die Anfrage erneut testen und melden, dass unsere Site 100.000 fehlerhafte Links enthält.

Ich suche nach einer Lösung, die 410-Code für alle Anfragen an die Bots zurückgibt, mit Ausnahme aller Quellanfragen, die tatsächlich Teil der Site sind.

Die Site hat nur ca. 10 Seiten, ist aber ein Joomla-CMS, sodass eine Menge Ressourcen im Hintergrund geladen werden, um die Seite bereitzustellen.

Meine Idee war es, jede Seite der Site zu besuchen und mithilfe der Browser-Inspektion eine Liste aller Ressourcenanforderungen zu erstellen, die von einer Seite gestellt werden.

Die Frage ist, wie ich dies in Bedingungen und Regeln für den htaccess formuliere, damit alle Seitenanforderungen einschließlich route/zugestellt werden, die vom Bot angeforderten Hacker-Links jedoch nicht?

Außerdem arbeiten wir daran, E-Mails an die Bots zu senden, um mitzuteilen, dass deren Anfragen vom Hacker angestiftet werden.

2
744

Sie möchten im Grunde eine 410 anstelle einer 404 senden.

Möglicherweise ist es die einfachste Methode (wenn Sie mit Joomla vertraut sind), die error.php -Datei in Ihrer Vorlage zu überschreiben und den Status 410 manuell festzulegen, wenn bereits eine 404 ermittelt wurde. Beispiel: Oben in Ihrer error.php -Datei befindet sich etwa Folgendes:

if ($this->error->getCode() == '404'){
    header("HTTP/1.0 410 Gone");
}

Da Sie nur ungefähr 10 Seiten haben, können Sie dies alternativ in .htaccess tun, indem Sie eine Whitelist Ihrer Seiten-URLs erstellen und eine 410 auslösen, wenn die angeforderte URL nicht mit Ihrer Whitelist übereinstimmt und nicht als existiert eine physische Datei. Dies vermeidet auch, dass die Anfrage von Joomla verlangsamt wird (Vor- und Nachteile siehe Ende).

Zum Beispiel:

# Whitelist of page URLs 
# NB: Last condition must not have an OR flag
RewriteCond %{REQUEST_URI} =/second-page [OR]
RewriteCond %{REQUEST_URI} =/third-page [OR]
RewriteCond %{REQUEST_URI} =/fourth-page [OR]
RewriteCond %{REQUEST_URI} =/fifth-page [OR]
RewriteCond %{REQUEST_URI} ^/admin/
RewriteRule . - [E=PAGE_URL:yes]

# Send 410 Gone
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|gif|svg|pdf)$ [NC]
RewriteCond %{ENV:PAGE_URL} !yes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !^(index\.php)?$ - [G]

Dies setzt voraus, dass die Homepage (dh /) eine gültige Seiten-URL ist. Das Flag G (gone) ist eine Abkürzung für R=410, und das Flag L ist nicht erforderlich (impliziert).

Die erste RewriteCond -Direktive schließt URLs, die wie statische Ressourcen (durch Dateierweiterung gekennzeichnet) aussehen, von der Zustellung aus, wenn sie nicht vorhanden sind. Sie sollten den Standardwert 404 erhalten. Dies setzt voraus, dass die Spam-URLs nicht für diese Typen bestimmt sind von statischen Ressourcen. Wenn Sie beispielsweise spamähnliche Anfragen nach unsinnigen .css Dateien erhalten, entfernen Sie diese Erweiterung aus der RewriteCond Direktive oder entfernen Sie die Bedingung, eine 410 für all diese fehlenden Ressourcen bereitzustellen.

Das = Präfix auf dem CondPattern zB. =/second-page macht es zu einem exakten Vergleich von Übereinstimmungszeichenfolgen, nicht zu einem regulären Ausdruck, sodass Regex-Metazeichen usw. nicht entkommen müssen.

Dadurch geht jedoch Ihre benutzerfreundliche "Joomla 404-Seite" aus Nizza verloren, sodass Sie möglicherweise eine erstellen müssen.


PDATE:

Einige der Spam-URLs haben diese Art von Struktur /?anything=

Wenn Sie eine URL blockieren möchten, die eine Abfragezeichenfolge enthält, benötigen Sie eine Bedingung, die mit der Servervariablen QUERY_STRING abgeglichen wird. Versuchen Sie Folgendes hinzuzufügen:

# Block any URL that contains a query string on unknown pages
RewriteCond %{QUERY_STRING} .
RewriteCond %{ENV:PAGE_URL} !yes
RewriteRule ^ - [G]

Der einzelne Punkt-Regex (der einem einzelnen Zeichen entspricht) überprüft einfach, ob eine Abfragezeichenfolge vorhanden ist.

2
MrWhite