2 Stimmen

Schwierigkeiten mit .htaccess und Sperren von bestimmten Dateierweiterungen

Ich habe eine ziemlich komplizierte Situation, in der ich einen persönlichen Blog betreibe, auf dem ich jeden Freitag und Sonntag Musik hochlade, indem ich die MP3s in einen Ordner hochlade, auf den ein Flash-MP3-Player zugreift und ihn für die Welt abspielt.

Kürzlich hat eine Website namens Dizzler, die wie eine Suchmaschine für MP3-Dateien ist (wie diejenigen, die ich auf meinem Server hoste!), es ermöglicht, dass Menschen sie über ihren eigenen proprietären Player abspielen. Normalerweise hätte ich nichts dagegen, wenn andere Leute meinen Server für ihren eigenen Vorteil nutzen, aber das ist in letzter Zeit außer Kontrolle geraten. In der letzten Woche im Dezember haben sie es geschafft, 100.000 Zugriffe auf einen Song zu generieren und dabei 6GB Bandbreite zu verbrauchen.

In dieser letzten Dezemberwoche habe ich meine .htaccess-Datei bearbeitet, um den Zugriff auf MP3s auf meinem Server zu sperren, ohne den Zugriff auf meine eigenen MP3s zu sperren (also ist "deny all" keine Option!) und habe diesen Code verwendet:

RewriteEngine on
RewriteCond %{HTTP_REFERER} .
RewriteCond %{HTTP_REFERER} !^(www\.)?meinedomain.com [NC]
RewriteRule \.(mp3)$ - [NC,F] 

Options -Indexes

Es hat ziemlich gut funktioniert, mit einer Ausnahme - es hat jede Wordpress-Installation auf meinem Server zum Absturz gebracht. Ich meine damit, dass außerhalb der Startseite, wenn man auf einen Eintrag in Wordpress klickte, er es nicht finden konnte. Die Lösung meines Hosts war, "RewriteEngine on" zu jeder .htaccess-Datei für jede Installation hinzuzufügen und im Stammverzeichnis des Webservers.

Das war eine großartige Lösung und alle Seiten funktionieren wieder - aber sie blockiert meine MP3-Dateien in diesem Ordner nicht mehr.

Was kann ich tun?

PS. Zur Klarstellung, der obige Code befindet sich in einer .htaccess-Datei im Ordner, der die MP3s enthält. Hoffe, das hilft!

2voto

JonLim Punkte 1372

Vielen Dank an Vinko Vrsalovic für all die Hilfe, hat mir auf jeden Fall geholfen, mich in die richtige Richtung zu weisen, benutze derzeit den folgenden Code:

SetEnvIfNoCase Referer www\.dizzler\.com bad_referer
SetEnvIfNoCase Referer ".*(dizzler|beemp3|skreemr).*" BlockedReferer
SetEnvIfNoCase REMOTE_ADDR ".*(220.181.38.82|202.108.23.172|66.232.150.219).*" BlockedAddress

# deny any matches from above and send a 403 denied

    order deny,allow
    deny from env=bad_referer
    deny from env=BlockedReferer
    deny from env=BlockedAddress

Teste es heute Abend aus, werde morgen zurückmelden, ob es funktioniert!

1voto

Vinko Vrsalovic Punkte 252104

FilesMatch ist die benötigte Direktive:

    Order Allow, Deny
    Allow from localhost #Oder die Adresse Ihres Players
    Deny From All

1voto

Mala Punkte 13338

Ich poste dies als eine weitere Antwort anstatt dies zu meinem anderen Beitrag hinzuzufügen, weil es das Problem aus einem anderen Blickwinkel angeht. Hier gehe ich davon aus, dass alle Ihre mp3s im selben Ordner sind.

Das Problem, dem Sie gegenüberstehen, ist auf schlampiges Codieren seitens derjenigen zurückzuführen, die das Mediaplayer-Ding gemacht haben, das Wordpress verwendet. Was passiert ist, dass der Player auf dem Rechner des besuchenden Benutzers läuft und tatsächlich die mp3 herunterlädt und lokal abspielt. Das Problem entsteht, weil der Player überhaupt keine nützlichen Header zur Verfügung stellt: Der User-Agent ist der Ihres Browsers, der Referrer ist leer usw. Es ist daher völlig unmöglich zu sagen, ob die Anfrage vom Player kommt oder von einem Browser, der auf Ihren Link in einer Audiosuchmaschine geklickt hat. Tatsächlich ist der einzige Weg, um Ihre mp3s davor zu schützen, indexiert zu werden, den Link so oft wie möglich zu ändern.

Und das ist genau der Plan. Kurz gesagt, hier ist was wir machen werden:

  • ändern Sie den Pfad zu Ihren mp3s. Dies bleibt GEHEIM.
  • erstellen Sie ein Skript, das als Proxy für die mp3s dient, welches einen gültigen Schlüssel erfordert, der sich stündlich ändert
  • ändern Sie alle Ihre Verwendungen des mp3-Players, um das mp3-Proxy-Skript zu verwenden, aber mit einem Platzhalter-Schlüssel
  • erstellen Sie ein Skript, das als Proxy für Ihren Webserver dient, welches den Platzhalter-Schlüssel durch den tatsächlichen Schlüssel ersetzt
  • verwenden Sie .htaccess, um alle Anfragen an Ihren Server umzuschreiben, damit sie das Webservers-Proxy-Skript verwenden.

