Validering av begäran – Förhindra skriptattacker

I det här dokumentet beskrivs funktionen för validering av begäran i ASP.NET där programmet som standard hindras från att bearbeta okodat HTML-innehåll som skickas till servern. Den här funktionen för validering av begäran kan inaktiveras när programmet har utformats för att på ett säkert sätt bearbeta HTML-data.

Gäller för ASP.NET 1.1 och ASP.NET 2.0.

Validering av begäranden, en funktion i ASP.NET sedan version 1.1, hindrar servern från att acceptera innehåll som innehåller okodad HTML. Den här funktionen är utformad för att förhindra vissa skriptinmatningsattacker där klientskriptkod eller HTML omedvetet kan skickas till en server, lagras och sedan presenteras för andra användare. Vi rekommenderar fortfarande starkt att du verifierar alla indata och HTML-kodar dem när det är lämpligt.

Du kan till exempel skapa en webbsida som begär en användares e-postadress och sedan lagrar e-postadressen i en databas. Om användaren anger <SCRIPT-avisering>("hello from script")</SCRIPT> i stället för en giltig e-postadress kan skriptet köras om innehållet inte kodades korrekt när dessa data visas. Funktionen för validering av begäran i ASP.NET förhindrar att detta händer.

Varför den här funktionen är användbar

Många webbplatser är inte medvetna om att de är öppna för enkla skriptinmatningsattacker. Oavsett om syftet med dessa attacker är att förstöra webbplatsen genom att visa HTML, eller att eventuellt köra klientskript för att omdirigera användaren till en hackares webbplats, är skriptinmatningsattacker ett problem som webbutvecklare måste brottas med.

Skriptinmatningsattacker är ett problem för alla webbutvecklare, oavsett om de använder ASP.NET, ASP eller andra webbutvecklingstekniker.

Funktionen för validering av ASP.NET begäran förhindrar proaktivt dessa attacker genom att inte tillåta att okodat HTML-innehåll bearbetas av servern om inte utvecklaren beslutar att tillåta innehållet.

Vad du kan förvänta dig: Felsida

Skärmbilden nedan visar några exempel på ASP.NET kod:

Skärmbild som visar ett exempel på ASP.NET kod.

Om du kör den här koden visas en enkel sida där du kan ange text i textrutan, klicka på knappen och visa texten i etikettkontrollen:

Skärmbild som visar hur du kör den här koden resulterar i en enkel sida där du kan ange text i textrutan, klicka på knappen och visa texten i etikettkontrollen.

Om JavaScript, såsom <script>alert("hello!")</script> skulle anges och skickas, skulle vi få ett undantag dock.

Om JavaScript anges och skickas får man ett undantag.

Felmeddelandet anger att ett "potentiellt farligt Request.Form-värde identifierades" och innehåller mer information i beskrivningen om exakt vad som hände och hur du ändrar beteendet. Som exempel:

Verifiering av begäran har identifierat ett potentiellt farligt klientindatavärde och bearbetningen av begäran har avbrutits. Det här värdet kan tyda på ett försök att äventyra säkerheten för ditt program, till exempel ett skriptangrepp mellan webbplatser. Du kan inaktivera validering av begäranden genom att ange validateRequest=false i siddirektivet eller i konfigurationsavsnittet. Det rekommenderas dock starkt att programmet uttryckligen kontrollerar alla indata i det här fallet.

Inaktivera validering av begäran på en sida

Om du vill inaktivera validering av begäranden på en sida måste du ange validateRequest attributet för siddirektivet till false:

<%@ Page validateRequest="false" %>

Försiktighet

När valideringen av begäran är inaktiverad kan innehåll skickas till en sida. det är sidutvecklarens ansvar att se till att innehållet är korrekt kodat eller bearbetat.

Inaktivera begäransvalidering för din applikation

Om du vill inaktivera validering av begäran för ditt program måste du ändra eller skapa en Web.config fil för ditt program och ange attributet validateRequest i <pages /> avsnittet till false:

<configuration>
   <system.web>
      <pages validateRequest="false" />
   </system.web>
</configuration>

Om du vill inaktivera validering av begäranden för alla program på servern kan du göra den här ändringen i din Machine.config-fil.

Försiktighet

När validering av begäran har inaktiverats kan innehåll skickas till ditt program. det är programutvecklarens ansvar att se till att innehållet är korrekt kodat eller bearbetat.

Koden nedan ändras för att inaktivera validering av begäran:

Skärmbild som visar att koden nedan ändras för att inaktivera validering av begäran.

Om följande JavaScript nu har angetts i textrutan <script>alert("hello!")</script> blir resultatet:

Skärmbild som visar om JavaScript har angetts i textrutan: resultatet blir knappen

För att förhindra att detta inträffar måste vi html-koda innehållet när valideringen av begäran är inaktiverad.

Så här HTML-kodar du innehåll

Om du har inaktiverat validering av begäranden är det bra att HTML-koda innehåll som kommer att lagras för framtida användning. HTML-kodning ersätter automatiskt alla "<" eller ">" (tillsammans med flera andra symboler) med motsvarande HTML-kodade representation. Till exempel ersätts '' med '<' och '' ersätts med '>'. Webbläsare använder dessa specialkoder för att visa "<" eller ">" i webbläsaren.

Innehåll kan enkelt HTML-kodas på servern med hjälp av API:et Server.HtmlEncode(string) . Innehållet kan också enkelt HTML-avkodas, dvs. återgå till standard-HTML med hjälp av Server.HtmlDecode(string) metoden.

Skärmbild som visar innehåll kan enkelt HTML-kodas på servern med hjälp av API:et Server.HtmlEncode(string). Innehållet kan också enkelt html-avkodas, det vill ex. återgå till standard-HTML med hjälp av metoden Server.HtmlDecode(string).

Resulterar i:

Skärmbild som visar knappen