it-swarm.com.de

htaccess rewrite for author query string when WP ist im Unterordner

Ich habe erfolgreich den Zugriff auf jede Art von Autorenseiten verboten, sei es über /author/username/ oder die ?author={#id}-Abfragezeichenfolge.

Ich habe dies getan, indem ich Folgendes an den Anfang meiner htaccess-Datei angefügt habe:

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} ^/author/
    RewriteRule .* - [F]
    RewriteCond %{QUERY_STRING} ^author=([0-9]*)
    RewriteRule .* - [F]
</IfModule>

Das Gleiche funktioniert jedoch nicht, wenn sich wordpress physisch in einem Unterverzeichnis befindet.

Der erste Teil funktioniert:

RewriteCond %{REQUEST_URI} ^/subdir/author/
RewriteRule .* - [F]

Aber egal wie ich versuche, den zweiten Teil zu bearbeiten, der /subdir/?author=1 bringt mich zum /subdir/usernumber1/ und das ist in Ordnung verboten, aber dies macht den ganzen Zweck zunichte.

Irgendwelche Ideen?

Bearbeiten:

Ja, ich habe versucht zu verhindern, dass Benutzernamen angezeigt werden.

Im letzten Moment gestern konnte ich eine Lösung finden:

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} ^/subdir/author/
    RewriteRule .* - [F]
    RewriteCond %{REQUEST_URI} ^/subdir/
    RewriteCond %{QUERY_STRING} ^author=([0-9]*)
    RewriteRule .* - [F]
</IfModule>

Ich kann es möglicherweise anhand der folgenden Antworten kürzen (wofür ich sehr dankbar bin).

Und ja, das ist im Unterverzeichnis platziert.

Das erste Snippet wurde im Stammverzeichnis abgelegt, was nicht funktioniert hat (oder vielleicht haben einige der Lösungen, die ich auf diesem Weg ausprobiert habe, tatsächlich funktioniert, aber ich hatte die Weiterleitung zur Autorenseite bereits zwischengespeichert, ich weiß es nicht genau).

2
D. Dan

Die Frage ist, wie man das mit .htaccess macht, aber warum man Autorenseiten nicht stattdessen in WordPress deaktiviert.

Dies würde dasselbe Ergebnis erzielen, während das Problem des Unterverzeichnisses insgesamt irrelevant wird (und auch unabhängig von den Einstellungen der Permalink-Struktur funktioniert).

Beispielcode, der alle URLs für Autorenseiten auf einen 404-Fehler setzt:

add_action( 'template_redirect',
        function() {
                if ( isset( $_GET['author'] ) || is_author() ) {
                        global $wp_query;
                        $wp_query->set_404();
                        status_header( 404 );
                        nocache_headers();
                }
        }, 1 );
add_filter( 'author_link', function() { return '#'; }, 99 );
add_filter( 'the_author_posts_link', '__return_empty_string', 99 );

(Code aus diesem Plugin entnommen: Autorenarchiv deaktivieren )

1
Iceable

Ich nehme an, Sie versuchen zu verhindern, dass Scanner die Benutzernamen Ihrer Site erhalten. Und aus Sicherheitsgründen glaube ich an das Blockieren am ersten Perimetertor, d. H. Zugriff, nicht PHP.

Keine Ahnung, warum Unterverzeichnisse ein Problem verursachen; Sie könnten versuchen, Ihre Bedingung zu htaccess-Dateien im Stammverzeichnis und in Ihrem WP -Unterverzeichnis hinzuzufügen, da dies sicherlich keinen Schaden anrichtet. Ich verwende eine Umschreibebedingung, die Ihrer sehr ähnlich ist, und sie funktioniert auf Websites mit WP im Unterverzeichnis oder nicht:

RewriteCond %{QUERY_STRING} author=
# redirect away from site
RewriteRule (.*) https://www.fbi.gov/investigate/cyber/%1 [R=302,L]

Ich benutze auch eine modifizierte Version von Jeff Starrs 6G "Firewall" , um zusätzlich nach WPScan User Agent zu suchen. Dieser Scanner ist bei Hackern beliebt und wird auch von einigen Online-Sicherheitsscannern zum Eingeben einer URL verwendet, um Administratorbenutzer, die Verwendung anfälliger Plugins usw. zu identifizieren. Natürlich können Benutzer die Benutzeroberfläche ändern, aber legitime Online-Scanner und Skriptkinder scheinen sich nicht darum zu kümmern :

<IfModule mod_setenvif.c>
  # numerous 6G UA Checks (OMITTED)
  #check for WPScan
  SetEnvIfNoCase User-Agent "WPScan" bad_bot
  # Apache >= 2.3
  <IfModule mod_authz_core.c>
    <RequireAll>
    Require all Granted
    Require not env bad_bot
    </RequireAll>
  </IfModule>
