Fazladan HTTP İstek Üstbilgileri ekleme

HTTP isteklerinde User-Agent veya Content-Type gibi başlıklar bulunur. Proje yöneticisi olarak ekli tarayıcılarda Çerez veya Yönlendiren gibi ekstra EXTRA_HEADERS Amaç ekstra. Chrome, güvenlik nedeniyle ek üstbilgilerin bazılarını filtreler Niyetin nasıl ve nerede başlatıldığına bağlı olarak.

Kaynaklar arası istekler, istemci ve sunucu açısından ek bir güvenlik katmanı gerektirir. birbirine ait değildir. Bu kılavuzda, bu tür isteklerin Chrome üzerinden kullanıma sunulması ele alınmaktadır. özel sekmeler (ör. tarayıcı sekmesinde bir URL açan uygulamalardan başlatılan amaçlar). Chrome'a kadar 83 ile başlayan geliştiriciler, Özel Sekme başlatırken istedikleri başlıkları ekleyebilirler. Sürüm 83'ten itibaren Chrome onaylanmamış başlıklardan dolayı, onaylanan çapraz kaynak başlıkları hariç tümünü filtrelemeye başladı oluşturduğunu fark etmiş olabilirsiniz. Chrome 86'dan itibaren, onaylanmamış üstbilgileri dijital öğe bağlantısı kullanılarak sunucu ve istemci birbiriyle ilişkili olduğunda kaynaklar arası istekler. Bu davranış aşağıdaki tabloda özetlenmiştir:

Chrome sürümü CORS başlıklarına izin verilir
Chrome 83'ten önce onaylı, onaylanmadı
Chrome 83 - Chrome 85 onay listesinde
Chrome 86 ve sonraki sürümler dijital varlık bağlantısı ayarlandığında, onaylananlar listesinde bulunan, onaylanmayan

Tablo 1.: Onaylanmayan CORS başlıklarının filtrelenmesi.

Bu makalede, sunucu ile istemci arasında doğrulanmış bir bağlantının nasıl kurulacağı ve bu bağlantının hem onaylanan hem de onaylanmayan http üstbilgilerini gönderebilir. Şu bölüme atlayabilirsiniz: Kod için Özel Sekme Amaçlarına Ek Başlıklar Ekleme.

Arka plan

onaylanan ve onaylanmamış CORS İstek Başlıkları

Kaynaklar Arası Kaynak Paylaşımı (CORS), bir kaynaktaki web uygulamasının istekte bulunmasına olanak tanır. pek çok farklı kaynak vardır. CORS-approvelisted başlıklarının listesi HTML Standardı. Onay listesine eklenen başlıklar sonraki tabloda gösterilmiştir:

Header Açıklama
accept-language Müşterinin anladığı doğal dillerin reklamını yapma
içerik-dil Mevcut hedef kitleye yönelik dili açıklıyor
içerik türü kaynağın medya türünü gösterir

Tablo 2.: Onay listesindeki CORS başlıkları örneği.

Onaylanan başlıklar hassas içermediği için güvenli olarak kabul edilir ve sunucunun zarar verebilecek işlemler gerçekleştirmesine neden olma olasılığı çok düşüktür.

Onaylanmayan başlık örnekleri aşağıdaki tabloda gösterilmiştir:

Header Açıklama
bearer-token Sunucudaki istemcinin kimliğini doğrular
kaynak isteğin kaynağını gösterir
kurabiye sunucu tarafından ayarlanan çerezleri içerir

Tablo 3.: Onaylanmamış liste dışı CORS başlıkları örneği.

CORS isteklerine onaylanmayan başlıkların eklenmesi, HTML standardı ve sunucuları tarafından önerilmez. kaynaklar arası isteklerin yalnızca onaylanan başlıkları içerdiğini varsayın. Onaylanmayan başlıklar gönderiliyor kötü amaçlı üçüncü taraf uygulamalarının, kullanıcıları kötüye kullanan başlıklar oluşturmasına izin verir Chrome'un (veya başka bir tarayıcının) sakladığı ve isteklere eklediği çerezler. Çerezler kötü amaçlı sunucu işlemlerinin kimliğini doğrulamak için iyi bir fırsattır.

CORS onaylı başlıkları Özel Sekme isteklerine ekleme

Özel Sekmeler, web sayfalarını özelleştirilmiş bir tarayıcı sekmesinde açmak için kullanabileceğiniz özel bir yöntemdir. Özel Sekme intent'ler CustomTabsIntent.Builder() kullanılarak oluşturulabilir. Bu panellere başlık, Browser.EXTRA_HEADERS işareti olan bir Bundle kullanarak

