Sven Rautenberg: PHP - aber sicher

Beitrag lesen

Moin!

vielleicht sollten die von dir verwendeten Begriffe erst mal geklärt werden?

Zu $_CAPSLOCK finde ich bei Google zuwenig,

$_GET, $_POST, $_SERVER, $_COOKIES, $_FILES, $_ENV - was haben alle diese Variablennamen gemeinsam? Nutzt du PHP so wenig, dass dir die Zusammenfassung als $_CAPSLOCK entgangen ist?

Mit Escaping meinst du wohl das (automatische) auskommentieren bestimmter
Zeichen per Backslash, damit Eingaben nicht unbeabsichtigt als Script
ausgeführt werden, statt irgendwelche Filter zu versuchen?

Man muß es generischer formulieren, weil es generischer funktioniert. Denn nicht immer ist der Backslash das Escape-Zeichen. Escaping im HTML-Kontext bedeutet beispielsweise, dass das Zeichen < als Entity &lt; ausgegeben wird - also frei von irgendeinem Backslash.

Escaping ist der Vorgang, der einen Textstring (im Kontext "Text") beim Übergang in einen anderen Kontext (Beispiele: HTML, SQL, Kommandozeile) so behandelt, dass in diesem neuen Kontext seine ursprüngliche Textbedeutung erhalten bleibt und keinerlei Bedeutungen des neuen Kontextes aktiv werden können. Das Zielsystem versteht also den Text weiterhin komplett als Text. Und da Text keine Gefahr darstellt, ist man sicher.

Ansonsten kommt es mir eigentlich übersichtlicher vor, solche o.g. Variablen
möglichst früh einmal zu bearbeiten.

Nein, das ist ja gerade das gefährliche daran.

Gefährlicher Code muß gefährlich aussehen. Ungefährlicher Code muß ungefährlich aussehen. Nur wenn man diese optische Differenzierung lernt zu programmieren und beim Debugging dann ausnutzt, macht man sich das Leben wirklich leichter.

Ein Beispiel. Eine lange PHP-Datei, mit mehreren Includes in anderen Dateien. Du hast den größten Teil des Codes nicht selbst geschrieben. Irgendwo mittendrin eine Ausgabe:

  
  echo "<p>Ihr Name: ".$name."</p>";  

Preisfrage: Besteht hier die Gefahr von HTML-Cross-Site-Skripting?

Antwort: Ja! Die einzige Sicherheit gegen Skripting besteht darin, dass irgendwoanders im Code eine Prüfung vorgenommen wurde, die verhindert, dass $name mit "bösen Zeichen" verschmutzt wird.

Dasselbe Stückchen Code nochmal anders:

  
  echo "<p>Ihr Name: ".htmlspecialchars($name)."</p>";  

Preisfrage: Besteht hier die Gefahr von HTML-Cross-Site-Skripting?

Antwort: Absolut NEIN! Egal was in $name drinsteht oder durchgelassen wird.

Das erste Codebeispiel muß man als "gefährlich" optisch speichern. Die Ausgabe einer Variablen ohne drumherumgelegte Escaping-Funktion sollte einem Gänsehaut und aufgerollte Zehennägel bescheren.

Das zweite Codebeispiel hingegen ist absolut sicher, was auch immer passiert.

- Sven Rautenberg

--
"Love your nation - respect the others."
0 51

Versuche der "feindlichen Übernahme"?

Christoph Schnauß
  • php
  1. 0
    David Tibbe
    1. 0
      Christoph Schnauß
      1. 0
        Karin
        1. 0
          Christoph Schnauß
          1. 0

            total Off Topic

            Karin
            • menschelei
            1. 0
              Christoph Schnauß
              1. 0
                Karin
  2. 0
    Steel
  3. 2
    Karin
    1. 0
      Christoph Schnauß
      1. 0
        Gerti
        1. 0
          Christoph Schnauß
          1. 0
            Gerti
            1. 0
              Johannes Zeller
              1. 0
                Alexander Brock
  4. 0
    zwerg
    1. 2
      Der Martin
    2. 3
      Patrick Andrieu
      1. 0
        Patrick Andrieu
      2. 0
        Christoph Schnauß
      3. 0
        zwerg
  5. 1

    Fazit / nötige Einstellungen?

    Cyx23
    1. 0
      Christoph Schnauß
      1. 0
        Tobias Kloth
        1. 0
          Christoph Schnauß
        2. 0
          Sven Rautenberg
          1. 0
            Christoph Schnauß
            1. 1
              Sven Rautenberg
              1. 1
                Christoph Schnauß
      2. 0
        Cyx23
    2. 2

      PHP - aber sicher

      Marc Reichelt
      1. 0
        Cyx23
        1. 0
          Sven Rautenberg
          1. 0
            Cyx23
            1. 2
              Sven Rautenberg
              1. 0
                Cyx23
                1. 1
                  Sven Rautenberg
                  1. 0
                    Cyx23
                    1. 1
                      Karin
                    2. 0
                      Auge
                      1. 0
                        Cyx23
                        1. 0
                          Auge
                          1. 0
                            dedlfix
                            1. 0
                              Auge
                        2. 1
                          Sven Rautenberg
                  2. 1
                    dedlfix
      2. 0
        Marc Reichelt
        1. 0
          Cyx23
          1. 0
            Marc Reichelt
    3. 2
      dedlfix