kostenloser Webspace werbefrei: lima-city


Sichtbarkeit von $__GET $__POST etc. ändern

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    nomis

    nomis hat kostenlosen Webspace.

    Hallo,

    bekanntermaßen sollte man ja beim Variablen, die vom Nutzer kommen (also $__GET, $__POST, coockies usw.) wegen der Sicherheit (sql injection, cross seite scripting) immer zuerst entsprechend bearbeiten. Deshalb, und weil ich nicht an unterschiedlichen Stellen im Code immer den Index des Parameters schreiben will (sodass ich bei einer Änderung immer mehrere Stellen ändern muss) würde ich gerne eine Klasse (realisiert als Singelton) erstellen, über die all diese Zugriffe laufen. Und damit auch sichergestellt ist, dass auch wirklich jedes Script nur diese Klasse nutzt, würde ich gerne die Sichtbarkeit der Variablen einschränken: $__GET, $__POST ect. sollen also nur in der Klasse sichtbar sein.
    Gibt es eine Möglichkeit, das zu realisieren?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    nomis schrieb:
    Gibt es eine Möglichkeit, das zu realisieren?
    Eher schwer, da diese Variablen eingebaute superglobale Variablen sind und deshalb in jedem Gültigkeitsbereich sichtbar sind.
  4. Ich weiß nicht wie sinnvoll die Idee ist, und ob überhaupt umsetzbar, aber als kleiner Denkanstoss:

    Wenn du sicherstellst, dass dein Singleton immer das erste ist, das auf $_POST und $_GET zugreifen kann, kannst du diese dann einfach auf andere Variablen umlegen und anschließend löschen.

    mfg
  5. Nur so eine Überlegung:

    An dieser Stelle selbst eine GET Methode schreiben, die URL auslesen und dementsprechend Variablen setzen, zum Beispiel nach jedem "&[irgendwas]=". Die URL holen per
    $url = "http://".$_SERVER['PHP_SELF'].$_SERVER['REQUEST_URI'];
    . Name der Datei mit übergeben, um das auch einfache Art und weise zu schneiden (substring nach der Stelle, wo der Name der Datei [plus 4 zeichen wegen .php] endet)...
  6. Aber wieso sollte man dann nicht einfach gleich aus
    $_SERVER['REQUEST_URI']
    auslesen? Dann braucht man auch kein Substring...
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    @kill-a-teddy & @tobiworlds:

    Warum soll man das überhaupt machen? Schließlich muss man sich dann auch noch ums decodieren usw kümmern und das Senden von Parametern per Formular kannst du bei einem selbstgestrickten Query-String o.ä. ohne JavaScript auch vergessen… mit der ursprünglichen Frage hat das jedenfalls nicht viel zu tun.

    @TE:
    Was stört es eigentlich, wenn die Superglobals noch existieren aber du nicht darauf zugreifst? Oder willst du dich vor dir selbst schützen? (:-D)
  8. Autor dieses Themas

    nomis

    nomis hat kostenlosen Webspace.

    hackyourlife schrieb:
    @TE:
    Was stört es eigentlich, wenn die Superglobals noch existieren aber du nicht darauf zugreifst? Oder willst du dich vor dir selbst schützen? (:-D)


    Eigentlich genau das. Ich will das halt ähnlich sicher wie bei typisierten Funktionsparametern. Da geht halt nur der eine Typ, wenn du was anderes machst, gibts nen Fehler. Hintergrund ist, der, dass ich das dann gerne für alle Seiten, die ich irgendwann mal mache genommen hätt, um nicht irgendwie mal wieder aus Faulheit oder Vergesslichkeit die Sicherheit zu vernachlässigen. Zudem arbeit ich auch an nem Projekt noch in ner Gruppe zusammen, wo ich dann auch die anderen dazu zwingen kann, sicher und einheitlich zu arbeiten...

    syberpsace schrieb:
    Ich weiß nicht wie sinnvoll die Idee ist, und ob überhaupt umsetzbar, aber als kleiner Denkanstoss:

    Wenn du sicherstellst, dass dein Singleton immer das erste ist, das auf $_POST und $_GET zugreifen kann, kannst du diese dann einfach auf andere Variablen umlegen und anschließend löschen.
    mfg


    Wenn ich sonst keine Möglichkeit mehr finde, werde ich das wohl machen, auhc wenn es offensichtlich unschön ist..
  9. tobiworlds schrieb:
    Aber wieso sollte man dann nicht einfach gleich aus
    $_SERVER['REQUEST_URI']
    auslesen? Dann braucht man auch kein Substring...


    Wäre natürlich noch besser :biggrin: Hab ich gar ne mehr dran gedacht :P

    Also ich würde mir das ganze in Funktionen auslagern und selbst eine ART Superglobale Variable erstellen. In meinem Beispiel hier lese ich dir url und trenne dann Variable vom Wert... Ist zwar somit so gut, wie unmöglich den Wert anhand des Namens auszulesen, aber ich bin mir Sicher das kann man mit wenig Mühe umschreiben:
    //Variablen setzen
        public $getUriVars;
        public $getVars;
        public $getValues;
         
        public function build(){
            //TODO: Hier könntest du die Werte wieder zusammen setzen oder was dir auch grad so in den Sinn kommt ^^ 
        }
         
        /**
        *   Die Variablen- Werte werden ausgelesen
        */
        public function getValues($uri){
            $zeichen = preg_split('/[=]*[&]/', $uri, -1);
            for($i=0;$i<count($zeichen);$i++){
                $str = $zeichen[$i];
                $pos = strpos($str, '=');
                $str = substr($str, $pos + 1);
                $explode[$i] = $str;
            }
            return $explode;
        }
         
        /**
        *   Die Variablen- Namen werden ausgelesen
        */
        public function getVars($uri){
            $zeichen = preg_split('/[=]*[&]/', $uri, -1);
            for($i=0;$i<count($zeichen);$i++){
                $str = $zeichen[$i];
                $str = preg_replace("#[=|/].*#","",$str);
                $explode[$i] = $str;
            }
            return $explode;
        }
         
        /**
        *   Die URL- Variablen werden geholt
        */
        public function getUriVars(){
            $uri = parse_url($_SERVER['REQUEST_URI']);
            $this->getVars = $this->getVars($uri['query']);
            $this->getValues = $this->getValues($uri['query']);
        }


    Das war mal für irgend ein Problem, dass ich hatte ist auch schon etwas her und ich weiß es nicht mehr genau...
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!