</IfModule>

zu M Kapluns Kommentar zu OP:

Mir war nicht bewusst, Marks Plugin ; und trotz meiner Kommentare zu PHP ist es offensichtlich eine hervorragende Komplettlösung. Ich verfolge einen anderen Ansatz (der das Problem des Verlusts von Benutzernamen durch Themen "löst", die auch von Mark erwähnt werden).

Ändern Sie den Anzeigenamen (über das WP Dashboard) und den Autoren-Slug (bearbeiten Sie "user_nicename" in der Benutzertabelle oder verwenden Sie das Edit Author Slug Plugin ), um sich vollständig vom Benutzernamen zu unterscheiden.

So:

  1. anfragen mit Autor querystring (Hacker) werden umgeleitet (2 Zeilen htaccess oben).

  2. autorenlinks zu Beiträgen nach Themen hinzugefügt, die immer noch freundlich und arbeitsbereit sind Sie führen Sie zur entsprechenden "Autorenseite" - aber der Autor identifiziert den Benutzernamen nicht mehr. z.B. Auf meiner Website führt Sie der (gültige) Autorenlink (Anzeigename "AW") zu https://wptest.means.us.com/author/not-for-scanners/, um eine Liste meiner Beiträge anzuzeigen.

Dies ist für Websites mit vielen Autoren nicht praktisch. Vielleicht könnte das Plugin von (@Mark Kaplun @ mark-kaplun) erweitert werden, um Slug-Änderungen zu automatisieren (alle user_nicename in der DB haben?)?

Sind öffentlich sichtbare Benutzernamen ein Risiko?

Wordpress.org ist sich einig, dass der Benutzername "leakage" kein Sicherheitsrisiko ist. Es bietet jedoch das Potenzial für einige Benutzer, beim ersten Versuch gehackt zu werden (keine rohe Gewalt erforderlich) .

Sie müssen kein Genie sein, um zu erkennen, dass der freundliche URL-Slug /author/hclintongmailcom bedeutet, dass er ein Autor mit einer E-Mail-Adresse und einem Benutzernamen von [email protected] ist (ohne Berücksichtigung der Groß- und Kleinschreibung).

Es gibt Hacker-Passwortlisten für mehr als 1 Milliarde E-Mail-Adressen (? Aus Erinnerung) (versuchen Sie es mit Ihrer gegen eine kleine Untergruppe https://haveibeenpwned.com/ ); Viele Benutzer verwenden dasselbe Kennwort, das sich auf allen Websites nicht ändert. Ein Autor mit einem E-Mail-Benutzernamen und einem Kennwort auf einer anderen Site kompromittiert wird möglicherweise beim ersten Versuch auf Ihrer Site "gehackt".

1
scytale

Dies wird wahrscheinlich am besten auf die "WordPress-Art" gehandhabt, wie von @Iceable vorgeschlagen, anstatt jedoch .htaccess zu verwenden, um Ihre spezifischen Fragen zu beantworten ...

Aber egal wie ich versuche den zweiten Teil zu bearbeiten ...

Sie müssen den "zweiten Teil" nicht bearbeiten. Der "zweite Teil" überprüft einfach die Abfragezeichenfolge, nicht den URL-Pfad, der sich nicht ändert, wenn WordPress in einem Unterverzeichnis installiert wird.

Angenommen, die .htaccess-Datei befindet sich in dem Unterverzeichnis, in dem WordPress installiert ist, dann können Ihre Anweisungen vereinfacht werden. Es ist nicht erforderlich, auf das Unterverzeichnis zu verweisen:

RewriteRule ^author/ - [F]
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* - [F]

Diese Anweisungen funktionieren unabhängig davon, wo WP installiert ist, vorausgesetzt, die Datei .htaccess befindet sich im Stammverzeichnis der WP -Installation.

Es ist effizienter, den URL-Pfad mit der RewriteRule pattern (wenn möglich) zu überprüfen, als mit der Servervariablen REQUEST_URI zu vergleichen. Auch die RewriteRule pattern stimmt mit dem URL-Pfad abzüglich des Verzeichnispräfix überein (dies funktioniert natürlich für jedes Unterverzeichnis ohne zusätzliche Arbeit). Während die Servervariable REQUEST_URI den gesamten URL-Pfad enthält, muss jedes Unterverzeichnis explizit berücksichtigt werden.

Außerdem ist der Container <IfModule mod_rewrite.c> nicht erforderlich, es sei denn, diese Anweisungen sind optional.

1
MrWhite