Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PHP-Dateien vor direktem Aufruf im Browser schützen. (https://www.delphipraxis.net/119350-php-dateien-vor-direktem-aufruf-im-browser-schuetzen.html)

Matze 25. Aug 2008 10:34


PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Hallo,

ich rufe per JS/AJAX eine PHP-Datei auf, die man natürlich direkt im Browser aufrufen könnte. Kann man dies irgendwie halbwegs verhindern?
Natürlich kann man den Aufruf nicht komplett unterbinden, doch ich dachte daran, dass die PHP-Datei evtl. den Referer auswerten könnte. Wenn dieser von der Seite oder der JS-Datei kommt, ist alles ok, sonst wird die PHP-Datei verlassen. Nur hat eine JS-Datei keinen Referer.

Mal ein paar Hintergründe:
Man kann bei mir per AJAX gewisse Operatoinen ausführen. Ist JS im Browser deaktiviert, dann zeige ich einen Link zu der vom JS ausgerufenen PHP-Datei mit diversen Parametern an. Nun möchte ich nicht, dass Bots (egal ob gut- oder bösartig) diesen Link aufrufen können.

Grüße

Larsi 25. Aug 2008 10:41

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
0,26 Sekunden hätte Google gebraucht um dir eine passende Antwort zu liefern :)

Hier mal ein paar Links:
http://www.phpforum.de/archiv_32272_..._anzeigen.html
http://www.flashforum.de/forum/archi...p/t-78043.html
http://www.hackerboard.de/thread.php?postid=227997&sid=

Vielleicht hilft dir das Programm eAccelerator weiter.

MFG Lars Wiltfang

Matze 25. Aug 2008 10:43

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Das ist alles etwas komplett anderes als das, was ich suche.

DeddyH 25. Aug 2008 10:44

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Tja Larsi, voll am Thema vorbei.
@Matze: ginge das nicht über eine Session?

Larsi 25. Aug 2008 10:46

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Zitat:

Zitat von Matze
Das ist alles etwas komplett anderes als das, was ich suche.

Warum?

Du hast in deiner Frage wörtlich folgenden Satz geschrieben:

Zitat:

ich rufe per JS/AJAX eine PHP-Datei auf, die man natürlich direkt im Browser aufrufen könnte. Kann man dies irgendwie halbwegs verhindern?
Und das von mir genannte Programm eAccelerator macht doch genau das!

Matze 25. Aug 2008 10:47

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
@Detlef: Hm wenn der direkte PHP-Datei-Aufruf von der Website erfolgt ja, aber diese kann ja auch vom JS aufgerufen werden. Daher denke ich nicht, dass so etwas geht.
@Larsi: Dann kann aber JS auch nicht darauf zugreifen. Spamme bitte nicht mein schönes Thema voll. ;)

Edit: ich hatte "Detlaf" geschrieben.

Die Muhkuh 25. Aug 2008 10:48

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Ein Bot könnte genauso gut eine Session starten.

Liese sich eventuell mit einer htaccess was anstellen?

Ansonsten wäre noch eine Möglichkeit: Schreib Dir eine Klasse, die die gängigsten Bots erkennt und schreib dann in den PHP-Ajax-Dateien quasi sowas:

Code:
include('botrecognize.php');
if (isbot()) {
  die('No direct access for bots');
}
Übrigens: Du erkennst ja schon, ob JavaScript aktiviert ist und setzt je nach dem einen anderen Link da hin. Setze doch direkt da die Bot-Erkennungsfunktion ein: Wenn es ein Bot ist, mach aus dem Link einfach nur ein "#".

Namenloser 25. Aug 2008 10:50

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Willst du verhindern, dass die Seite aufgerufen werden kann, oder nur verhindern, dass der Bot bei ausgeschaltetem JavaScript den Link sieht/verwenden kann?

Angel4585 25. Aug 2008 10:52

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Er will das nur sein JS die Seite aufrufen kann
Man soll Sie zB. nicht selbst im Browser in die Adressleiste eingeben können

DeddyH 25. Aug 2008 10:53

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Wenn ich in meinen Feuerfuchs "http://www.matzes-seite.org" eingebe, bin ich dann ein Bot? :mrgreen:

