PHP-Skript darf nur aus einer Stelle angesteuert werden

Alice

Erfahrenes Mitglied
Hallo. :)

Kann ich folgendes auch ohne eine .htaccess-Datei umsetzen?

Ich habe zwei Dateien:
1.) HTML-Datei (Formular) -> avatar-generator.html
2.) PHP-Datei (Skript) -> ava_gen.php

Beide Dateien sind voneinander abhängig.

Jedoch kann man (wenn man die URL kennt) die PHP-Datei auch direkt aufrufen und erhält viele Fehler (z.B. session_start) und teilweise auch an einige andere wichtige Daten.

Ich versuche nun in einer IF-Abfrage ganz weit oben im Skript abzufragen ob der Seitenaufruf von der richtigen Stelle kommt und wenn nicht mit "exit" auszusteigen.

Geht das überhaupt? Wenn ja, wie? :)
 
Werte $_POST am Anfang von ava_gen.php aus, wenn das Formular nicht abgeschickt wurde, dann führe in der ava_gen.php nichts aus.
 
Du könntest zusätzlich noch den Referer prüfen.
Nachteil bei beiden Varianten ist, dass man beiden nicht zu 100% trauen kann.
 
Das Problem ist das, egal was ich mache, immer wichtige Daten an den Browser geschickt werden.

PHP:
   if (isset($var)) 
   {
       echo 'Zutritt gestattet';
   } 
       else
   {
       echo 'Zutritt verweigert';
   }

Beim direkten Seitenaufruf gibt es "$var" nicht und es erscheint eine Fehlermeldung das es die Variable nicht gibt.

Kann man diesen Fehler irgendwie unterbinden?
 
Nehme dafür die() oder exit(). Oder statt Zugriff gestattet, packe da den Code rein der ausgeführt werden soll.
 
Das hatte ich natürlich auch so vor. Der Code soll nur demonstrieren wie mein Gedankengang ist.

Problem besteht aber weiterhin:
Da es ohne Formular kein "$var" gibt, bekommen ich Fehler.

Edit:

Ich habe eine gute Lösung gefunden.

Beispiel:

index.php
PHP:
   define('CALLED_FROM_INDEX', true );

skript.php
PHP:
   if(!defined('CALLED_FROM_INDEX'))
   {
      exit("Zugriff verweigert");
   }

Danke für die Hilfe.
 
Zuletzt bearbeitet:
Klappt aber auch nur, wenn skript.php in index.php (oder umgekehrt) eingebunden wird. Bei dem Aufruf so wie Du ihn beschrieben hast hilft Dir das gar nichts.
 
Mein Skript läuft mit 3 Dateien:
- avatar-generator.html (ist ja eigentlich nur ein Template)
- bridge_ava_gen.php
- ava_gen.php

Die "bridge_ava_gen.php" habe ich nicht erwähnt, weil sie "nur" eine Verbindung zwischen Forum und Skript darstellt.

Wenn man "bridge_ava_gen.php" direkt aufruft, wird direkt die "avatar-generator.html" geladen.

Jedenfalls kann man "ava_gen.php" jetzt gar nicht mehr ohne "bridge_ava_gen.php" aufrufen.
 
Für dein Beispiel mit 1. HTML-Datei (Formular) -> avatar-generator.html und 2. PHP-Datei (Skript) -> ava_gen.php könnte das so aussehen:

avatar-generator.html
HTML:
<form id="avagen" method="post" action="ava_gen.php">
    <p>
        <input type="text" id="foo" name="foo" value="" />
        <input type="text" id="bar" name="bar" value="" />
        <input type="submit" id="ava" name="ava" value="submit" />
    </p>
</form>
ava_gen.php
PHP:
if ( false === isset( $_POST['ava'] ) OR 'submit' != $_POST['ava'] )
{
    exit;
}

/* ganz viel aufwändiger Code */

Gruß
 
Zurück