Delen via


Beveiligings- en gebruikersinvoer

Gebruikersgegevens, die elk type invoer zijn (gegevens van een webaanvraag of URL, invoer voor besturingselementen van een Microsoft Windows Forms-toepassing, enzovoort), kunnen code nadelig beïnvloeden, omdat deze gegevens vaak rechtstreeks worden gebruikt als parameters om andere code aan te roepen. Deze situatie is vergelijkbaar met schadelijke code die uw code aanroept met vreemde parameters en dezelfde voorzorgsmaatregelen moeten worden genomen. Gebruikersinvoer is in feite moeilijker om veilig te maken omdat er geen stackframe is om de aanwezigheid van mogelijk niet-vertrouwde gegevens te traceren.

Deze zijn een van de subtielste en moeilijkste beveiligingsfouten om te vinden, omdat, hoewel ze kunnen bestaan in code die schijnbaar niet gerelateerd is aan beveiliging, ze een gateway zijn om slechte gegevens door te geven aan andere code. Als u naar deze fouten wilt zoeken, volgt u elk type invoergegevens, stelt u zich voor wat het bereik van mogelijke waarden kan zijn en bedenkt u of de code die deze gegevens ziet al deze gevallen kan verwerken. U kunt deze fouten oplossen door bereikcontrole en weigering van invoer die de code niet kan verwerken.

Enkele belangrijke overwegingen met betrekking tot gebruikersgegevens zijn onder andere:

  • Alle gebruikersgegevens in een serverantwoord worden uitgevoerd in de context van de serversite op de client. Als uw webserver gebruikersgegevens gebruikt en invoegt op de geretourneerde webpagina, kan deze bijvoorbeeld een <scripttag> bevatten en uitvoeren alsof deze afkomstig is van de server.

  • Houd er rekening mee dat de client elke URL kan aanvragen.

  • Overweeg lastige of ongeldige paden:

    • .. \ , extreem lange paden.

    • Gebruik van jokertekens (*).

    • Tokenuitbreiding (%token%).

    • Vreemde vormen van paden met speciale betekenis.

    • Namen van alternatieve bestandssysteemstromen, zoals filename::$DATA.

    • Korte versies van bestandsnamen, zoals longfi~1 voor longfilename.

  • Houd er rekening mee dat Eval(userdata) alles kan doen.

  • Wees voorzichtig met late binding met een naam die enkele gebruikersgegevens bevat.

  • Als u met webgegevens te maken hebt, kunt u rekening houden met de verschillende vormen van escapes die zijn toegestaan, waaronder:

    • Hexadecimale escapes (%nn).

    • Unicode-escapes (%nnn).

    • Overlong UTF-8 escapes (%nn%nn).

    • Dubbele escapes (%nn wordt %mmnn, waarbij %mm de escape voor %is).

  • Wees voorzichtig met gebruikersnamen met meer dan één canonieke indeling. U kunt bijvoorbeeld vaak het formulier MYDOMAIN\username of de gebruikersnaam@mydomain.example.com formulier gebruiken.

Zie ook