Säkerhets- och användarindata
Användardata, som är alla typer av indata (data från en webbbegäran eller URL, indata till kontroller i ett Microsoft Windows Forms-program och så vidare), kan påverka koden negativt eftersom dessa data ofta används direkt som parametrar för att anropa annan kod. Den här situationen liknar skadlig kod som anropar koden med konstiga parametrar, och samma försiktighetsåtgärder bör vidtas. Användarindata är faktiskt svårare att göra säkra eftersom det inte finns någon stackram för att spåra förekomsten av potentiellt ej betrodda data.
Dessa är bland de mest subtila och svåraste säkerhetsbuggar att hitta eftersom de, även om de kan finnas i kod som till synes inte är relaterade till säkerhet, är en gateway för att skicka felaktiga data till annan kod. Om du vill leta efter dessa buggar följer du alla typer av indata, föreställer dig vilka möjliga värden som kan vara och överväger om koden som ser dessa data kan hantera alla dessa fall. Du kan åtgärda dessa buggar genom intervallkontroll och avvisa indata som koden inte kan hantera.
Några viktiga överväganden som rör användardata är följande:
Alla användardata i ett serversvar körs i kontexten för serverns plats på klienten. Om webbservern tar användardata och infogar dem på den returnerade webbsidan kan den till exempel inkludera en <skripttagg> och köras som från servern.
Kom ihåg att klienten kan begära valfri URL.
Överväg knepiga eller ogiltiga sökvägar:
.. \ , extremt långa vägar.
Användning av jokertecken (*).
Tokenexpansion (%token%).
Konstiga former av vägar med särskild betydelse.
Alternativa filsystemsströmnamn som
filename::$DATA
.Korta versioner av filnamn, till exempel
longfi~1
förlongfilename
.
Kom ihåg att Eval (userdata) kan göra vad som helst.
Var försiktig med sen bindning till ett namn som innehåller vissa användardata.
Om du hanterar webbdata bör du överväga de olika former av escapes som är tillåtna, inklusive:
Hexadecimala escapes (%nn).
Unicode escapes (%nnn).
Överlånga UTF-8-undantag (%nn%nn).
Dubbla undantag (%nn blir %mmnn, där %mm är escape för %).
Var försiktig med användarnamn som kan ha mer än ett kanoniskt format. Du kan till exempel ofta använda formuläret MYDOMAIN\username eller username@mydomain.example.com form.