2016-01-12 32 views
5

Abbiamo un'applicazione Android che sta iframe il nostro sito Web nella loro applicazione. Tuttavia, per prevenire il click jacking, abbiamo la seguente direttiva nelle nostre configurazioni proxy.Android Iframe SameOrigin su siti personalizzati

Header accodare X-FRAME-OPTIONS "SAMEORIGIN"

Questa è una strategia molto comune condivisione delle risorse Cross-Origin.

Sfortunatamente il Webview in un browser Android ha l'origine come file:// che è diverso dal dominio che usiamo. Ciò porta all'errore rifiutato di visualizzare x-frame-options impostato su sameorigin.

Quali strategie (sul proxy o sul lato client) Posso utilizzare per consentire all'applicazione Android di interagire con il nostro sito (senza COMPLETAMENTE rimuovere sameorigin)?

risposta

2

Non pensare di poterlo fare. Poiché Chromium non vede Allow-From come funzione [1] e Android fa molto affidamento sui framework Chromium per WebViews.

Suppongo che le vostre esigenze siano di bloccare le intercettazioni basate su browser?

Poiché non è possibile utilizzare Allow-From. Potresti voler pensare a un approccio simile a quello descritto in questo talk di BlackHat [2], UI Redressing Attacks on Android Devices. Consiglierei di leggere l'intero pdf di cose davvero interessanti.

Check out 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

Il WebView presenta un metodo loadDataWithBaseURL(). Puoi leggere il tuo file e passarlo attraverso l'origine di cui hai bisogno come URL di base.

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

carica i dati riportati in questa WebView, utilizzando baseurl come l'URL di base per il contenuto. L'URL di base viene utilizzato sia per risolvere gli URL relativi sia per l'applicazione della stessa politica di origine di JavaScript.