[edit] Manuel: :tongue: (mooning gibbet ja hier nich)[/edit]

Die Muhkuh 25. Aug 2008 10:54

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Was Du bist, weiß keiner so genau :mrgreen:

Matze 25. Aug 2008 10:55

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Eine Bot-Erkennungsfunktion finde ich nicht schön, da ständig neue Bots hinzukommen. Außerdem kann man die Bots nur am User-Agent oder der IP erkennen. Die IP ändert sich ständig und der User-Agent kann vom Bot selbst definiert werden. Oftmals ist es ein gängiger Browser-User-Agent. Somit ist das alles andere als zuverlässig.
Per htaccess kann ich auch nur den Referer prüfen und das ist bei JS nicht möglich.

@Martin: Genau. Wenn jemand den Link direkt von meiner Website aufruft oder wenn die JS-Datei dies tut, soll es funktionieren. Gibt man die URL direkt im Browser ein, sollte der Code in der PHP-Datei nicht ausgeführt werden.

@Deddy: Ne, der User-Agent taucht sicher nicht in einer bekannten Bot-Liste auf. :P


PS: Langsam nerven die ganzen roten Kästen, ich kann den Beitrag gar nicht absenden. *g*

Namenloser 25. Aug 2008 10:56

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Ja, das war meine Frage, ob es um den Link geht, der von dem JS aufgerufen wird oder um den, den er hinschreibt wenn kein JS aktiviert ist.

Bei dem Link könnte ein Captcha helfen.

Aber ich glaube nicht, dass es für die AJAX-Seite eine 100%ige Lösung gibt. Du könntest höchstens ein möglichst kompliziertes Anmeldesystem (ginge dann wieder in Richtung Session) erstellen, wobei auch das natürlich knackbar wäre. Ist halt die Frage wie viel es dir bzw. dem Angreifer Wert ist.

Matze 25. Aug 2008 10:57

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Das "Problem" ist, dass auch nicht registrierte Besucher den Link nutzen dürfen. Sonst müsste ich ja nur die Session-Überprüfen.

Edit: Und eine Captcha kommt für mich nicht in Frage. Ziel ist es, die Benutzung so einfach zu halten, das ein einziger Link-Klick zum Ergebnis führt.

Namenloser 25. Aug 2008 10:58

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Und wenn du für jeden Besucher auch eine Session erstellen würdest? Natürlich erst nach dem Lösen eines Captchas.

[edit]Ok, also wenn Captcha ausscheidet wirds schwierig[/edit]

Phoenix 25. Aug 2008 11:26

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Quick & relativ dirty:
Übergebe bei einem Aufruf den Du selber startest und erlaubst einen 'geheimen' Parameter in der URL mit.
Fehlt dieser, ist es ein ungültiger Aufruf.

Bots raten nicht wild irgendwelche Parameter. Diese hast Du damit zuverlässig ausgesperrt. Ein menschlicher Benutzer könnte das zwar, müsste dann aber auch erst den korrekten Wert des Parameters erraten.

alcaeus 25. Aug 2008 11:30

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Zitat:

Zitat von Phoenix
Übergebe bei einem Aufruf den Du selber startest und erlaubst einen 'geheimen' Parameter in der URL mit.
Fehlt dieser, ist es ein ungültiger Aufruf.

Ich hatte auch an eine Art One-Time-Password gedacht. Du muesstest fuer jeden AJAX-Link ein eigenes OTP generieren. Wird die URL aufgerufen, wird das OTP geloescht und ein neues generiert und in den Link eingetragen. Wenn die OTPs dann auch nach einer gewissen Zeitspanne verfallen, ist es relativ schwer, einen ungueltigen Aufruf zu starten.

Greetz
alcaeus

Matze 25. Aug 2008 11:32

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
@Phoenix: Hm wie meinst du das genau?
bei Betreten der Seite speichere ich einen Zufalls-String in der Session, prüfe auf diesen und nach dem Aufruf des Skripts lösche ich ihn wieder aus der Session und erzeuge ggf. einen neuen?
Das würde den direkten Aufruf vermutlich verhindern, stimmt. Ich überlege nur grad, wo dort der Haken ist. :gruebel: :mrgreen:

