Schriftgrößen mit PHP verwenden
Thomas
- php
hi,
ich möchte per PHP die Schriftgröße und einiges anderes, dies ist alles in drei verschiedenen Styles versehen. Ich versuchte mit dem unten aufgeführten Code dies zulösen doch leider funzt es nicht, vielleicht weiss jemand einen rat ???
Vielen Dank
Thomas
<?PHP
session_start();
$default = "INC/css/style_01"; //standart css
$_SESSION["style"] = (isset($_GET["style"])) ? $_GET["style"] : (empty($_SESSION["style"])) ? $default : $_SESSION["style"];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Unbenanntes Dokument</title>
<link ref="stylesheet" href=".css" />
<link href="<?php echo $_SESSION["style"]; ?>.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="492" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="34" height="284" align="left" valign="top"><a href="index.php?style=INC/css/style_01.css"><img src="INC/img/icon_a1.png" alt="Standard" width="18" height="20" border="0" /></a></td>
<td width="34" valign="top"><a href="index.php?style=INC/css/style_02.css"><img src="INC/img/icon_a2.png" alt="Groß" width="18" height="20" border="0" /></a></td>
<td width="31" valign="top"><a href="index.php?style=INC/css/style_03.css"><img src="INC/img/icon_a3.png" alt="Größer" width="18" height="20" border="0" /></a></td>
<td width="393" valign="top">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec molestie. Sed aliquam sem ut arcu. Phasellus sollicitudin. Vestibulum condimentum facilisis nulla. In hac habitasse platea dictumst. Nulla nonummy. Cras quis libero. Cras venenatis. Aliquam posuere lobortis pede. Nullam fringilla urna id leo. Praesent aliquet pretium erat. Praesent non odio. Pellentesque a magna a mauris vulputate lacinia. Aenean viverra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Aliquam lacus. Mauris magna eros, semper a, tempor et, rutrum et, tortor.sdf</td>
</tr>
</table>
</body>
</html>
Hi,
ich möchte per PHP die Schriftgröße und einiges anderes, dies ist alles in drei verschiedenen Styles versehen. Ich versuchte mit dem unten aufgeführten Code dies zulösen doch leider funzt es nicht, vielleicht weiss jemand einen rat ???
<link href="<?php echo $_SESSION["style"]; ?>.css" rel="stylesheet" type="text/css">
Was kommt hiervon beim Browser tatsächlich an?
cu,
Andreas
Hi Thomas,
<?php
session_start();
$default = "INC/css/style_01"; //standart css
$_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;
}
So etwas erhöht die Lesbarkeit des Codes doch deutlich ;-)
<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…
?style=%22%20%2F%3E%3Cscript%20type%3D%22text%2Fjavascript%22%3Ealert%28%27Ich%20bin%20b%F6ser%20Javascript-Code%21%27%29%3Balert%28%27Ich%20k%F6nnte%20z.B.%20Passw%F6rter%20sniffen.%27%29%3B%3C%2Fscript%3E%3Clink%20href%3D%22
auf, das führt dazu, dass du folgendes an den Browser ausgibst:
<link href="" /><script type="text/javascript">alert('Ich bin böser Javascript-Code!');alert('Ich könnte z.B. Passwörter sniffen…');</script><link href=".css" rel="stylesheet" type="text/css">
Aus diesem Grund möchte ich dir die Funktion htmlspecialchars() dringend ans Herz legen ;-)
Viele Grüße,
~ Dennis.
Hi,
<?php
session_start();
$default = "INC/css/style_01"; //standart css
$_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;
}
Offensichtlich war Thomas' Variante wirklich nicht verständlich genug. Denn Dein "Ersatz"-Code tut was anderes ...
Bei Thomas hat der GET-Parameter höchste Priorität, bei Dir die Session.
cu,
Andreas
--
[Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)
[O o ostern ...](http://ostereier.andreas-waechter.de/)
Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
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.
Hi,
$_SESSION["style"] = (isset($_GET["style"])) ? $_GET["style"] : [...]
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.
Da der Wert in $_SESSION["style"] aus einem URL-Parameter stammen kann (die URL-Parameter landen ja im $_GET-Array), ist er nicht konstant, sondern durch "bloßes Übergeben eines fiesen URL-Parameters" ganz einfach zu beeinflussen.
cu,
Andreas
Hallo,
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.
Da der Wert in $_SESSION["style"] aus einem URL-Parameter stammen kann (die URL-Parameter landen ja im $_GET-Array), ist er nicht konstant, sondern durch "bloßes Übergeben eines fiesen URL-Parameters" ganz einfach zu beeinflussen.
stimmt, die Übergabe aus $_GET[] am Anfang hatte ich übersehen, ich habe den $_SESSION-Ausdruck nur für sich allein betrachtet.
Ciao,
Martin
Hi Martin,
Und einmal hast du den Fragezeichen-Operator sogar dringelassen, findest ihn also so übel auch wieder nicht? ;-)
Ich habe ja auch nicht behauptet, dass ich ihn übel finde ;-) Ich mag nur die mehrfache Verschachtelung in einer Reihe geschrieben nicht. Wenn du aber
Bedingung, wenn
? dann
: sonst
schreibst, beziehungsweise
Bedingung, wenn
? dann Bedingung, wenn
? dann
: sonst
: sonst
...so bin ich damit auch vollkommen zufrieden ;-) Das ist dann in meinen Augen auch wieder gut leserlich :-)
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 du hier etwas übersehen hast, hat dir MudGuard ja schon gesagt ;-) Womit aber mal wieder bewiesen wäre, dass man grundsätzlich ALLE Werte, welche einem Kontextwechsel unterzogen werden bedingungslos durch eine dafür vorgesehene Escaping-Funktion schicken sollte.
Auch wenn der Wert nicht aus $_GET geladen würde, so wäre doch davon auszugehen, dass er beispielsweise aus einer Datenbank kommt. <Theorie>Dann hast du oder eine andere Software irgendwo eine Sicherheitslücke, ein Angreifer modifiziert die Datenbank und wir werden wieder mit dem gleichen XSS-Problem konfrontiert.</Theorie>
Viele Grüße,
~ Dennis.