PHP-Skript aufrufende Instanz

Siebi71

Grünschnabel
Liebe Forums-User,

ich bin absoluter Anfänger in PHP/MySQL und möchte dennoch möglichst geschickt anfangen. Alles Notwendige liegt auf meinem Server in meinem Netz.

An sich funktioniert PHP und auch die Datenbank ist ansprechbar. Um den Aufbau und Inhalt meiner geplanten Web-Site von vornherein gut zu strukturieren, dachte ich an ein Verzeichnis, welches die HTML-Seiten enthält. Diese HTML-Seiten sollen auf PHP-Skripte zugreifen - z.B. mit form action post... . Diese PHP-Skripte sollen wiederum in Unterverzeichnissen liegen, damit die gesamte Veranstaltung einer gewissen Struktur genügt und die Übersichtlichkeit gewahrt wird.
Habe ich eben so auch angefangen und ein einfaches Mail-Formular wird angezeigt und dieses Formular ruft auch das zugehörige Skript im Unterverzeichnis auf. Funktioniert auch.
Nun wollte ich zur Sicherheit diese Skript-Verzeichnisse mit Hilfe einer .htaccess-Datei vor unerlaubtem Zugriff schützen. Der Inhalt der .htaccess-Datei erlaubt nur dem Server selbst Zugriff auf die Skript-Verzeichnisse. Funktioniert auch.
Wenn ich nun aber von einem x-beliebigen Client die HTML-Seite mit dem Mail-Formular aufrufe, wird diese dargestellt aber beim Aufruf des Skriptes eben durch die Seite, wird der Zugriff verweigert.
Aufrufende Instanz ist der die HTML-Seite darstellende Client und nicht der Server, auf dem die HTML-Seite ruht. Davon war ich aber eigentlich ausgegangen.
Habe ich hier einen Denkfehler oder ist es ein Konfigurationsproblem.....

Für jede Hilfe dankbar

Siebi

PS: sollte es hier bereits umfangreiche Hilfe zu diesem Punkt geben, so bitte ich um Nachsicht. Ich habe es nicht gefunden
 
Moin Siebi
Aufrufende Instanz ist der die HTML-Seite darstellende Client und nicht der Server, auf dem die HTML-Seite ruht. Davon war ich aber eigentlich ausgegangen.
Habe ich hier einen Denkfehler oder ist es ein Konfigurationsproblem.....

Ja, da hattest du einen Denkfehler.

Verzeichnisschutz bspw. per .htaccess betrifft alle HTTP-Anfragen. Auch wenn du ein Formular sendest, erfolgt eine HTTP-Anfrage(an das Formularziel).

Solch eine Struktur ist schon sinnvoll, du solltest aber besser deine Dateien kategorisieren in solche, welche per HTTP zugreifbar sein müssen, und in solche, bei denen dies nicht der Fall ist(bspw. PHP-Skripte, welche ausschliesslich in die erstgenannten per include/require eingebunden werden). Das Verzecihnis mit den zuletzt genannten Dateien kannst und solltest du dann sogar sichern.

Wenn du totsicher erreichen willst, dass das Formularziel nur aufgerufen werden kann, wenn es über Senden deines eigenen Formulars erreicht wurde, ...dies geht nicht :(

Es gibt aber PHP-Wege, Angriffsquellen einzuschränken, z.B. indem du Sessions verwendest und im empfangenden PHP-Skript prüfst, ob eine bestimmte gesetzte Session-Variable vorhanden ist und den erwarteten Wert hat.
 
das leuchtet ein und die Kategorisierung war quasi meine Absicht.

Mir ist nur immer noch nicht klar: wer ruft am Ende das Skript auf:

a) der Server, auf dem die HTML-Info liegen, die dem Client zur Darstellung angeboten werden oder

b) der Client, der mit Hilfe der vom Server zur Verfügung gestellten HTML-Informationen die HTML-Seite tatsächlich darstellt (so steht es in der access.log)

Kann man die aufrufende Instanz durch Programmtrick beeinflussen/festlegen?

Danke vorab
 
Mal ein Beispiel:

Code:
<form action="skript.php">

....
skript.php sieht folgendermaßen aus:
PHP:
Hier steht irgendwas
<?php
   include('nocheinskript.php');
?>

Sendest du nun das Formular, erfolgt durch den Clienten eine HTTP-Anfrage an skript.php...das lässt sich auch nicht durch Tricks beeinflussen.

In die skript.php wird die nocheinskript.php eingebunden. Auf die nocheinskript.php efolgt jedoch keine HTTP-Anfrage, das Einbinden erfolgt übers Dateisystem des Servers, du kannst die nocheinskript.php also problemlos in einem gesicherten Verzeichnis unterbringen, um sie vor HTTP-Anfragen zu Schützen.
 
Zuletzt bearbeitet:
Hallo Sven,

habe ich versucht. Hat bisher leider nicht funktioniert. Eine grundsätzliche Frage habe ich aber in diesem Zusammenhang eh:

Mit from action..... method post wird ja ein Inhalt - ich denke mal $_post - an das aufgerufene Skript übergeben. Wenn dass aufgerufene Skript aber nun lediglich aus include('weiteresSkript") besteht, ist mir noch nicht ganz klar, wie die Variableninhalte letztendlich bei 'weiteresSkript' ankommen sollen......

Es tut mir leid, aber ich bin halt blutiger Anfänger ....

Vielen vielen Dank für Hilfe.

Siebi
 
weiteresSkript verhält sich so, als hättest du es direkt in skript.php stehen, alle Variablen, die in skript.php vorhanden sind, sind verfügbar, auch sonst verhält sich alles, als wäre der Inhalt von weiteresSkript direkt in skript.php notiert, also bspw. auch Pfade im Dateisystem.
 
hm, irgendwie bekomme ich das nicht gebacken. Folgende Meldung:

Failed opening '/Script/mail.php' for inclusion (include_path='.:') verstehe ich, als dass das Skript (das eigentliche Skript quasi) nicht gefunden wurde.


Eingebunden habe ich es so:

<?php include("/Script/mail.php") ?> (das ist quasi das PHP-Skript in der Mitte)

wobei /Script sei ausgehend vom Startverzeichnis = dem Verzeichnis, in dem die HTML-Datei bzw. das durchreichende PHP-Skript liegt. Oder muss man da irgendwie relative Pfadangaben verwenden.....

Vielen Dank für weitere Hilfe

Siebi
 
Das mit Pfaden funktioniert bei Aktionen im Dateisytem(wie bspw. bei include) anders als auf der Webseite.

Wenn du in einer Webseite einen Pfad mit / beginnst, verweist dies auf die DOCUMENT_ROOT(idR. htdocs)

Im Dateisystem auf die Wurzel des Serververzeichnis.

Poste mal die Verzeichnisstruktur, aus der hervorgeht, wo sich die Seite(bei action angegeben) und die mail.php befinden...aber auf den blauen Dunst hin würde ich folgendes vorschlagen:

Code:
<?php include("Script/mail.php") ?>
...das würde zutreffen, wenn sich das Verzeichnis Script im selben Ordner befindet wie die aufgerufene Seite.
 
You Godfather of PHP - es funktioniert.

Ich würde zwar Stein und Bein schwören, ich hätte es so schon vorher probiert - nach Deinem Tip von gestern - aber .... Vielleicht war auch ein / zu viel oder zu wenig.

Vielen vielen Dank.

Du has mich meinem Ziel eine ganze Ecke weiter gebracht.

Gruß

Siebi
 
Zurück