다음을 통해 공유


JavaScript Hijacking och ASP.NET AJAX

Tomas Gilså på IDG skrev idag om en potentiell säkerhetsrisk som - under vissa förutsättningar - kan uttnyttjas mot webbapplikationer som använder något av de olika AJAX-ramverk som finns på marknaden och som serialiserar data med hjälp av JSON - däribland ASP.NET AJAX-ramverket.

Sårbarheten innebär att en tredje part potentiellt sett skulle kunna läsa av data som skickas från webbservern till webbläsaren. Detta förutsatt att användaren först loggar in i webbapplikationen och sedan, innan sessionen har gått ut, surfar till en sajt som innehåller kod som gör en HTTP GET (inbäddad i en script-tag) mot en webservice som exponerar metoder som har gjorts anropningsbara från klientscript. Detta handlar alltså om en variant av s.k. Cross Site Request Forgery som jag har skrivit en del om i en tidigare blog-post om säkerhet och AJAX.

En förutsättning för att det ska gå att uttnyttja sårbarheten är alltså att HTTP GET explicit har slagits på som tillåtet protokoll för anrop mot den aktuella webservicen, något som jag definitivt avråder ifrån. Istället bör du minimera attackytan genom att slå av alla protokoll som din webservice inte behöver kunna anropas via. Om du vet att din webservice endast ska kunna anropas från AJAX-klienter i form av webbläsare så kan du enkelt slå av alla anropssätt förutom POST med JSON-serialisering genom att lägga till följande i web.config:

    <webServices>

      <protocols>

        <remove name="HttpSoap"/>

        <remove name="HttpSoap12"/>

        <remove name="HttpPost"/>

        <remove name="HttpPostLocalhost"/>

        <remove name="HttpGet"/>

        <remove name="Documentation"/>

      </protocols>

    </webServices>

Du kan läsa mer om detaljerna kring säkerhetsrisken på Fortify Software's hemsida: https://www.fortifysoftware.com/news-events/releases/2007/2007-04-02.jsp

UPPDATERING: såg precis att Scott Guthrie har postat en mycket bra genomgång av vilket inbyggt skydd ASP.NET AJAX har mot attacker av det slaget: https://weblogs.asp.net/scottgu/archive/2007/04/04/json-hijacking-and-how-asp-net-ajax-1-0-mitigates-these-attacks.aspx