• Guten Tag,


    ich würde gerne mein Include etwas sichern und er zeigt mir jedoch ein Fehler an. Ich bin mir sicher das ich es nicht richtig verstanden habe.


    [PHP]
    <?php
    // Header \\
    if(isset($_REQUEST['header']) && !ereg('/',$_REQUEST['header'])) {
    include($_REQUEST['header']);
    } else {
    echo "Fehler";
    }
    ?>
    [/PHP]


    Meine Datei ist im gleichen Ordner und heißt header.php , doch er sagt mir Fehler aus.

  • Damit das ganze Sicher abläuft..
    Nehmen wir an du hast einen Seitenaufruf wie den hier http://example.com/?page=test


    index.php


    startseite.php

    PHP
    <?php
      //prüfen ob die Datei vom System aufgrufen wird (wenn nicht das script stoppen)
      defined('SYSTEM') OR exit('No direct script access allowed');
    ?>
    Content of mainpage
  • Danke erstmals, jedoch klappt es irgendwie bei mir nicht.
    Ich habe nur eine index.php datei namens page.php, geht es auch wenn ich alles zsm fasse? das mit defined('System')?


    page.php
    [PHP]
    <?php
    require_once 'dbconfig.php';


    define('SYSTEM', true);
    define('CONTENTS', 'contents/');


    $ls_page = !empty($_GET['page']) ? trim($_GET['page']) : 'start';


    switch($ls_page) {
    case 'start':
    $ls_filename = 'page.php';
    break;
    case 'register':
    $ls_filename = 'register.php';
    break;
    default:
    header("HTTP/1.0 404 Not Found");
    $ls_filename = '404.php';
    break;
    }

    if(!file_exists(CONTENTS . $ls_filename)) {
    header("HTTP/1.0 503 Service Unavailable");
    $ls_filename = '404.php';
    }

    ob_start();

    include CONTENTS . $ls_filename;

    $ls_content = ob_get_clean();
    ?>


    <?php
    defined('SYSTEM') OR EXIT('No direct script access allowed');
    ?>
    <!DOCTYPE html>
    <html lang="de">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no">
    <style>
    @-ms-viewport{ width:device-width; }
    </style>
    <!-- STYLESHEETS -->
    <link rel="stylesheet" href="css/style.css" type="text/css">
    <link rel="stylesheet" href="css/normalize.css" type="text/css">
    <!-- STYLESHEETS END -->


    <title>Homepage</title>
    </head>
    <body>


    <?php
    include 'header.php';
    echo $ls_content;
    ?>
    [/PHP]


    1. Wenn ich z.B oben start eingebe, leitet er mich nicht weiter zur startseite.php , in meinem fall page.php.


    2. Wenn ich mich in der page.php befinde und auf der URL register.php klicke, zeigt er mir direkt No direct script access allowed an.

  • * contents * ^^ . aufjedenfall weiß ich nicht woran es liegt <.<


    Sogesehen möchte/würde ich es am besten so haben: example.de/register und nicht example.de/register.php or ?page=register .. aber meine Erfahrung reicht nicht aus um es durchzusetzen


  • Trenn alles ordentlich voneinander und dann bindest Du die einzelnen Seiten am Ende der index.php einfach ein.
    Damit sollte es auch keine Probleme geben, habs vor kurzem auch so in etwas verwendet und vorallem sparst Du Dir das sinnlose Output-Buffering, welches Du für Deinen Fall gar nicht benötigst, insbesondere weil Du selbst sowas wie den Status-Code 503 nie ausgibst: Das ist der Statuscode, der vom Server gesendet wird, wenn der Server überlastet/nicht erreichbar ist.


    Es hat übrigens auch kein sonderlichen Sinn in der selben Datei, in der Du die Constante definierst, abzufragen ob sie in dieser Datei existiert. Natürlich existiert sie: Ist ja die selbe Datei. Das prüfst Du nur in allen anderen Dateien, um zu schauen ob die Dateien legal von Deinem Main-Script includet wurden und nicht einfach direkt aufgerufen wurden.

  • Danke dir aber es scheint ein Problem da zu stehen.



    Warning: preg_replace() [function.preg-replace]: Compilation failed: range out of order in character class at offset 14 in /users/varez-data/www/bk/index.php on line 12


    Falls ich etwas in der URL schreibe kommt direkt bplaced.net/404 Fehlerseite

  • PHP
    $page = preg_replace('/[^a-zA-Z0-9\/_-]/', '', $_GET['page']);


    Einfach austauschen, dann sollte der Fehler weg sein
    Wenn die Seite dann immer noch nicht gefunden wird, setz unter:


    PHP
    $targetFile = __DIR__.'/contents/'.$page.'.php';


    nochmal:


    PHP
    var_dump($targetFile);


    Und schau nach, ob der Pfad auch wirklich korrekt ist, bzw, Deine Dateien dort auch gefunden werden können.

  • Alles funktoniert, nur halt nicht mit der URL immer kommt bplaced.net/404 Error Fehler, ich glaube der Webprovider hat eine htaccess Datei oder so erstellt als Schutz das wenn ein Verzeichnis oder Datei nicht gibts, das dann diese Errormeldung erscheint.



    vardump: string(42) "/users/varez-data/www/bk/contents/page.php" (funktoniert)

  • wolf , danke habs nur nicht richtig ausgedrückt. Ich habe hier mal eine und dies auf Xampp getestet. Es wirkt jedoch nicht. Sinn: Falsche eingabe = immer index.php:



    htaccess:


    RewriteEngine On
    RewriteBase /


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d


    RewriteRule ^ index.php [QSA,L]

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!