2016-01-12 43 views
5

Mamy aplikację na Androida, która pozwala nam umieścić naszą stronę internetową w aplikacji. Jednak aby zapobiec przeciskaniu kliknięć, w naszych konfiguracjach proxy mamy następującą dyrektywę.Android iframe SameOrigin na niestandardowych witrynach

Header dołączyć X-FRAME-OPTIONS "SAMEORIGIN"

Jest to bardzo powszechna strategia Cross-Origin Resource Sharing.

Niestety Webview w przeglądarce na Androida ma pochodzenie jako file://, które jest inne niż domena, której używamy. Prowadzi to do tego, że błąd nie wyświetlił zestawu x-frame-options ustawionego na sameorigin.

Jakie strategie (po stronie serwera proxy lub po stronie klienta) Czy mogę zezwolić aplikacjom na Androida na interakcję z naszą witryną (bez CAŁKOWICIE usuwania samoorygina)?

Odpowiedz

2

Nie myśl, że możesz to zrobić. Ponieważ Chromium nie widzi Allow-From jako funkcji [1], a Android w dużym stopniu opiera się na frameworkach Chromium dla WebViews.

Zgaduję, że Twoje wymagania to blokowanie kliknięć opartych na przeglądarce? Nie można używać . Możesz pomyśleć o podejściu podobnym do tego opisanego w tej rozmowie BlackHat [2], UI Redressing Attacks on Android Devices. Zaleciłbym przeczytanie całego pdf naprawdę interesującego materiału.

Zapoznaj się z Chapter 5 MITIGATION TECHNIQUES, Section 1 Browser-Based UI Redressing.

<styleid=”antiClickjack”> 
    body{display:none!important;} 
</style> 
<scripttype=”text/javascript”> 
    if(self===top){ 
     varantiClickjack=document. 
     getElementById(”antiClickjack”); 
     antiClickjack.parentNode.removeChild(antiClickjack); 
    }else{ 
     top.location=self.location; 
    } 
</script> 

[1] https://code.google.com/p/chromium/issues/detail?id=129139#c20
[2] https://media.blackhat.com/ad-12/Niemietz/bh-ad-12-androidmarcus_niemietz-WP.pdf

2

WebView ma metodę loadDataWithBaseURL(). Możesz przeczytać w swoim pliku i przekazać go z dowolnym źródłem, którego potrzebujesz jako adresu bazowego.

public void loadDataWithBaseURL(String baseUrl, 
           String data, 
           String mimeType, 
           String encoding, 
           String historyUrl) 

Obciążenia podane dane do tego, używając baseURL WebView jako podstawowego adresu URL za ich treść. Podstawowy adres URL służy zarówno do rozstrzygania względnych adresów URL, jak i przy stosowaniu zasad oryginalnego kodu JavaScript.