PHP 5.3 --> auf aktuelle PHP umgestellt und Verlinkungen defekt??..

Füge mal in der manager.php folgende Zeile am Anfang ein:
PHP:
$nav = !empty($_GET['nav']) ? $_GET['nav'] : null;
Genau das hat "register_globals = on" nämlich gemacht.
Dies stellt ein Sicherheitsrisiko dar, denn deswegen kann man alles mögliche per "GET" übergeben und es wird automatisch als Variable "angelegt.
 
Seit 5.2 sollte man statt die Superglobals durch Filter_input ersetzen :)

http://php.net/manual/de/function.filter-input.php

Kenn mich da jetzt zwar nicht so aus, aber Ich denk mal dass es einen Sicherheitsaspekt hat warum man das nutzen sollte :)
Danke für den Tipp, wieder was gelernt, das muss ich dann gleich mal anwenden. :)
Kann dies denn auch eine SQL-Injection verhindern oder sollte man es danach dann trotzdem noch "entschärfen", wenn es später als Teil einer SQL-Abfrage verwendet wird?
 
@Dragosius:
Hab den Code mal eingebaut und nat. meine Datei deaktiviert und es läuft. Danke dir. Was ich noch nich so geschnallt habe, ist die Sache mit dem filter-input. Was müßte ich denn da ändern?
Wenn da noch wer lust hat, mir das zu erklären, wäre ich dankbar ;-)

Gruß Ossa
 
filter-input ersetzt bespielsweise leerzeichen zu % oder wie bei suchmaschinen zu +.
Es filtert GET,POST,COOKIES und andere Zeichenketten mit den php eigenen Konstanten.
Eine GET Variable wird etwa so gefiltert:
Bsp. ein Formular übergibt dem Get Parameter url den Wert hallo Welt.
PHP:
$url = filter_input(INPUT_GET, 'url', FILTER_SANITIZE_ENCODED);
//Der String url ist der GET-Parameter "url"
Es würde dann folgenes ausgeben:
PHP:
Hallo%Welt

Wenn ich falsch liege korrigiert mich bitte:)
Gruß Sebatian
 
Statt mit den superglobals zu Arbeitern ($_POST, $_GET, $_COOKIE, $_SERVER & $_ENV) setzt man seit 5.2 auf filter_inputs

Aufbau:
PHP:
<?php
$POSTS = filter_input(INPUT_POST, 'POSTVARIABLE');
$GETS = filter_input(INPUT_GET, 'GETVARIABLE');
$COOKIES = filter_input(INPUT_COOKIE, 'COOKIEVARIABLE');
$SERVERS = filter_input(INPUT_SERVER, 'SERVERVARIABLE');
$ENVS = filter_input(INPUT_ENV, 'ENVVARIABLE');

/* Beispiel */
$username = filter_input(INPUT_POST, 'username');
?>

@Sebastian Kiefer
Genauso :)
 
Kann dies denn auch eine SQL-Injection verhindern oder sollte man es danach dann trotzdem noch "entschärfen", wenn es später als Teil einer SQL-Abfrage verwendet wird?
Das Entschärfen hängt maßgeblich vom verwendeten Datenbanktreiber (also MySQL oder MSSQL oder ...) und auch vom Locale ab, den du für die SQL-Sitzung verwendet. Darüber kann filter_input nichts wissen.
Übrigens solltest du sowieso nicht entschärfen, sondern gleich Prepared Statements nutzen.
 
DAnn müßte ich also den Ausdruck von @Dragosius:
"$nav = !empty($_GET['nav']) ? $_GET['nav'] : null;"
wegnehmen und nur
$nav = filter_input(INPUT_GET, 'nav');
? Das soll so einfach sein?
 
Genau:)
Code:
$nav = filter_input(INPUT_GET, 'nav');
$typ = filter_input(INPUT_GET, 'typ');
PS: Wenn du jetzt Leerzeichen in den GET - Parametern hast musst du sie erst wieder entfernen.
PHP:
if($nav == "Rolladen Neu"){
include 'rolladen.phtml';
}
Würde jetzt nicht gehen weil wenn du die Links in der Navigation voher mit filter-input bearbeitest werden die Leerzeichen ja gegen % ersetzt (bzw. % und noch was dran) dann musst die die Leerzeichen wieder herstellen, das ist aber nicht so mein Ding :) Da können die anderen dir sicherlich mehr und besser helfen;)
Wie immer wenn ihr Korrekturen habt, sagt sie bitte
 
Zurück