Der Vorteil all dessen ist, dass sich Ihre Benutzererfahrung nicht ändern wird, aber wenn ein Crawler Ihre Links durchsucht, werden sie nur bis Mitternacht an diesem Tag gültig sein. Danach wird eine knappe Nachricht (oder sogar eine mp3 von Ihnen, die sie bittet, Ihre Sachen nicht herunterzuladen) angezeigt.

Bereit? Los geht's!


Schritt 1:

Zuerst einmal stellen Sie sicher, dass Sie Ihren mp3s-Ordner umbenannt haben! Dies wird alle vorhandenen Links brechen (und wenn Sie das nicht tun, bleiben alle bereits durchsuchten Links gültig). Zweitens erstellen Sie eine robots.txt-Datei, um Google und andere Suchmaschinen am Indexieren Ihres mp3s-Ordners zu hindern.

Jetzt erstellen Sie eine Datei im Stammverzeichnis namens mp3serve.php mit folgendem Inhalt:

Was dies tut, ist, dass es den Dateinamen einer MP3 und einen beliebigen Schlüssel nimmt und den Dateiinhalt zurückgibt, wenn der Schlüssel gültig ist. Beachten Sie, dass dieses Skript:

  • überhaupt nicht überprüft, ob $file auf das zeigt, was Sie erwarten, außer der Tatsache, dass es sicherstellt, dass es nur mp3-Dateien zurückgeben wird.
  • gibt keine gültigen Header für mp3-Dateien zurück - sie werden im Browser als Text gerendert. Dies ist leicht zu beheben, aber der korrekte Header entzieht sich mir im Moment... und sowieso kümmert sich der Wordpress mp3-Player nicht darum, also ist alles gut :)

Schritt 2:

Jetzt zum etwas kniffligen Teil: wir müssen die Links dynamisch umschreiben. Der einfachste Weg, dies zu tun, ist, einen "Lokal-Proxy" zu schreiben, was wirklich viel einfacher ist als es klingt. Was wir tun werden, ist ein Skript zu schreiben, das das hätte, was Ihre Seite ausgegeben hätte, und die mp3-Links korrigiert. In meinem Beispiel werden wir alle Ihre Artikel mit mp3s bearbeiten, aber wenn Sie es komplizierter gestalten möchten, ist dies nicht unbedingt erforderlich.

Zuerst bearbeiten Sie alle Ihre Artikel mit mp3-Playern. Sie könnten dies automatisieren, aber wenn WP keine Funktion zum "Finden/Ersetzen in allen Artikeln" hat, würde ich davon abraten, einfach aus dem Grund, dass Sie etwas falsch machen und Ihre Artikel zerstören könnten. Bearbeiten Sie sie auf jeden Fall und ersetzen Sie die mp3-Links in den Playern von
/pfad/zu/mp3s/.mp3
zu
/mp3serve.php?file=&key=[{mp3_dateischlüssel}]

Erstellen Sie nun ein weiteres PHP-Skript in Ihrem Stammverzeichnis namens proxyviewer.php mit folgendem Inhalt:

Schritt 3:

Jetzt zum letzten Teil: richten Sie Ihre .htaccess-Datei so ein, dass alle Anfragen von
http://ihreseite/irgendeine/anfrage/hier
zu
http://ihreseite/proxyviewer.php?req=irgendeine/anfrage/hier umgeleitet werden.

Leider bin ich wirklich nicht gut mit .htaccess-Dateien, also kann ich Ihnen den genauen Code nicht geben, aber es dürfte nicht allzu schwer sein.

Herzlichen Glückwunsch, Sie sind fertig!

Haftungsausschluss:

Bitte beachten Sie, dass der Code hier nicht für den produktiven Einsatz geeignet ist. Erstens habe ich ihn überhaupt nicht getestet - obwohl es, es sei denn, es gibt einen Schreibfehler irgendwo, alle funktionieren sollten, würde ich Ihnen dringend raten, sie sorgfältig durchzusehen, bevor Sie damit live gehen. Ich war ziemlich vorsichtig, um keine schlimmen Dinge zuzulassen, aber es überprüft nicht ernsthaft, und es ist früh am Morgen hier, also kann es sein, dass ich etwas übersehen habe.

0voto

Mala Punkte 13338

Ich denke, meine andere Antwort ist viel besser, aber es lohnt sich trotzdem, darüber nachzudenken

Beim Lesen einiger Antworten fällt mir eine weitere Idee ein: Lassen Sie Ihre Seite die IP-Adressen aller Besucher aufzeichnen, die sich innerhalb der letzten zwei (oder wie auch immer viele) Stunden auf Ihrer Website befunden haben. Erstellen Sie dann einen Job, der alle 2 Sekunden oder so ausgeführt wird und Ihre .htaccess-Datei so umschreibt, dass nur Zugriff auf mp3-Dateien von diesen IP-Adressen im Protokoll möglich ist.

Auf diese Weise haben nur die Benutzer Zugriff auf Ihre Musik, die innerhalb der letzten zwei Stunden eine Seite von Ihrer Website erhalten haben. Das wird für die überwältigende Mehrheit der Personen, die Ihre mp3s in Audio-Suchmaschinen finden, nicht funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X