Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Direktzugriff auf PHP Include unterbinden..

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Direktzugriff auf PHP Include unterbinden..

    Hallo liebe Community, ich hab da Problem bei der Unterbindung des Direktzugriffs auf Dateien welche ich einbinden möchte.

    Grundaufbau der Seite.

    Die Index.php bindet einen HTML Headerfile ein, welche wiederrum im Headbereich der Seite dann die params.php einbinden soll. Diese enthält Datenbankparameter und alle anderen includes. Nun möchte ich aber den direkten Zugriff auf die params.php unterbinden. Ich habe im Netz geschaut und einen eigentlich verständlichen Ansatz gefunden, den ich mit meinen PHP Kenntnissen vermeitlich verstanden habe. Jedoch funktioniert dieser Ansatz bei mir irgend wie nicht. Vielleicht kann mir jemand sagen, was ich hierbei falsch mache.

    index.php
    Code:
    define('ACCES', TRUE);
    include 'header.html';
    header.html
    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
           "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    	<head>
    		<meta charset="iso-8859-1">
    		<?php include_once 'page/params.php'; ?>
    	</head>
    params.php
    Code:
    	if(!define('ACCESS')){
    	   die('Direktzugriff nicht mögich');
    	}
    	echo "ZUGRIFF MÖGICH";

    Wenn ich jetzt die index.php aufrufe bekomme ich folgende Fehermeldung.
    Warning: define() expects at least 2 parameters, 1 given in C:\xampp\htdocs\user\page\params.php on line 7
    Direktzugriff nicht mögich

    Die Fehlermeldung kann ich ja noch mit @ unterbinden, jedoch ist der Zugriff über die Index.php nicht möglich. Der Direktzugriff bzw. die Unterbindung funktioniert schon mal, aber das ganze bringt mir ja nichts, wenn ich nicht über die index.php auf die params.php zugreifen kann.

    Wenn ich mir jetzt die Konstante in der params ausgeben (zugriff über die index.php) hat ACCESS auch den Wert 1, ich verstehe nicht ganz wieso dann der Ausdruck if(@!define('ACCESS')) ein TRUE ergibt.

  • #2
    !defined

    PHP-Code:
    if(!defined('ACCESS')){ 
    Ausserdem: define('ACCES', TRUE);
    Sollte das nicht define('ACCESS', TRUE); heissen?

    Kommentar


    • #3
      @rkr natürlich sollte es das.. In meiner params.php steht es korrekt drin, nur ein Fehler beim übertragen ins Forum. Mea Culpa..

      Aber vom Grundgedanken her, sollte das doch funktionieren oder? !define('ACCESS') sollte mir doch je nach definiert, ja oder definiert, ein einen Bool als Rückgabewert liefern. So steht es zu mindestens in der PHP Doku drin. Hab ich da irgend etwas falsch verstanden?

      Kommentar


      • #4
        Sollte funktionieren: Ja
        Ist der richtige Lösungsweg: Nein

        Du kannst den Zugriff auf das Unterverzeichnis ja einfach über .htaccess unterbinden.

        Besser noch: Wenn du dich an moderen MVC-Pattern orientierst und objektorientiert arbeitest, brauchst du das idR nicht einmal.

        Kommentar


        • #5
          @rkr das ich das mit einer .htaccess steuern kann weis ich, aber ich wollte halt auch mal einen anderen Weg gehen. Einfach nur für den Lerneffekt. Dazu kommt noch, der Ansatz ist eigentlich recht banal und ich verstehe nicht wieso er nicht funktioniert, htaccess hin oder her.

          Ich versuche mein bestes in Punkto MVC und OOP..

          Kommentar


          • #6
            ich weiss nicht wovor du genau Angst hast - wenn einer den include direkt öffnet, sieht er "nichts" weil der Browser nur das ausgewürfelte Html anzeigt - also bei deinem include ne leere Seite - weil das Html ja über index.php generiert wird. Damit sieht er auch deinen Datenbank-Zugang nicht.
            Den php-Code könnte ein neugieriger "Angreifer" nur über den FTP-Zugang erhalten - nicht aber über den Browser.

            Wenn du sicher gehen willst, solltest du die include-Scripte in einen Unterordner packen, und den per .htaccess für den Browser sperren. Include funktioniert trotzdem, weil der Zugriff über das Dateisystem und nicht über den Browser läuft.

            PS - versuch es mal mit Double-Quotes statt Single-Quotes (Hochkomma)
            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

            Kommentar


            • #7
              @eagle275 mit double Quotes funktioniert es auch nicht, keine Ahnung wieso das nicht funktioniert. Aber letztlich hast du auch Recht, eigentlich kann mir ja nichts passieren falls jemand direkt auf z.B. die params.php zugreift, da ich die Parameter nicht ausgebe sondern nur definiere. Nun gut, ich werde es zur Sicherheit mit einer .htaccess unterbinden. Dennoch danke für deinen Denkanstoß..

              Kommentar


              • #8
                !define('ACCESS') sollte mir doch je nach definiert, ja oder definiert, ein einen Bool als Rückgabewert liefern.
                Nein sollte es nicht. defined sollte das tun. Immer noch.

                In meiner params.php steht es korrekt drin, nur ein Fehler beim übertragen ins Forum. Mea Culpa..
                Ja nix Mea Culpa. Mangelnde Sorgfalt hier weist regelmäßig auch auf eine schlampige Art im Code hin. Im Übrigen ist eine ordentliche Fragestellung nicht nur eine Frage der Höflichkeit, sondern auch Rücksicht auf alle, die diesen Thread in Zukunft im Rahmen einer Recherche lesen.
                [COLOR="#F5F5FF"]--[/COLOR]
                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                [COLOR="#F5F5FF"]
                --[/COLOR]

                Kommentar


                • #9
                  @ nikosch

                  War keine Absicht, ich gelobe Besserung.

                  Kommentar

                  Lädt...
                  X