tisdag 31 mars 2009

Isolering i webbläsare

Charlie Reis, University of Washington, presenterade tankar kring att säkra sajter genom att isolera varje sajt/flik i en sandlåda så den får en egen uppsättning kakor och tillstånd. Kallas walled web applications. Det hela är rätt likt utvecklingen av operativsystem de senaste 30 åren från inget vettigt minnesskydd alls till mer och mer isolering mha processer och trådning och lokala tillstånd per process/tråd eller grupper av trådar.

Isolerade flikar ger problem med återautentisering eftersom sessionskakor inte följer med till nya flikar. Du kommer med andra ord inte kunna komma åt Google Reader direkt bara för att du är inloggad i Gmail. Kanske kan man skilja mellan instanskakor (likt CSRF-tokens) och persistenta tillståndskakor?

Ska vi också boxa plugins? Om plugins vill använda hårdvarustöd (t ex Flash som kör OpenGL med hårdvaruacceleration) så blir sandlådetekniken svår som Brendan Eich (Mozilla) påpekade.

Googles Chrome bygger på Chromium som stödjer olika processmodeller för rendering av webbsidor. Jag blev intresserad och läste om deras modeller på chromium.org:
  • En process per sajtinstans
    Bra: Isolerar både olika sajter från varandra och olika instanser av samma sajt, dvs du kan ha två Facebooksidor uppe i olika processer med helt separerade tillstånd
    Dåligt: Äter minne och försvårar stöd för cross-origin-anrop i JavaScript
  • En process per sajt
    Bra: Isolerar olika sajter från varandra och käkar inte lika mycket minne
    Dåligt: Låter samma sajt dela process (t ex hela Google Apps-sviten) även om den finns i flera flikar och försvårar JavaScript på samma sätt som ovan
  • En process per webbläsarflik och så kallad browsing instance (sidor som öppnas via JavaScript, t ex "skriv nytt mejl"-flik som öppnats från din webbmejl tillhör samma bläddrarinstans)
    Bra: Relativt enkelt att förstå när nya processer kommer allokeras
    Dåligt: Om användaren surfar till en ny sida i en befintlig flik så påverkas processtillståndet för alla flikar i den flikens browsing instance, t ex om det hänger sig eller blir segt
  • En process per webbläsare (samma teknik som Firefox och Safari)

Inga kommentarer: