Daten bei Datenbindung formatieren XAP-Datei vor Hijacking schützen Page Navigation (Teil 2)
Kommentare

Menü 2 für Experten: XAP-Datei vor Hijacking schützen
Bei jeder Silverlight-Anwendung sollte man sichergehen, dass die XAP-Datei nicht auf einer anderen, nicht autorisierten HTML-Seite gehostet wird.

Menü 2 für Experten: XAP-Datei vor Hijacking schützen

Bei jeder Silverlight-Anwendung sollte man sichergehen, dass die XAP-Datei nicht auf einer anderen, nicht autorisierten HTML-Seite gehostet wird. Dieser Diebstahl wird als Hijacking bezeichnet und ist ein großes Sicherheitsproblem gängiger Silverlight-Anwendungen. Um die eigene XAP-Datei davor zu schützen, muss in der allgemeinen App.xaml.cs-Datei der URL der Host-Seite mittels HtmlPage.Document.DocumentUri überprüft werden. Entspricht der URL nicht der originalen Host-Seite, soll eine Silverlight-Seite mit einer Warnung aufgerufen werden (Abb. 2).

Abb. 2: Warnung, die bei einem versuchten Hijacking angezeigt wird
Abb. 2: Warnung, die bei einem versuchten Hijacking angezeigt wird

Ein Hacker kann diese Überprüfung jedoch durch einen einfachen Trick umgehen, indem er die original Host-Seite mittels IFrame auf seinem Server lädt. Die Silverlight-Anwendung bemerkt dann nicht, dass die Host-Seite durch ein IFrame geladen wurde. Das kann man aber durch ein JavaScript leicht herausfinden. Wobei hier schon das nächste Fettnäpfchen wartet. Der Hacker braucht nur den JavaScript-Code in seiner Hostseite zu kopieren und kann ihn dann auf seine Serverdaten anpassen. Doch wie kann man das nun verhindern? Der nötige JavaScript-Code, der erkennen soll, ob die Hostseite in einem IFrame geladen wurde, soll nur zur Laufzeit dynamisch von der Silverlight-Anwendung zur Hostseite hinzugefügt und ausgeführt werden (Listing 2). Der Code aus Listing 2 kann je nach Belieben auf die eigene Domäne eingerichtet werden. Während der Entwicklung kann die Überprüfung vorerst auch mittels „if DEBUG..“ ignoriert werden.

private void Application_Startup(object sender, StartupEventArgs e)
{
    const string hostUrl = "http://localhost:1690/SilverlightSafeXAPTestPage.aspx";

    var jsScript = HtmlPage.Document.CreateElement("script");
    jsScript.SetAttribute("type", "text/javascript");
    jsScript.SetAttribute("text", "function ensureInFrameset() { var parentFramesetLocation = '" + hostUrl + "'; var reg = new RegExp(parentFramesetLocation, 'i');return ((parent.location.href + '').search(reg) < 0);}");
    HtmlPage.Document.DocumentElement.AppendChild(jsScript);

    bool isInIFrame = (bool)HtmlPage.Window.Invoke("ensureInFrameset");

    if (HtmlPage.Document.DocumentUri != new Uri(hostUrl) || isInIFrame)
    {
        RootVisual = new HackerProtection();
    }
    else
    {
        RootVisual = new MainPage();
    }
}  

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -