2017-12-09 13 views
13

AndroidのChrome 63がリリースされて以来、2017年12月6日に、私の会社CordovaベースのAndroidアプリに問題が発生しました。このアプリには、ユーザが自分の会社の電子商取引ウェブサイトの一部をアプリ内からナビゲートできるIFrameが含まれています。Android Cordova App with IFrame Chrome 63要求ヘッダーがありません。Cookies

IFrameにロードされたページ間のナビゲーションは、リクエストヘッダーにクッキー情報を送信しなくなりました。

クッキーに保存されているセッションIDなどの情報は、次のページに渡されず、次のページがまったく新しいユーザーセッションを開始します。

しかし、奇妙なのは、IFramesのページ内で実行されたAJAX呼び出し(バスケット内のアイテム数を取得するなど)とアセットリクエスト(CSS js、イメージファイルなど)はリクエスト内でCookie情報を送信するヘッダーは正常です。これらのヘッダーのセッションIDは、ページ間で同一であり、セッションの永続性を示します。

クッキーは作成されていますが、企業ドメインのアプリケーションパネルでChromeデベロッパーツールを使用しているときに表示されます。彼らはちょうど次のページに渡されていません。

この問題は、Android 7.1.1デバイスで発生しました。このデバイスでChromeアプリを無効にすると、アプリ内のIFrameのCookieリクエストヘッダーが正常に機能しなくなるため、おそらくCordova Webviewは無効になってもChromeを使用していないようです。

誰でもこの問題の原因が分かっていますか? Chrome 63のSameSite Cookieや厳密なサイト分離の変更やその他のセキュリティ関連の変更に関連するものであれば何ですか?

問題は、2016年10月に固定し、このクロムのバグのように表示されます。 https://bugs.chromium.org/p/chromium/issues/detail?id=634311

のWebViewしかしコルドバライブラリ(コルドバのAndroid 6.4.0)のSystemCookieManagerクラスで有効になってサードパーティクッキーを持っています:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    cookieManager.setAcceptThirdPartyCookies(webView, true);    
} 

明確に何も指定していないと謝罪します。誰もがこの問題を手伝うことができれば、私は追加情報を提供できてうれしいです。

+0

説明のおかげで、同じ問題が発生しました。それはiframeを使用しているように見えるCordovaではない証拠ではない、それはセキュリティの制限を取得し続けます。私たちは、themeablebrowserまたはcordova inappbrowserを使用することを検討しています。 – Jerem

+0

これはChrome対System WebViewのようではありませんが、純粋にバージョンに関連しています。私の電話では、System WebView v63とChrome v62があります。この設定では、アプリは上記の問題を抱えています。 システムWebViewの更新を削除すると、問題は解決します。 Chromeをv63に強制的に更新する方法はありません。v62はインストールできる最新のバージョンです。だから私は確かに、どのエンジン/バージョンがその場合に使用されるのかはわかりません。 –

答えて

2

ここでは、Cordovaなしで問題を再現する方法があります。クッキーをテストするのにhttp://httpbin.org/cookies/set?k2=v2&k1=v1を使います。 Android System WebView v。63では、クッキーは送信されません。以前のバージョンでは、それらは送信されます。質問に対する答えを見つけることができれば幸いです。ここでは、完全なAndroidのプロジェクトへのリンクです:https://www.dropbox.com/s/s53wfy71uou11rh/test-webview.zip?dl=0

MainActivity.java

package com.example.mihai.twv; 

import android.os.Build; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.webkit.CookieManager; 
import android.webkit.WebView; 

import java.io.InputStream; 

public class MainActivity extends AppCompatActivity { 

    WebView mWebView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     initWebView(); 
     loadWebView(); 
    } 

    private void initWebView() { 
     mWebView = (WebView) findViewById(R.id.webView); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      WebView.setWebContentsDebuggingEnabled(true); 
     } 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, true); 
     } 
    } 

    private void loadWebView() { 
     String url = "http://httpbin.org"; 
     String html = getLocalFileContents("html/main.html"); 
     mWebView.loadDataWithBaseURL(url, html, "text/html", "UTF-8", null); 
    } 

    private String getLocalFileContents(String filepath) { 
     String response = ""; 

     try { 
      InputStream is = getAssets().open(filepath); 
      int size = is.available(); 

      StringBuilder builder = new StringBuilder(); 

      byte[] buffer = new byte[size]; 
      while (is.read(buffer) != -1) { 
       builder.append(new String(buffer, "UTF-8")); 
      } 
      is.close(); 
      response = builder.toString(); 
     } catch (Exception e) { 
     } 
     return response; 
    } 
} 

HTML/main.htmlを(資産フォルダ内)

<html> 
<head> 
    <base href="file:///android_asset/html/"> 
    <link type="text/css" rel="stylesheet" href="../css/main.css" /> 
</head> 
<body> 
    <iframe src="http://httpbin.org/cookies/set?k1=v1&k2=v2" frameborder="0"></iframe> 
</body> 

css/main。(資産フォルダ内の)CSS

html, 
body, 
iframe { 
    width: 100%; 
    height: 100%; 
} 
+0

これは、Android System WebView 63.0.3239.107アップデートで修正されているようです。 Android 6.0.1搭載のSamsung J5(SM-J500H)でテスト済み – mihai1990

9

このバグは、提出されたとin the Chromium Bug trackerを取り上げました。 Chromiumの開発者によると、App側からは何もできません。

+3

このバグは、Chrome/Android Webview(バージョン63.0.3239.111)の最新リリースで修正されました。アプリで発生した問題は解決されました。 – user1491571

-1

https urlでIFrameを閲覧している場合、Chrome 63はSymantecによって生成されたSSL証明書に関連付けられたセキュリティ警告を生成します。 IFrameの内 これ以上のナビゲーションは

は、より多くの情報については以下を参照してくださいコルドバアプリケーションに受け入れられている:https://security.googleblog.com/2017/09/chromes-plan-to-distrust-symantec.html

0

この はChromeのバグだった、それが修正されました。 Chromeをもう一度更新しました。現在は端末で正常に動作しています。

コルドバは他のアプリに依存していることがわかります...

関連する問題