@Andy+Phoenix: Ginge das auch über das $_SESSION-Array?

@Andy: Gut, du hast mir schon die meisten Antworten auf die Fragen gegeben. ;)

Namenloser 25. Aug 2008 11:35

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
IMO ist der Haken, dass ich das ganze immer noch automatisiert durchführen kann:
Seite aufrufen, ID abholen, AJAX-Seite mit ID aufrufen... Wirklich was gewonnen hast du dadurch nicht, außer, dass noch mehr Traffic erzeugt wird.

Matze 25. Aug 2008 11:39

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Das stimmt natürlich, aber ob das Bots machen, hm.

Edit: Vielleicht ab heute, weil ihr den "Trick" verraten habt. *g*

SubData 25. Aug 2008 11:46

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Evtl hilft auch das hier: http://de.wikipedia.org/wiki/Nofollow

Matze 25. Aug 2008 12:00

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Ne, das bringt mir nichts, denn Bots finden diese links dennoch.

generic 25. Aug 2008 12:38

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Es geht nicht, was du willst.

Fakten:
AJAX ist nichts anderes als eine Browseraufruf.
Deine Routinen müssen das Ziel kennen.
Dadurch muss das Ziel auch zum Client übertragen werden.
Alles was der Client hat, sieht und übertragen bekommt kann man sich anzeigen.
Im Zweifelsfall über Wireshark.

Schutzmechanismen kannst du aushebeln (sehr einfach sogar).
z.B. Browserstring verändern oder mit GreaceMoneky

Hier diese Spiel z.B. versucht das auch.
Leider erkennen die auch den Firefox als Hack:
http://battle.operation-universe.4pl...e/index_de.php

Matze 25. Aug 2008 12:56

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Dass es nicht sicher funktioniert, weiß ich. Doch man kann versuchen, es Bots schwer zu machen und das könnte mit diesem Zufalls-String klappen.
Das ist genauso wie mit Crack-Schutz-Mechanismen bei Software. ;)

alcaeus 25. Aug 2008 12:59

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Zitat:

Zitat von NamenLozer
Seite aufrufen, ID abholen, AJAX-Seite mit ID aufrufen... Wirklich was gewonnen hast du dadurch nicht, außer, dass noch mehr Traffic erzeugt wird.

Falsch, der Browser macht naemlich nichts anderes wenn du das Prozedere durchfuehrst. Wenn ich Matze richtig verstanden hab, will er folgendes:
  • Seite foo.php wird aufgerufen, diese enthaelt einen AJAX-Link
  • Wird dieser AJAX-Link geklickt, wird bar.php im Hintergrund aufgerufen, und verarbeitet

Zu verhindern gilt der zweite Schritt, d.h. das "unbeabsichtigte" Aufrufen von bar.php (z.B. weil der Link in Google indiziert wurde und als Suchergebnis angezeigt wird). Das liesse sich mit einem OTP leicht loesen, schliesslich ist das in der Ergebnis-URL gespeicherte Passwort nicht mehr gueltig ;)

Man muss an dieser Stelle aber auch sagen, dass das AJAX-Script (in diesem Fall bar.php) alle Kontrollen machen muss, d.h. ist der User eingeloggt? Darf er die Aktion ueberhaupt vornehmen? Sind die Parameter gueltig? Alles andere waere grob fahrlaessig, wenn nicht sogar dumm.

Greetz
alcaeus

Kalfany 25. Aug 2008 13:16

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Hallo,

ich habe vor einiger zeit sowas ähnliches gebraucht und zwar sollten zip / rar datein nur von einem PHP script aufgerufen (und ausgeliefert) werden.

.htaccess
Code:
Options +FollowSymlinks -MultiViews -Indexes
CheckSpelling Off

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.de/(.*)\.php$ [NC]
RewriteRule (.*)\.(RAR|ZIP)$ - [F]
evtl. funktioniert das ja für dich. erklärungen zu den einzelnen kommandos gibts auf der apache seite in der doku

Matze 25. Aug 2008 13:22

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
@Andy: Die Gültigkeit überprüfe ich selbstverständlich in der PHP-Datei.
@Kalfany: Das funktioniert in meinem Fall leider nicht, dass der direkte Aufruf über das JS möglich sein sollte.