CustomTabsIntent intent = new CustomTabsIntent.Builder(session).build();

Bundle headers = new Bundle();
headers.putString("bearer-token", "Some token");
headers.putString("redirect-url", "Some redirect url");   
intent.intent.putExtra(Browser.EXTRA_HEADERS, headers);

intent.launchUrl(Activity.this, Uri.parse("http://www.google.com"));

Onaylanan başlıkları her zaman özel sekme CORS isteklerine ekleyebiliriz. Ancak Chrome filtreleri varsayılan olarak kabul edilmeyen başlıklar kullanır. Diğer tarayıcıların davranışı farklı olsa da, geliştiriciler, onaylanmamış başlıkların genel olarak engellenmesini beklemelidir.

Onaylanmayan başlıkları özel sekmelere eklemenin desteklenen yolu, ilk olarak kaynaklar arası bağlantı oluşturabilirsiniz. Bir sonraki bölümde, bu dönüşüm işlemlerinin ve gerekli başlıklarla bir Özel Sekmeler isteği başlatın.

Özel Sekme Amaçlarına Ek Başlık Ekleme

Onaylanmayan başlıkların Özel Sekme amaçları üzerinden aktarılmasına izin vermek için Android ve web uygulaması arasında, yazarın marka sahibini doğrulayan bir dijital varlık bağlantısı iki uygulamanın da sahibidir.

Dijital öğe bağlantısı oluşturmak için resmi kılavuzdaki talimatları uygulayın. Bağlantı ilişkisi kullanımı için: "delegate_permission/common.use_as_origin"" kaynak kodunu görme.

Ek Başlıklarla Özel Sekme Niyeti Oluşturma

Özel Sekmeler amacı oluşturmanın birden fazla yolu vardır. Mevcut oluşturucuyu kullanabilirsiniz kitaplığı derleme bağımlılıklarına ekleyerek androidX'te yapabilirsiniz:

MULTI_LINE_CODE_PLACEHOLDER_1

Amacı oluşturun ve ekstra başlıklar ekleyin:

MULTI_LINE_CODE_PLACEHOLDER_2

Uygulama ileCustomTabsSession Chrome sekmesi. Uygulamanın ve web uygulamasının aynı kaynağa ait olduğunu doğrulamak için oturumdan yararlanmamız gerekir. Doğrulama yalnızca dijital varlık bağlantıları doğru şekilde oluşturulmuşsa başarılı olur.

CustomTabsClient.warmup() numaralı telefonu aramanız önerilir. Tarayıcı uygulamasının arka planda önceden başlatma ve URL açma işlemini hızlandırma.

MULTI_LINE_CODE_PLACEHOLDER_3

Doğrulamadan Sonra İntent Başlatan Bir Geri Çağırma Ayarlama

CustomTabsCallback oturuma geçirildi. Bu ürünü Daha önce oluşturulan CustomTabsIntent uygulamasını başlatmak için onRelationshipValidationResult() kaynak doğrulaması başarılı olur.

MULTI_LINE_CODE_PLACEHOLDER_4

Özel sekmeler hizmeti bağlantısını bağla

Hizmet bağlandığında hizmeti ve bağlantının onCustomTabsServiceConnected() öğesi başlatılır sonra çağrılır. Hizmetin bağlantısını doğru şekilde kaldırmayı unutmayın. Bağlama ve bağlamayı kaldırma genellikle onStart() ve onStop() etkinlik yaşam döngüsü yöntemlerinde yapılır.

// Bind the custom tabs service connection.
// Call this in onStart()
CustomTabsClient.bindCustomTabsService(this,
    CustomTabsClient.getPackageName(MainActivity.this, null), connection);

// …
// Unbind the custom tabs service.
// Call this in onStop().
unbindService(connection);

Demo uygulama kodu

Özel Sekmeler Hizmeti hakkında daha fazla bilgiyi burada bulabilirsiniz. Bkz. android-browser-helper çalışan bir örnek uygulama için GitHub deposunu kullanın.

Özet

Bu kılavuzda, özel sekme CORS isteklerine rastgele başlıkların nasıl ekleneceği açıklanmaktadır. Onaylanan başlıklar her özel sekme CORS isteğine eklenebilir. Onaylanmayan başlıklar şunlardır: Chrome, CORS isteklerinde genellikle güvenli olmadığı kabul edilir ve Chrome bunları varsayılan olarak filtreler. Bunları ekleyebilirsiniz: Yalnızca aynı kaynaktan gelen, bir dijital varlık bağlantısıyla doğrulanan istemciler ve sunucular için izin verilir.