Ergebnis 1 bis 11 von 11
  1. #1
    Mitglied
    Registriert seit
    Jun 2009
    Ort
    Im Forum
    Beiträge
    530

    Standard [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

    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(); 
    Natürlich ergibt das jetzt gerade nicht sonderlich viel Sinn, dieses Beispiel... Aber es geht ja um die Funktion, die ich suche...

    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?

    LG
    Geändert von Roin (30. 01. 2012 um 20:33 Uhr)

  2. #2
    Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    2.700

    Standard Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen

    Zitat Zitat von Roin Beitrag anzeigen
    Oder habe ich da jetzt wirklich Mist gebaut und muss mich da mehrere Tage dransetzten, jede Ausgabe anzupassen?
    So ist es, tut mir Leid. Es gibt keine Möglichkeiten einzelne Variablen automatisch zu maskieren.

  3. #3
    Mitglied

    (Threadstarter)


    Registriert seit
    Jun 2009
    Ort
    Im Forum
    Beiträge
    530

    Standard 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...).

  4. #4
    Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    2.700

    Standard 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.

  5. #5
    Mitglied

    (Threadstarter)


    Registriert seit
    Jun 2009
    Ort
    Im Forum
    Beiträge
    530

    Standard Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen

    €:
    Zitat Zitat von Exterminans Beitrag anzeigen
    Nein, es gibt keine Funktion die dir die gesetzten Variablen auflistet.
    :€

    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()

    €:
    Zitat Zitat von Exterminans Beitrag anzeigen
    Die Eingabe-Daten bei Beginn des Scripts analog zum alten magic_quotes zu maskieren ist eine potentielle Lösung, allerdings nicht zuverlässig.
    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)

  6. #6
    Operator

    Board:Crew

    Avatar von aNtiCHrist
    Registriert seit
    May 2000
    Beiträge
    23.383

    Standard 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.

  7. #7
    Mitglied

    (Threadstarter)


    Registriert seit
    Jun 2009
    Ort
    Im Forum
    Beiträge
    530

    Standard Re: [PHP] Alle verwendeten Variablen durch Funktion laufen lassen

    Zitat Zitat von aNtiCHrist Beitrag anzeigen
    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?
    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.

    Zitat Zitat von aNtiCHrist Beitrag anzeigen
    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.
    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.

    Zitat Zitat von aNtiCHrist Beitrag anzeigen
    Möglicherweise hast du bisher das DRY-Prinzip nicht verfolgt.
    Kannst du mir grad erläutern, was du damit meinst?
    Vielleicht lerne ich ja gleich wieder etwas dazu?

  8. #8
    Operator

    Board:Crew

    Avatar von aNtiCHrist
    Registriert seit
    May 2000
    Beiträge
    23.383

    Standard 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

  9. #9
    Mitglied

    (Threadstarter)


    Registriert seit
    Jun 2009
    Ort
    Im Forum
    Beiträge
    530

    Standard 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...

  10. #10
    Operator

    Board:Crew

    Avatar von aNtiCHrist
    Registriert seit
    May 2000
    Beiträge
    23.383

    Standard 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.

  11. #11
    Mitglied

    (Threadstarter)


    Registriert seit
    Jun 2009
    Ort
    Im Forum
    Beiträge
    530

    Standard 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.

  12.  
     
     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •