security - Blockieren Sie den Benutzerzugriff auf Interna einer Site mithilfe von HTTP_REFERER

Translate

Ich habe die Kontrolle über den HttpServer, aber nicht über den ApplicationServer oder die dort befindlichen Java-Anwendungen, muss jedoch den direkten Zugriff auf bestimmte Seiten dieser Anwendungen blockieren. Genau genommen möchte ich nicht, dass Benutzer den Zugriff auf Formulare automatisieren, die direkte GET / POST-HTTP-Anforderungen an das entsprechende Servlet senden.

Also habe ich beschlossen, Benutzer basierend auf dem Wert von zu blockierenHTTP_REFERER. Wenn der Benutzer innerhalb der Site navigiert, hat er schließlich eine entsprechendeHTTP_REFERER. Nun, das dachte ich mir.

Ich habe eine Umschreiberegel in die .htaccess-Datei implementiert, die besagt:

RewriteEngine on 

# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteRule (servlet1|servlet2)/.+\?.+ - [F]

Ich hatte erwartet, Benutzern den Zugriff zu verbieten, die nicht auf der Site navigierten, sondern mithilfe von Abfrageringen direkte GET-Anforderungen an die Servlets "servlet1" oder "servlet2" ausgaben. Aber meine Erwartungen endeten abrupt wegen des regulären Ausdrucks(servlet1|servlet2)/.+\?.+hat überhaupt nicht funktioniert.

Ich war wirklich enttäuscht, als ich diesen Ausdruck in änderte(servlet1|servlet2)/.+und es hat so gut funktioniert, dass meine Benutzer blockiert wurden, egal ob sie auf der Website navigierten oder nicht.

Meine Frage lautet also: Wie kann ich erreichen, dass "Roboter" keinen direkten Zugriff auf bestimmte Seiten erhalten, wenn ich keinen Zugriff / keine Berechtigungen / keine Zeit zum Ändern der Anwendung habe?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Ich bin mir nicht sicher, ob ich das auf einmal lösen kann, aber wir können nach Bedarf hin und her gehen.

Zuerst möchte ich wiederholen, was ich denke, dass Sie sagen, und sicherstellen, dass ich klar bin. Sie möchten Anforderungen an Servlet1 und Servlet2 nicht zulassen, wenn die Anforderung nicht über den richtigen Referer verfügttutHaben Sie eine Abfragezeichenfolge? Ich bin nicht sicher, ob ich (servlet1 | servlet2) /.+\?.+ verstehe, da Sie anscheinend eine Datei unter servlet1 und 2 benötigen. Ich denke, Sie kombinieren PATH_INFO (vor dem "?") Mit einem GET Abfragezeichenfolge (nach dem "?"). Es scheint, dass der PATH_INFO-Teil funktioniert, der GET-Abfragetest jedoch nicht. Ich habe auf meinem Server einen kurzen Test mit script1.cgi und script2.cgi durchgeführt. Die folgenden Regeln haben dazu beigetragen, das zu erreichen, wonach Sie fragen. Sie sind offensichtlich ein wenig bearbeitet, um meiner Umgebung zu entsprechen:

RewriteCond %{HTTP_REFERER} !^http://(www.)?example.(com|org) [NC]
RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^(script1|script2)\.cgi - [F]

Das oben Gesagte hat alle Anfragen nach falschen Verweisen an script1.cgi und script2.cgi erfasst, die versucht haben, Daten mithilfe einer Abfragezeichenfolge zu senden. Sie können Daten jedoch auch mit path_info und durch Posten von Daten senden. Ich habe dieses Formular verwendet, um mich vor einer der drei Methoden zu schützen, die mit einem falschen Referer verwendet werden:

RewriteCond %{HTTP_REFERER} !^http://(www.)?example.(com|org) [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule ^(script1|script2)\.cgi - [F]

Anhand des Beispiels, mit dem Sie arbeiten wollten, denke ich, dass Sie Folgendes wollen:

RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule (servlet1|servlet2)\b - [F]

Hoffentlich bringt Sie dies zumindest Ihrem Ziel näher. Bitte lassen Sie uns wissen, wie es funktioniert, ich bin an Ihrem Problem interessiert.

(Übrigens stimme ich zu, dass das Blockieren von Referenten eine schlechte Sicherheit darstellt, aber ich verstehe auch, dass Relaity manchmal unvollkommene und partielle Lösungen erzwingt, die Sie anscheinend bereits anerkennen.)

Quelle
Translate

Ich habe keine Lösung, aber ich wette, dass es niemals funktionieren wird, sich auf den Referrer zu verlassen, da Benutzeragenten frei sind, ihn überhaupt nicht zu senden oder an etwas zu fälschen, das sie hereinlässt.

Quelle
Translate

