Hallo Dennis,
$_SESSION["style"] = (isset($_GET["style"])) ? $_GET["style"] : (empty($_SESSION["style"])) ? $default : $_SESSION["style"];
Diese Kurzform in Ehren, aber wenns dann doch etwas verschachtelt wird, dann nimm bitte lieber eine etwas ausführlichere, dafür verständlichere Variante:
if (empty($_SESSION['style'])) {
$default_style = 'INC/css/style_01.css';
$_SESSION['style'] = isset($_GET['style']) ? $_GET['style'] : $default_style;
}
was verständlicher ist, scheint Ansichtssache zu sein. Ich jedenfalls bin mit Thomas' kompakter Darstellung wesentlich besser bedient als mit deiner aufgedröselten Form mit if-Statement. Und einmal hast du den Fragezeichen-Operator sogar dringelassen, findest ihn also so übel auch wieder nicht? ;-)
> So etwas erhöht die Lesbarkeit des Codes doch deutlich ;-)
Aber nicht die Verständlichkeit (meine persönliche Meinung). Und es kommt ja nicht darauf an, dass man Programmcode fließend vortragen kann, sondern dass man die formulierte Anweisung schnell begreift. Da halte ich es immer noch nach der Devise: Je kompakter, desto besser.
> > <link href="<?php echo $\_SESSION["style"]; ?>.css" rel="stylesheet" type="text/css">
> Hiermit hats du eine ganz böse XSS Lücke in deiner Seite geschaffen, welche Cross-Site-Scripting (dafür steht XSS) ermöglicht. Rufe deine Seite doch mal mit…
Jetzt möchte ich aber mal wissen, wie du durch bloßes Übergeben eines fiesen URL-Parameters den IMHO wasserdichten (weil nur aus Konstanten bestehenden) Ausdruck $\_SESSION["style"] sabotieren möchtest.
> das führt dazu, dass du folgendes an den Browser ausgibst:
> <link href="" /><script type="text/javascript">alert('Ich bin böser Javascript-Code!'); ...
Nein, gewiss nicht. PHP wird im Array $\_SESSION[] nach einem Eintrag mit dem Key "style" suchen - und das sogar dann, wenn register\_globals=on ist, was wir unabhängig davon nicht hoffen wollen.
Schönen Abend noch,
Martin
--
Der Bäcker schlägt die Fliegen tot
Und macht daraus Rosinenbrot.