Veri URI şeması - Data URI scheme

veri URI şeması bir tek tip kaynak tanımlayıcı (URI) sıralı verileri dahil etmenin bir yolunu sağlayan şema internet sayfaları sanki dış kaynaklarmış gibi. Bu, değişmez bir dosya biçimidir veya burada belge. Bu teknik, normalde resimler ve stil sayfaları gibi ayrı öğelerin tek bir Köprü Metni Aktarım Protokolü (HTTP) birden çok HTTP isteğinden daha verimli olabilecek istek,[1] ve çeşitli tarayıcı uzantıları tarafından resimleri ve diğer multimedya içeriklerini tek bir HTML dosyasında sayfa kaydetmek için paketlemek için kullanılır.[2][3] 2015 itibariyle, veri URI'leri çoğu büyük tarayıcı tarafından tam olarak desteklenir ve kısmen Internet Explorer ve Microsoft Edge.[4]

Sözdizimi

Veri URI'lerinin sözdizimi şurada tanımlanmıştır: Yorum İsteği (RFC) Ağustos 1998'de yayınlanan 2397,[5] ve takip eder URI şeması sözdizimi. Bir veri URI'si şunlardan oluşur:

veri:[<media type>][; base64],<data>
  • plan, veri. Ardından iki nokta üst üste (:).
  • İsteğe bağlı ortam türü. Ortam türü bölümü, formatta bir veya daha fazla parametre içerebilir özellik = değernoktalı virgülle ayrılmış (;). Yaygın bir ortam türü parametresi: karakter kümesi, değerin IANA listesinden olduğu ortam türünün karakter kümesini belirterek karakter seti isimler.[6] Biri belirtilmezse, ortam türü veri URI'sinin metin / düz; karakter kümesi = US-ASCII.
  • İsteğe bağlı base64 uzantısı Base64, önceki kısımdan noktalı virgül ile ayrılır. Mevcut olduğunda, bu, URI'nin veri içeriğinin Ikili veri, kullanılarak ASCII biçiminde kodlanmış Base64 için şema ikiliden metne kodlama. Base64 uzantısı, herhangi bir ortam türü parametresinden, bir = değer bileşen ve herhangi bir ortam türü parametresinden sonra gelmek Base64 kodlu veriler, orijinal verilerden yaklaşık% 33 daha büyük olduğundan, Base64 veri URI'lerinin yalnızca sunucu destekliyorsa kullanılması önerilir. HTTP sıkıştırması veya gömülü dosyalar 1KB'den küçükse.
  • veri, önceki kısımdan virgülle ayrılmış (,). Veriler, sıfır veya daha büyük bir dizidir sekizli karakterler olarak temsil edilir. Veri parçası sıfır uzunluğa sahip olsa bile, bir veri URI'sinde virgül gereklidir. Veri bölümünde izin verilen karakterler, ASCII büyük ve küçük harfleri, rakamları ve birçok ASCII noktalama işaretini ve özel karakterleri içerir. Bunun veri bölümünden önce gelen URI bileşenlerinde sınırlayıcılar olan iki nokta üst üste, noktalı virgül ve virgül gibi karakterler içerebileceğini unutmayın. Diğer sekizliler yüzde olarak kodlanmış. Veriler Base64 olarak kodlanmışsa, veri bölümü yalnızca geçerli Base64 karakterleri içerebilir.[7] Base64 kodlu veri: URI'ler standart Base64 karakter kümesini kullanır ('+' ve '/"sözde karakter olarak 62 ve 63)"URL güvenli Base64 " karakter seti.

Özelliklerin çoğunu gösteren veri URI'lerinin örnekleri şunlardır:

veri: metin / vnd-örnek + xyz; foo = bar; base64, R0lGODdh
veri: metin / düz; karakter kümesi = UTF-8; sayfa = 21,% 20data: 1234,5678 (çıktılar: "veri: 1234,5678")

Minimum veri URI'si veri:,, bu şemadan oluşur, ortam türü ve sıfır uzunluklu veriler içermez.

Dolayısıyla, genel URI sözdizimi içinde bir veri URI'si bir plan ve bir yolhayır ile yetki Bölüm, sorgu dizesiveya parça. İsteğe bağlı ortam türüisteğe bağlı Base64 göstergesi ve verilerin tümü URI yolunun parçalarıdır.

Kullanım örnekleri

HTML

Bir HTML küçük kırmızı bir noktanın resmini katıştıran parça: Red-dot-5px.png

<img src="veri: resim / png; base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4// 8 / w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg == " alternatif="Kırmızı nokta" />

Bu örnekte, biçimlendirme amacıyla çizgiler kesilmiştir. Veri URI'leri dahil olmak üzere gerçek URI'larda, kontrol karakterleri (ASCII 0 ila 31 ve 127) ve boşluklar (ASCII 32) "hariç tutulan karakterlerdir". Bu şu demek boşluk karakterleri veri URI'lerinde izin verilmez. Ancak, HTML 4 ve HTML 5 bağlamında, bir öğe öznitelik değeri (yukarıdaki "src" gibi) içindeki satır beslemeleri yok sayılır[kaynak belirtilmeli ]. Dolayısıyla, yukarıdaki veri URI'si satır beslemeleri yok sayılarak işlenecek ve doğru sonuç verilecektir. Ancak bunun bir HTML özelliği olduğunu, bir veri URI özelliği olmadığını ve diğer bağlamlarda, göz ardı edilen URI içindeki beyaz boşluğa güvenmenin mümkün olmadığını unutmayın.

CSS

Bir Basamaklı Stil Sayfaları (CSS) bir arka plan resmi içeren kural:

ul.kontrol listesi li.tamamlayınız {    padding-left: 20pks;    arka fon: beyaz url('veri: resim / png; base64, iVB ORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEU AAAD /// + l2Z / dAAAAM0lEQVR4nGP4 / 5 / h / 1 + G / 58ZDrAz3D / McH8 yw83NDDeNGe4Ug9C9zwz3gVLMDA / A6P9 / AFGGFyjOXZtQAAAAAEl FTkSuQmCC ') tekrar yok kaydırma ayrıldı üst;}

Bu örnekte, + satır sonlandırıcılar, bir sonraki satırda devam edildiğini gösteren bir CSS özelliğidir. Bunlar, CSS stil sayfası işlemcisi tarafından kaldırılır ve veri URI'si, bir verinin veri bileşeninde (URI) beyaz boşluklara izin verilmediğinden, boşluk olmadan yeniden oluşturulur ve onu doğru yapar.

JavaScript

Bir JavaScript Dipnot bağlantısında olduğu gibi gömülü bir alt pencere açan ifade:

pencere.açık('veri: text / html; charset = utf-8,' +    encodeURIComponent( // URL biçimlendirmesi için çıkış        ''+        ''+        '  Gömülü Pencere '+        ' 

42

'
+ '' ));

SVG

Gömülü JPEG görüntüleri içeren bir SVG görüntüsü örneği

Bir Ölçeklenebilir Vektör Grafiği Base64'te kodlanmış gömülü bir JPEG görüntüsü içeren görüntü:

<svg> genişlik ="64" yükseklik ="24" href ="veri: resim / jpeg; base64,/ 9j / 4AAQSkZJRgABAQEAYABgAAD / 2wBDADIiJSwlHzIsKSw4NTI7S31RS0VFS5ltc1p9tZ ++ u7Kfr6zI4f / zyNT / 16yv + v / 9 //////// wfD ///////////// 2wBDATU4OEtCS5NRUZP / zq / O //////////////////////////////////////////////////////// ////////// wAARCAAYAEADAREAAhEBAxEB / 8QAGQAAAgMBAAAAAAAAAAAAAAAAAQMAAgQF / 8QAJRABAAIBBAEEAgMAAAAAAAAAAQIRAAMSITEEEyJBgTORUWFx / 8QAFAEBAAAAAAAAAAAAAAAAAAAAAAP / EABQRAQAAAAAAAAAAAAAAAAAAAAD / 2gAMAwEAAhEDEQA / AOgM52xQDrjvAV5Xv0vfKUALlTQfeBm0HThMNHXkL0Lw / swN5qgA8yT4MCS1OEOJV8mBz9Z05yfW8iSx7p4j + jA1aD6Wj7ZMzstsfvAas4UyRHvjrAkC9KhpLMClQntlqFc2X1gUj4viwVObKrddH9YDoHvuujAEuNV + bLwFS8XxdSr + Cq3Vf + 4F5RgQl6ZR2p1eAzU / HX80YBYyJLCuexwJCO2O1bwCRidAfWBSctswbI12GAJT3yiwFR7 + MBjGK2g / WAJR3FdF84E2rK5VR0YH / 9k = "/></svg>

Kötü amaçlı yazılım ve kimlik avı

Veri URI'si, şüphelenmeyen web kullanıcılarından kullanıcı adlarını ve şifreleri almaya çalışan saldırı sayfaları oluşturmak için kullanılabilir. Ayrıca dolaşmak için de kullanılabilir siteler arası komut dosyası oluşturma (XSS) kısıtlamaları, saldırı yükünü tamamen adres çubuğunun içine yerleştirir ve üçüncü bir tarafın kontrol ettiği tam bir web sitesine ihtiyaç duymak yerine URL kısaltma hizmetleri aracılığıyla barındırılır.[8] Sonuç olarak, bazı tarayıcılar artık web sayfalarının veri URI'larına gitmesini engelliyor.[9]

Referanslar

  1. ^ "Web Sitenizi Hızlandırmak için Veri URI'larını Kullanma". Treehouse Blogu. 27 Mart 2014.
  2. ^ "SingleFile - Chrome Web Mağazası". Chrome Web Mağazası. Alındı 25 Ağustos 2018.
  3. ^ "SingleFile - Firefox için Eklentiler". Firefox Eklentileri. Alındı 25 Ağustos 2018.
  4. ^ Deveria, Alexis (Temmuz 2015). "Kullanabilirmiyim..." Alındı 31 Ağustos 2015.
  5. ^ Masinter, L (Ağustos 1998). "RFC 2397 -" Veri "URL şeması". İnternet Mühendisliği Görev Gücü. Alındı 2008-08-12.
  6. ^ Özgür Ned; Dürst, Martin, eds. (20 Aralık 2013). "Karakter Kümeleri". İnternette Atanan Numaralar Kurumu. Alındı 31 Ağustos 2015.
  7. ^ Berners-Lee, Tim; Fielding, Roy; Masinter, Larry (Ocak 2005). "Tekdüzen Kaynak Tanımlayıcıları (URI): Soysal Sözdizimi". İnternet Mühendisliği Görev Gücü. Alındı 31 Ağustos 2015.
  8. ^ Web sayfası olmadan kimlik avı - araştırmacı bir bağlantının kendisinin nasıl kötü niyetli olabileceğini ortaya koyuyor, Çıplak Güvenlik, Sophos, 31 AUG 2012 https://nakedsecurity.sophos.com/2012/08/31/phishing-without-a-webpage-researcher-reveals-how-a-link-itself-can-be-malicious/
  9. ^ "Veri URL'leri - HTTP | MDN". MDN Web Belgeleri. Mozilla. Alındı 11 Mayıs 2018.