Ausgabe-Varianten

bloodytriker

Mitglied
hi,
erstmal sorry für die unschlüssige überschrift. mir ist nix besseres eingefallen^^

also jetzt zum thema:

ich programmier seit anfang des jahres in php.
habe bereits ne primitive forensoftware und ein gästebuch geschrieben.

jetzt zur frage:
wie sollte man texte mit variablen lieber ausgeben? sicherheitsgründe und weitere aspekte

ich hab es bisher so gemacht:

Code:
echo "Hier der text im php-abschnitt $var";

dann hab ich vor kurzem von einem freund gehört das man es so aus sicherheitsgründen nicht machen sollte,
weil echo manipuliert werden können.

so jetzt wollt ich meine kleine forensoftware überarbeiten, bevor ich es weiterentwickel.
ich hab jetzt angefangen die echos raus zu nehmen, und es zu folgendem umzuschreiben:
Code:
<div id='test'>Hier kommt der text, und nun die variable: <?php echo $variable; ?></div>

jetzt frag ich mich ob es überhaupt sinn ergibt den gesamten quellcode so umzuschreiben, weil bei der weise auch echos benutzt werden.



hoffe ihr versteht worum es mir geht :)

mfg bloodytriker
 
Dein Freund hat dir nur die halbe Miete erklärt. echo kann nicht manipuliert werden. Sehr wohl aber das, was man an echo übergibt.

Normalerweise sollte man keine Variablen, egal wo sie her kommen, einfach so ungeprüft verarbeiten. Wenn du dir allerdings sicher bist, dass in $var bzw. $variable nichts gefährliches drin stehen kann, kannst du das bedenkenlos ausgeben. Was allerdings gefährlich ist, ist die Ausgabe von $var, wenn der Inhalt darin aus einer Nutzereingabe oder einer anderen Quelle, die von jemandem manipuliert werden kann, kommt. Dazu gehört eigentlich alles, was zwischen Server und Client (Browser) hin und her gegeben wird. Also $_POST, $_GET, $_SESSION, $_FILES, $COOKIE. Bei register_globals = On musst du doppelt auf passen, da dort nicht sofort erkennbar ist, wo eine Variable her stammt. Besonders bei umfangreichem Code geht da schnell der Überblick verloren. Daher register_globals = Off!!

Fazit: Die Befehle, die PHP ausführt, können vom Benutzer nicht umgebaut oder ausgetauscht werden, sehr wohl aber das, was dynamisch an die Funktionen übergeben wird. Ein Beispiel, wie man der Lage Herr werden kann (ist nur der Anfang) wäre, Daten vom Client, die in eine Datenbank geschrieben werden sollen, mit mysql_real_escape_string() zu schützen.
 
ok danke :)

was wäre dann die beste/sicherste methode daten von einer datei in die nächste zu übertragen ?
ich hab schon öfters gesehen das ausgaben folgender maßen aufgebaut sind:
echo "Text....." . $variable . "text.....";
aber irgendwie versteh ich den aufbau nicht.

die syntax von real_string und globals werd ich mir dann die tage mal genauer ansehen ;)
danke für die bisherige hilfe

MfG bloodytriker
 
Prinzipiell macht es keinen Unterschied, ob du

PHP:
echo "text and some $variable and some other text";

oder

PHP:
echo "text and some " . $variable . " and some other text";

notierst. Es ist beides gleich (un)sicher.

Die zweite Variante ist die sog. String-Concatenation oder auch Zeichenketten-Verknüpfung. Wenn du mehrere Strings hast, die zusammen gefügt werden sollen, kannst du diese Zeichenketten mittels eines Punktes verbinden. Dabei spielt es keine Rolle, ob diese Zeichenketten variabel oder konstant sind. Variabel kennst du ja schon, konstant ist dann genau das Gegenteil. Ein Beispiel wäre

"Dies ist ein konstanter String"

Diesen kannst du natürlich in einer Variablen ablegen oder direkt ausgeben. Wenn du ihn in eine Variable ablegst:

PHP:
$variable = "Dies ist ein konstanter String";

dann wird der String variabel und du könntest ihn mit anderen Funktionen wieder manipulieren (z.B. Zeichen ersetzen). Du kannst den String natürlich auch an eine bestehende Variable anhängen:

PHP:
$variable2 = $variable . " aber auf einmal ist er nicht mehr konstant";

Ich hoffe das hat dir ein bisschen weiter geholfen.
 
hätte da noch eine Frage^^

Wie siehts mit html code im echo aus?
Programmier gerade weiter am Forum, und da ging mir der Gedanke durch den Kopf.

Also wenn man z.B. schreibt:
PHP:
echo "<form action='datei.php' action='POST'><table>....</table></form>";

Ist wahrscheinlich nicht so schön, aber gäbe es da Risiken?

Schon mal danke im voraus :)
 
Zuletzt bearbeitet:
Wenn du nur konstante Zeichenketten mit echo Ausgibst, was soll daran gefährlich sein? Ich schrieb bereits, das es sich bei gefährlichen Daten um Daten handelt, die vom Benutzer verändert werden können. Dies ist bei Konstanten nicht der Fall. Möchtest du das Formular aber so konstruieren, das es wieder gefüllt wird, falls der Benutzer was vergessen hat, auszufüllen aber nicht alles neu eingeben muss, hast du wieder dynamischen Inhalt drin, der vom Benutzer kommt, und immer potenziell gefährlich ist, demzufolge gefiltert werden muss.

Ich würde aber HTML-Code soweit es irgendwie möglich ist, nicht mit PHP zusammen bauen.
 
@bloodytriker: Bitte beachte zukünftig unsere Netiquette (Nr.15) bzgl. deiner durchgängigen Kleinschreibung, die in unserem Forum nicht erwünscht ist - vielen Dank! :)

mfg Maik
 
Zurück