philosapiens
Mitglied seit: 19.09.2010

Themenersteller
webdesigner
Fortgeschrittener (52 Beiträge)

PST 1 | Quelltext nicht mit Variablen übergeben

08.06.2011, 09:17 Uhr    Sicherheitslücken    1898 mal gelesen    5 Antwort(en).

PHP-Sicherheits Tutorial Teil 1 | Quelltext nicht mit Variablen übergeben

Hallo zusammen,

sorry, dass ich das Thema ( www.seitenreport.de/forum/beitraege/sicherheitsluecken/hacken_lernen_zum_testen_der_eigenen_seiten/seite/3.html ) zwar angestoßen habe, aber dann solange nix dazu schrieb. Hier nun mein erster Beitrag in dieser Reihe.

Quelltext nicht mit Variablen übergeben

Wenn man in einer PHP-Datei mit bestimmten Bedingungen einen Quelltext ausgeben möchte, dann kann man das auf die unterschiedlichste Weise. Bisher habe ich meist aus Faulheit folgendes Konstrukt angewand:


$anzeige =''; // erste Definition der Variable §anzeige
if ($wert === 1) {
$anzeige='

Der Wert stimmt.

';
}
else $anzeige ='';

echo $anzeige;


Da ich nun HTML in der Variable übergebe, kann ich leider auch nicht die Variable gegen einschleusbaren HTML-Code sichern.
Wenn ich aber das selbe ohne HTML in den Variablen schreibe, wäre diese auch sicher prüfbar.


$anzeige =''; // erste Definition der Variable §anzeige
if ($wert === 1) {
$anzeige='Der Wert stimmt.';
}
else $anzeige ='';


if (!empty($anzeige)) {
echo '

'.htmlspecialchars ($anzeige).'

';
}


Das Ergebnis sollte das selbe sein, nur kann ich hier die Variable $anzeige sicher übergeben. Siehe: de.php.net/manual/de/function.htmlspecialchars.php


Stimmt das soweit?
Habt Ihr da andere, bessere Wege?


Der höchste Lohn für unsere Bemühungen ist nicht das, was wir dafür bekommen, sondern das, was wir dadurch werden.

Hier mein Versuch der Webseitenerstellung: http://idealseiten.de


gelöschter Benutzer
08.06.2011, 11:09 Uhr

Ich versteh dein Problem nicht?

Ich speicher grundsätzlich HTML Quelltext in Variablen, bei Template Systemen geht das auch nicht anders. Entscheident ist wo der Inhalt von $anzeige her kommt und dort muss validiert werden.

Gruß Ultima


joerg
Mitglied seit: 09.06.2009

Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
08.06.2011, 11:22 Uhr

Hallo

Dein jetziges Beispiel würde ich auf diese Zeile reduzieren. Warum noch eine Variable an dieser Stelle herreinnehmen wenn nichts weiter damit passiert.

if ($wert === 1) {echo \'

Der Wert stimmt.

\';}

Unklar ist momentan, wo die andere Variable initiiert wird und ob sie an der Stelle schon existiert und den Wert überhaupt annehmen kann.

Selbst wenn man an der Stelle mit unbekannten Variablen arbeitet, weiss ich jetzt nicht ob es nicht besser wäre isset statt empty zu verwenden.

php.net/manual/de/function.isset.php

Zumindest würde ich mir überlegen ob die else Anweisung in deinen Beispielen Sinn macht.

htmlspecialchars stellt noch einige Parameter zur Verfügung die man anwenden könnte, wenn es wichtig ist.

Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

matthes
Mitglied seit: 08.05.2010

Foren Moderator
Evil Genius
Content Halbgott (967 Beiträge)
08.06.2011, 12:09 Uhr

Dein erstes Beispiel ist bereits "sicher", bzw. es ist nicht unsicher. Höchstens die Abfrage von $wert könnte zu Problemen führen, wenn register_globals on ist.
Ansonsten ist $anzeige aber nicht zu verändern, denn Du überschreibst mögliche eingeschleuste Inhalte ja.

Das Beispiel ist in meinen Augen völlig unpassend...


Make Seitenreport great again!

romacron
Mitglied seit: 01.11.2009

JDev Xer
Content Gott (1223 Beiträge)
08.06.2011, 14:14 Uhr

da stimme ich Mattes vollkommen zu, das macht keinen Sinn!

die Ausgabe von "der Wert stimmt" sollte an sich nicht das Problem sein.
intern musst du nicht schauen ob $anzeige html tags hat oder nicht. du hast die Variable selbst erstellt und gefüllt. Auf die $anzeige gibt es von aussen keinen Zugriff

Wichtiger ist hier die variable $wert. Diese wird ausreichend validiert, da sie auch die Typenunterscheidung (int) und 1 hat.

dies ist ein Unterschied zu ( $wert === "1" ) hier wird $wert geprüft ob es 1 ist und ein (string)....

..was hattest du genau vor?


UFOMelkor
Mitglied seit: 20.10.2009

Student
Content Meister (350 Beiträge)
09.06.2011, 00:02 Uhr

Ich denke, was er eigentlich meinte ist folgendes:

<?php
$content = $_GET[\'content\'];
$content = \'

\' . $content . \'

\';

print $content;
//htmlspecialchars ist nun nicht mehr möglich, da auch das p-Tag maskiert werden würde.?>


So funktioniert es:
<?
$content = $_GET[\'content\'];
$content = htmlspecialchars($content);

print \'

\' . $content . \'

\';
?>


P.S: Das Syntax-Highlighting für PHP funktioniert nicht richtig.


Naturkosmetik in Bochum

Steppenhahn Ultramarathon-Community

  • 1

Neuen Beitrag erstellen

Um einen Beitrag zu erstellen, müssen Sie eingeloggt sein. Bitte melden Sie sich an.
EinloggenRegistrieren



« zurück zu: Sicherheitslücken

Das Seitenreport Forum hat aktuell 4134 Themen und 36063 Beiträge.
Insgesamt sind 47923 Mitglieder registriert.