Sie können Benutzer und bösartige Skripte nicht anhand ihrer http-Anfrage unterscheiden. Sie können jedoch in zu kurzer Zeit analysieren, welche Benutzer zu viele Seiten anfordern, und ihre IP-Adressen blockieren.

Quelle
Translate

Die Verwendung eines Überweisers ist als Überprüfungsmethode sehr unzuverlässig. Wie andere Leute erwähnt haben, ist es leicht zu fälschen. Ihre beste Lösung besteht darin, die Anwendung zu ändern (wenn Sie können).

Sie können ein CAPTCHA verwenden oder eine Art Cookie oder Sitzungscookie festlegen, mit dem aufgezeichnet wird, welche Seite der Benutzer zuletzt besucht hat (eine Sitzung ist schwerer zu fälschen), den Verlauf der Seitenansicht verfolgt und nur Benutzern gestattet wird, die die Seite durchsucht haben Seiten, die erforderlich sind, um zu der Seite zu gelangen, die Sie blockieren möchten.

Dies setzt natürlich voraus, dass Sie Zugriff auf die betreffende Anwendung haben, dies ist jedoch der kinderleichteste Weg (meiner Meinung nach nicht vollständig, aber "gut genug").

Quelle
Translate

Javascript ist ein weiteres hilfreiches Tool, um das Scraping von Bildschirmen zu verhindern (oder zumindest zu verzögern). Die meisten automatisierten Scraping-Tools verfügen nicht über einen Javascript-Interpreter, sodass Sie beispielsweise ausgeblendete Felder festlegen usw. können.

Edit: Etwas in der Art vondieser Phil Haack Artikel.

Quelle
Kev
Translate

Ich vermute, Sie versuchen, Bildschirmkratzer zu verhindern?

Meiner ehrlichen Meinung nach ist es schwierig zu lösen und zu versuchen, das Problem zu beheben, indem der Wert von HTTP_REFERER überprüft wird. Dies ist nur ein Heftpflaster. Jeder, der sich die Mühe macht, Einreichungen zu automatisieren, wird geschickt genug sein, um den richtigen Referer von seinem "Automaten" aus zu senden.

Sie könnten versuchen, die Rate zu begrenzen, aber ohne die App tatsächlich zu ändern, um irgendwann eine Art Is-this-a-Human-Validierung (CAPTCHA) zu erzwingen, werden Sie feststellen, dass dies schwer zu verhindern ist.

Quelle
Translate

Wenn Sie verhindern möchten, dass Suchmaschinen-Bots auf bestimmte Seiten zugreifen, stellen Sie sicher, dass Sie eine ordnungsgemäß formatierte Version verwendenrobots.txtDatei.

Die Verwendung von HTTP_REFERER ist deshalb unzuverlässigleicht zu fälschen.

Eine andere Option besteht darin, die Benutzeragentenzeichenfolge auf bekannte Bots zu überprüfen (dies erfordert möglicherweise eine Codeänderung).

Quelle
Translate

Um die Dinge etwas klarer zu machen:

  1. Ja, ich weiß, dass die Verwendung von HTTP_REFERER völlig unzuverlässig und etwas kindisch ist, aber ich bin mir ziemlich sicher, dass die Leute, die (vielleicht von mir?) Das Erstellen von Automatisierungen mit Excel VBA gelernt haben, nicht wissen, wie man einen HTTP_REFERER innerhalb der vorgegebenen Zeitspanne unterwandert das finale Resultat.

  2. Ich habe keinen Zugriff / keine Berechtigung zum Ändern des Anwendungscodes. Politik. Glaubst du das? Ich muss also warten, bis der Rechteinhaber die von mir angeforderten Änderungen vorgenommen hat.

  3. Aus früheren Erfahrungen weiß ich, dass die angeforderten Änderungen zwei Monate dauern werden, bis sie in Produktion gehen. Nein, sie in ihre Köpfe zu werfen, hat nichts verbessert.

  4. Dies ist eine Intranet-App. Ich habe also nicht viele Jugendliche, die versuchen, mein Ansehen zu untergraben. Aber ich bin jung genug, um zu versuchen, das Prestige eines "sehr ausgefallenen globalen Beratungsdienstes, der aus Indien kommt" zu untergraben, aber wo seltsamerweise kein einziger Inder arbeitet.

Die beste Antwort kommt bisher von "Michel de Mare": Blockieren Sie Benutzer basierend auf ihren IPs. Nun, das habe ich gestern gemacht. Heute wollte ich etwas allgemeineres machen, weil ich viele Känguru-Benutzer habe (die von einer IP-Adresse zu einer anderen springen), weil sie VPN oder DHCP verwenden.

Quelle
Translate

Möglicherweise können Sie ein Anti-CSRF-Token verwenden, um das zu erreichen, wonach Sie suchen.

Dieser Artikel erklärt es ausführlicher:Fälschungen von standortübergreifenden Anfragen

Quelle