-
30. 01. 2012, 20:08 #1Mitglied
- Registriert seit
- Jun 2009
- Ort
- Im Forum
- Beiträge
- 530
[PHP] Alle verwendeten Variablen durch Funktion laufen lassen
Hallo Leute,
habe mal eine ganz banale Frage:
Wenn ich jetzt ein PHP-Script habe, was irgendwas macht und von dem zwischendurch immer mal wieder ein paar Variablen mit print oder echo ausgegeben werden.
Gibt es eine Funktion, die alle registrierten Variablen ermittelt und bei jedem echo/print durch einen Funktion laufen lässt, die ich entweder selber geschrieben habe, oder die bereits existiert?
Ich hoffe ich drücke mich verständlich auch...
Ansonsten hier ein Pseudo-Beispiel
Natürlich ergibt das jetzt gerade nicht sonderlich viel Sinn, dieses Beispiel... Aber es geht ja um die Funktion, die ich suche...PHP-Code:ob_start();
$variable1 = 'abd';
if($_POST['name'] == 'du') {
$variable2 = $_POST['name'];
}
print "Name: ".$variable2;
if($_POST['stadt'] == 'hier') {
$variable3 = $_POST['stadt'];
$variable4 = $variable2." in ".$variable3;
}
print $variable4;
/* ... */
print $variable1;
ob_end_flush();
Gibts dafür irgendwie etwas? Kann ich da was in der ini einstellen? also per ini_set()?
Oder muss ich vielleicht nur am Ende den gesamten Puffer durch die Funktion laufen lassen? --> Problem wäre dabei, wenn die Funktion z.B. htmlspecialchars() wäre, dass dann auch andere Zeichen, die NICHT maskiert/verändert werden sollten, verändert würden.
Im Puffer sind ja auch die Daten, die ich ausgeben lasse, wenn ich den PHP-Block verlasse.
Weiß da jemand so ne schöne Funktion? oder muss ich wirklich (mit einem regulären Ausdruck) meine Dateien entsprechend verändern? Habe nämlich in einigen Scripten von mir (die nicht online sind) eine Sicherheitslücke entdeckt und diese halt so ziemlich immer im gleichen Zusammenhang - Ich würde nur ungern meinen Rechner durch hunderte von Dateien durchlaufen lassen und dann den RegEx immer anpassen müssen. Habe nämlich nicht immer einheitlich ausgegeben...
Oder habe ich da jetzt wirklich Mist gebaut und muss mich da mehrere Tage dransetzten, jede Ausgabe anzupassen?
LGGeändert von Roin (30. 01. 2012 um 20:33 Uhr)
-
30. 01. 2012, 20:40 #2Mitglied
- Registriert seit
- Mar 2007
- Beiträge
- 2.700
-
30. 01. 2012, 20:47 #3Mitglied
(Threadstarter)
- Registriert seit
- Jun 2009
- Ort
- Im Forum
- Beiträge
- 530
Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen
Viele dieser Sicherheitslücken entstehen ja bei Nutzereingaben.
Würde es nicht auch einfach gehen, wenn ich bei jedem Absenden der Formulare alle $_POST Variablen durch ne Schleife laufen lasse, die diese Funktionen anwenden und dann erst damit weiter arbeitet?
So dürften ja auch keine "schädlichen" Dateien mehr gespeichert werden können.
Natürlich habe ich mich schon vor MySQL-Injectionen geschützt, jedoch könnte man durch zB ein fehlendes htmlspecialchars() von einem Wert, der nach dem Absenden erneut in einem Inputfeld auftaucht auch anderen Code mit einschleusen, siehe z.B <?php ?> Tags...
Gibts denn eine Möglichkeit alle Variablen zu ermitteln, die bisher gesetzt wurden?
Mir fällt auf Anhieb nur eine ein, die allerdings wahrscheinlich die Laufzeit jedes Script um Jahrhunderte überschreiten würde (mit isset() durchgucken...).
-
30. 01. 2012, 20:54 #4Mitglied
- Registriert seit
- Mar 2007
- Beiträge
- 2.700
Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen
Nein, es gibt keine Funktion die dir die gesetzten Variablen auflistet.
Die Eingabe-Daten bei Beginn des Scripts analog zum alten magic_quotes zu maskieren ist eine potentielle Lösung, allerdings nicht zuverlässig. Die einzige Möglichkeit, die Sicherheitslücken tatsächlich zuverlässig zu schließen ist eine Maskierung bei der Ausgabe.
-
30. 01. 2012, 21:00 #5Mitglied
(Threadstarter)
- Registriert seit
- Jun 2009
- Ort
- Im Forum
- Beiträge
- 530
Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen
€:
:€
Hab gerade eine schöne Funktion gefunden, die einige Probleme für mich schonmal löst, da ich meistens, leider nicht immer erst alle Variablen gefüllt habe und dann irgendwo die Ausgabe habe...
get_defined_vars()
€:
Ich habe zwar (meistens) bei der Ausgabe maskieren lassen (bis auf bei den Scripts, die ich wieder ausgekramt habe), aber wieso ist es keine zuverlässige Lösung bei der Eingabe zu maskieren?
Anders können keine Daten reinkommen, außer man kommt an die Datenbank, aber wenn es soweit ist, ist eh alles zu spät.
:€Geändert von Roin (30. 01. 2012 um 21:16 Uhr)
-
30. 01. 2012, 22:53 #6
Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen
Ich verstehe das Problem offenbar nicht ganz. Willst du mit deinem Codebeispiel auf nicht sauber initialisierte Variablen hinaus, bei denen Gefahr durch register_globals droht?
Alle Benutzerdaten (also vor allem - aber nicht nur - die aus $_GET/POST/COOKIE) pauschal zu maskieren ist kaum sinnvoll durchführbar, es sei denn es ist dort bereits bekannt, in welchem Kontext (HTML, MySQL-Abfrage, ...) die Daten benötigt werden. Davon abhängig ist ja die nötige Maskierung kritischer Zeichen. Aus diesem Grund ist ja auch das Konzept der Magic Quotes in PHP unsinnig und inzwischen konsequenterweise auch missbilligt. Spätestens wenn die Daten in einem zur pauschalen Maskierung unpassenden Kontext oder aber mehr als einem Kontext benötigt werden, kann dieser Weg daher nicht funktionieren.
Ich sehe keine Möglichkeit, deinen fehlerhaften Code vollautomatisch zu korrigieren. Woher soll ein Programm auch erkennen können, an welchen Stellen Variablen zu maskieren sind und wo nicht? Da könnte maximal eine Heuristik nach mehr oder weniger offensichtlichen Schwachstellen wie echo/mysql_query gefolgt von $_GET/POST/COOKIE suchen und entsprechende Vorschläge machen. Alle Fehler wird man so aber nicht finden können. Gäbe es solche Lösungen, wäre Software allgemein kaum so unsicher.
Ohne deine Fehler jetzt zu kennen, wäre es ggf. auch im Rahmen der Fehlerbehebung und vor allem für die Zukunft sinnvoll, sich Gedanken über den Aufbau deines Codes zu machen. Möglicherweise hast du bisher das DRY-Prinzip nicht verfolgt, sodass du nun den immer gleichen Fehler an vielen Stellen korrigieren musst.
-
31. 01. 2012, 15:12 #7Mitglied
(Threadstarter)
- Registriert seit
- Jun 2009
- Ort
- Im Forum
- Beiträge
- 530
Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen
Ja unter anderem.
Es gibt ja viele Sicherheitslücken, die man zu beachten hat und somit auch verschiedene Funktionen zur Anwendung bringen muss, wie du auch erwähnt hast.
Meine aktuelleren Codes habe ich schön strukturiert aufgebaut, durchkommentiert/dokumentiert und auch versucht PHP von HTML weitenstgehend zu trennen, sodass die Ausgaben zum Beispiel immer nach dem gleichen Schema aufgebaut sind, wodurch eine solche Anpassung einfacher wäre.
Allerdings lerne ich auch ständig dazu und habe noch nicht von Anfang an, alle Sicherheitslücken beachten können, da ich sie vorher nicht kannte.
Kannst du mir grad erläutern, was du damit meinst?
Vielleicht lerne ich ja gleich wieder etwas dazu?
-
31. 01. 2012, 18:42 #8
Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen
Wenn du den offenbar immer gleichen Fehler an unterschiedlichen Stellen gemacht hast, könnte das darauf hindeuten, dass du identische Routinen mehrfach programmiert hast, oder sie zumindest aus anderen Projekten kopiert hast. Sinnvoller wäre es, solche immer wieder genutzten Routinen in einer gemeinsamen Bibliothek zu pflegen. Dann könntest du den Code an einer einzigen Stelle korrigieren und überall, wo die Routinen genutzt werden, sind die Fehler automatisch korrigiert. Siehe auch http://de.wikipedia.org/wiki/DRY
-
31. 01. 2012, 19:24 #9Mitglied
(Threadstarter)
- Registriert seit
- Jun 2009
- Ort
- Im Forum
- Beiträge
- 530
Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen
Kannst du mir auch sagen, wie ich das so lösen kann, wenn ich komplett voneinander unabhängigen Projekten ähnlichen/gleichen Code benötige?
Wenn ich innerhalb eines Projektes immer den gleichen Code benötige schmeiße ich den natürlich in eine Funktion und verwende die. Aber wie soll ich denn bei verschiedenen Projekten, die eventuell mal online gehen sollen auf die selbe Datei mit den Funktionen (Hab ich das richtig verstanden?) zugreifen? Da müsste ich ja aus dem Projekt rausnavigieren beim Einbinden...
-
31. 01. 2012, 19:33 #10
Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen
Sofern alles auf einem Server laufen soll, wäre das durchaus eine Möglichkeit. Ansonsten würde es sich natürlich eher anbieten, mit jeweils lokalen Kopien zu arbeiten. Die kann man dann aber immer noch recht einfach austauschen. Je nach Einsatzumfang könnte man auch entsprechende Softwarepakete erstellen und diese dann über eine Paketverwaltung aktualisieren. Ob man dazu die Bordmittel des Betriebssystems einsetzt, oder auf Webanwendungsebene selbst eine Paketverwaltung implementiert, kommt immer auf den geplanten Einsatzzweck an.
-
31. 01. 2012, 20:21 #11Mitglied
(Threadstarter)
- Registriert seit
- Jun 2009
- Ort
- Im Forum
- Beiträge
- 530
Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen
Werd ich mir dann wohl mal überlegen - Danke schonmal für den Hinweis...
werde dann erstmal weiter ähnliche Sachen in Funktionen packen und in extra Dateien auslagern. Diese kann ich dann ja so kopieren, wie du es erwähnt hast.
-


Zitieren

mehr lesen...







Resident Evil 6 erscheint in...
Heute, 15:21 in gulli:news