Freigeben über


Sicherheit und Benutzereingabe

Benutzerdaten, bei denen es sich um eine beliebige Art von Eingabe (Daten aus einer Webanforderung oder URL, Eingaben für Steuerelemente einer Microsoft Windows Forms-Anwendung usw.) handelt, können den Code negativ beeinflussen, da diese Daten häufig direkt als Parameter verwendet werden, um anderen Code aufzurufen. Diese Situation ist analog zu bösartigem Code, der Ihren Code mit seltsamen Parametern aufruft, und die gleichen Vorsichtsmaßnahmen sollten getroffen werden. Benutzereingaben sind tatsächlich schwieriger abzusichern, da kein Stapelrahmen vorhanden ist, um das Vorhandensein potenziell nicht vertrauenswürdiger Daten nachzuverfolgen.

Dies gehören zu den subtilsten und schwierigsten Sicherheitsfehlern, die gefunden werden müssen, da sie zwar im Code vorhanden sein können, der scheinbar nicht mit der Sicherheit verbunden ist, sie sind ein Gateway, um schlechte Daten an anderen Code zu übergeben. Um nach diesen Fehlern zu suchen, folgen Sie jeder Art von Eingabedaten, stellen Sie sich vor, was der Bereich möglicher Werte sein könnte, und überlegen Sie, ob der Code, der diese Daten sieht, all diese Fälle verarbeiten kann. Sie können diese Fehler durch die Bereichsüberprüfung beheben und alle Eingaben ablehnen, die der Code nicht verarbeiten kann.

Einige wichtige Aspekte, die Benutzerdaten betreffen, sind die folgenden:

  • Alle Benutzerdaten in einer Serverantwort werden im Kontext der Serverwebsite auf dem Client ausgeführt. Wenn Ihr Webserver Benutzerdaten akzeptiert und in die zurückgegebene Webseite einfügt, kann er z. B. ein <Skripttag> enthalten und so ausgeführt werden, als wäre es vom Server aus.

  • Denken Sie daran, dass der Client eine beliebige URL anfordern kann.

  • Erwägen Sie schwierige oder ungültige Pfade:

    • .. \, äußerst lange Pfade

    • Verwendung von Wildcard-Zeichen (*).

    • Tokenerweiterung (%token%)

    • Seltsame Formen von Pfaden mit besonderer Bedeutung.

    • Alternative Dateisystemdatenstromnamen, wie filename::$DATA.

    • Kurze Versionen von Dateinamen wie longfi~1 z. B. für longfilename.

  • Denken Sie daran, dass Eval(userdata) alles tun kann.

  • Seien Sie vorsichtig bei einer späten Bindung mit einem Namen, der Benutzerdaten enthält.

  • Wenn Sie mit Webdaten arbeiten, müssen die unterschiedlichen Formen von Escapesequenzen berücksichtigen, die zulässig sind:

    • Hexadezimale Escapesequenzen (%nn)

    • Unicode-Escapesequenzen (%nnn)

    • UTF-8-Escapesequenzen mit Überlänge (%nn%nn)

    • Doppelte Escape-Sequenzen (%nn wird %mmnn, wobei %mm die Escape-Sequenz für "%" ist).

  • Seien Sie vorsichtig mit Benutzernamen, die möglicherweise mehrere kanonische Formate aufweisen. Sie können z. B. häufig entweder das Formular "MYDOMAIN\Benutzername " oder das Formular "username@mydomain.example.com" verwenden.

Siehe auch