Android 自定义站点上的 Iframe SameOrigin

Android Iframe SameOrigin on custom sites

我们有一个 android 应用程序,它是 iframe-ing 我们的网站到他们的应用程序中。但是,为了防止点击劫持,我们在代理配置中有以下指令。

Header 追加 X-FRAME-OPTIONS "SAMEORIGIN"

这是一个非常常见的 Cross-Origin 资源共享策略。

不幸的是,android 浏览器中的 Webview 来源为 file://,这与我们使用的域不同。这导致错误拒绝显示 x-frame-options set to sameorigin

我可以采用什么策略(在代理端或客户端)允许 android 应用程序与我们的站点交互(无需完全删除 sameorigin)?

别以为你能做到。由于 Chromium 没有将 Allow-From 视为功能 [1],并且 Android 严重依赖 Chromium 的 WebViews 框架。

我猜您的要求是阻止基于浏览器的点击劫持?

因为你不能使用 Allow-From。您可能需要考虑一种类似于此 BlackHat 演讲 [2]、UI Redressing Attacks on Android Devices 中概述的方法。我建议阅读整个 pdf 非常有趣的东西。

查看 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

WebView 有一个 loadDataWithBaseURL() 方法。你可以读入你的文件,并通过你需要的任何来源作为基础 url.

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

Loads the given data into this WebView, using baseUrl as the base URL for the content. The base URL is used both to resolve relative URLs and when applying JavaScript's same origin policy.