Fabian: Eingaben sicher ausgeben.

Hallo!

Ich habe hier oft gelesen, dass man Benutzereingaben kontextspezifisch maskieren soll. Im Fall von Html mit htmlspecialchars(). Ich habe neulich "irgendwo" gelesen, dass das nicht immer hilft. Z.B. Wenn der Benutzer Attribute von html-Elementen bearbeiten kann. on...- oder style-Attribute z.B. bzw. sogar externe CSS-Dateien durch die JavaScript ausgeführt wird.

In verschiedenen CMS finde ich sehr aufwändige Funktionen um Benutzereingaben für solche Fälle zu filtern. Beispiele wären die Funktionen removeXss() von Typo3, cleanKey() und xssClean() - (auf Github) - von Contao (früher Typolight) oder etwas exotischer removexss().

Offenbar ist man mit htmlspecialchars() alleine doch nicht immer auf der sicheren Seite. Wie kann ich jetzt als "Hobbyprogrammierer" vorgehen wenn ich nicht unbedingt sofort auf so ein Framework (und deren Funktionen) zurückgreifen will oder kann? Zumal die ja auch ab und an wegen Sicherheitslücken im Gespräch sind.

Ich bin mir jetzt sehr unsicher wie ich mit Benutzereingaben umgehen soll und ob ich nicht sogar selbst in meinen kleinen Projekten riesige Sicherheitslöcher habe wo ich doch immer gedacht, dass ich allein mit htmlspeciachars() gut abgesichert wäre.

Was kann ich tun?

Beste Grüße!

  1. n'Abend,

    Ich habe hier oft gelesen, dass man Benutzereingaben kontextspezifisch maskieren soll.

    nein, da hast du etwas missverstanden. Nicht Eingaben, sondern _Aus_gaben in einen bestimmten Kontext müssen spezifisch für eben diesen Kontext maskiert oder codiert werden.

    Im Fall von Html mit htmlspecialchars().

    Genau.

    Ich habe neulich "irgendwo" gelesen, dass das nicht immer hilft. Z.B. Wenn der Benutzer Attribute von html-Elementen bearbeiten kann. on...- oder style-Attribute z.B. bzw. sogar externe CSS-Dateien durch die JavaScript ausgeführt wird.

    Naja, wenn der Nutzer Teile des tatsächlichen Codes bearbeiten kann, sieht das alles wieder ganz anders aus. Die üblichen Maskierungsregeln zielen ja darauf ab, dass neutrale Daten eben _nicht_ unbeabsichtigt als Codes interpretiert werden.

    In verschiedenen CMS finde ich sehr aufwändige Funktionen um Benutzereingaben für solche Fälle zu filtern.

    Ja, das kann ich mir vorstellen. Das ist dann tatsächlich beliebig kompliziert.

    Offenbar ist man mit htmlspecialchars() alleine doch nicht immer auf der sicheren Seite.

    Nicht, wenn man den Anwendungsbereich verlässt, für den diese Funktion gedacht ist.

    Wie kann ich jetzt als "Hobbyprogrammierer" vorgehen wenn ich nicht unbedingt sofort auf so ein Framework (und deren Funktionen) zurückgreifen will oder kann? Zumal die ja auch ab und an wegen Sicherheitslücken im Gespräch sind.

    Wenn deine Nutzer Programm- oder Markup-Code bearbeiten sollen, steckst du sofort bis zum Hals in potentiellen Sicherheitsproblemen!

    Was kann ich tun?

    Dem Anwender diese Freiheiten nehmen, oder mit allen möglichen Konsequenzen leben, oder sehr, sehr viel Aufwand treiben, um mögliche Schwachstellen auszubügeln.

    So long,
     Martin

    --
    Der Alptraum jedes Computers:
    "Mir war, als hätte ich gerade eine 2 gesehen."
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo Martin!

      Was kann ich tun?

      Dem Anwender diese Freiheiten nehmen, oder mit allen möglichen Konsequenzen leben, oder sehr, sehr viel Aufwand treiben, um mögliche Schwachstellen auszubügeln.

      Sprich, einer dieser Funktionen aus einem beliebigen Framework vertrauen soweit ich mir nicht zutraue es besser/sicherer zu lösen? Offenbar ist das Problem nicht so einfach zu lösen, sonst hätten selbst die "großen" CMS nicht damit zu kämpfen obwohl sie viel Energie in komplizierte Funktionen investieren. Der heilige Gral, also ein Derivat zu htmlspecialchars, gibt es für solche Fälle also (noch) nicht?

      1. Tach!

        Dem Anwender diese Freiheiten nehmen, oder mit allen möglichen Konsequenzen leben, oder sehr, sehr viel Aufwand treiben, um mögliche Schwachstellen auszubügeln.
        Sprich, einer dieser Funktionen aus einem beliebigen Framework vertrauen soweit ich mir nicht zutraue es besser/sicherer zu lösen?

        Vertrauen ist schlecht, Wissen ist besser. Das Zutrauen sollte voraussetzen, dass du dich mit der Thematik auskennst. Lies nach, was diese Funktionen vorgeben zu tun. Wofür sind sie gedacht, was können sie nicht? (Zaubern zum Beispiel.) Informier dich über die Möglichkeiten, wo überall im HTML-Code Javascript-Code stehen kann. Versuch mal auf diese Arten Code auszuführen - mit und ohne Absicherung.

        Offenbar ist das Problem nicht so einfach zu lösen, sonst hätten selbst die "großen" CMS nicht damit zu kämpfen obwohl sie viel Energie in komplizierte Funktionen investieren. Der heilige Gral, also ein Derivat zu htmlspecialchars, gibt es für solche Fälle also (noch) nicht?

        Ist es denn notwendig, dass der Anwender HTML eingeben muss? Ist es denn notwendig, dass du sowas Anwendern gestatten musst, denen du keine 3em weit trauen kannst?

        dedlfix.