tr909 25. Aug 2008 13:36

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
http://www.andreas-puls.de/2007/08/0...eferrer-check/
Code:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www.meine-domain.de/.*$ [NC]
RewriteRule ^skript.php$ [F]

# optional für Dateiendungen

RewriteRule .(jpe?g|gif|bmp|png)$ - [F]
Somit wäre das Script mir namen "skript.php" nur über die Seite selbst aufrufbar.

Leider dürfte dann der Zugriff per Ajax nicht mehr nöglich sein.
Dafür hätte ich folgende Lösung. Dafür braucht man dann noch ein Ersatzscript das das eigentliche Script aufruft.
Das Ajax-Script ruft vorher ein php-script auf, das z.B. die IP und anderes speichert.
Beim Aufruf ddes "Ersatzscripts" wird geprüft ob es für diese IP einen Eintrag gibt, läuft durch und löscht den Eintrag wieder.
Am bsten per Timestamp nen ablaufdatum einbauen. Das die beiden scripte ja direkt nacheinander ausgeführt werden reicht ja ne gültigkeit im Sekundenbereich.

Gruß
tr909

Matze 25. Aug 2008 14:57

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Danke für deinen Vorschlag. Dann würde ich jedoch den Bots das Ersatzskript präsentieren und wäre da, wo ich vorhin auch war. ;)

Ich denke, ich teste gegen später die Lösung mit dem Zufalls-String.

Grüße

SubData 25. Aug 2008 15:19

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Code:
<FORM METHOD="POST">
 
</FORM>
Wenn du Daten mit POST an den Server schickst, werden diese Daten von Bots ignoriert.

Und die Bots, die das nicht ignorieren, sind darauf ausgelegt nicht erkannt zu werden (Spam Bots).

franktron 25. Aug 2008 15:53

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Also ich hab das mal so gemacht um Bots zu ärgern.

Ich habe mehrer Params gehabt und sobald einer fehlt kommt ein 404 Error

generic 25. Aug 2008 19:37

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Referer werden von manchen Personal Firewalls geblockt.

Hador 27. Aug 2008 00:22

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Zitat:

Zitat von generic
Referer werden von manchen Personal Firewalls geblockt.

Und in manchen Browsern kann man abstellen, dass sie übertragen werden. Hab ich bspw. getan.

sx2008 27. Aug 2008 01:22

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Du könntest den Link auf der Clientseite durch Java Script erzeugen lassen.
Bots führen kein Java Script aus und können daher dem Link nicht folgen.
http://www.allmyscripts.com/Dynamic_Links/index.html

Matze 27. Aug 2008 08:48

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Hallo,

mir geht es darum, dass die Seite auch mit deaktiviertem JavaScript bedienbar ist. Da Google mittlerweile JS ausliest machen sich andere Bots sicher auch die Mühe.

Aber ich habe noch eine Frage zu diesem Zufallsstring:
Der Zufallsstring wird erzeugt und an die URL angehängt oder im $_SESSION-Array übertragen. Wobei mir letzteres lieber ist, da man so nur eine einzige URL hat. Wer Cookies deaktiviert hat ist selber Schuld.

Den Zufallsstring muss ich aber ja irgendwie vergleichen können. D.h. ich muss diesen in der Datenbank speichern oder wie? Und wenn der String nur eine begrenzte Gültigkeit hat, müsste eine Tabelle so ungefähr aussehen, oder?

string | expires_on

Nur muss ich den String ja auch noch den Benutzern zuordnen können, also benötige ich pro Besucher einen Zufallsstring. :gruebel:

Könnte mir da bitte jemand das Vorgehen erklären? Im Internet konnte ich hierzu leider nichts finden, was mir weiterhilft.

Grüße, Matze

franktron 27. Aug 2008 09:22

Re: PHP-Dateien vor direktem Aufruf im Browser schützen.
 
Zitat:

Zitat von generic
Referer werden von manchen Personal Firewalls geblockt.

Wer hat was von Referer gesagt ???

Ich erstelle einen 404 Header und gut ist da ist nix Referer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz