HTML Varlık Kodlayıcı ve Çözücü
Özel karakterleri HTML varlıkları olarak kodlamak için metin yapıştırın ya da HTML varlıklarını okunabilir metne çözmek için varlık içeren HTML yapıştırın. Adlandırılmış varlıklar (&, <, ©), ondalık sayısal (©) veya onaltılık (©) kodlama arasında seçin. Maksimum uyumluluk için tüm ASCII olmayan karakterleri isteğe bağlı olarak kodlayın.
Nasıl çalışır
HTML varlıkları nedir?
HTML varlıkları, HTML'de özel anlamı olan veya doğrudan yazılamayan karakterleri temsil etmek için kullanılan özel metin kodlarıdır. En önemlileri HTML sözdiziminde ayrılmış beş karakterdir: & (ve işareti) → &, < (küçüktür) → <, > (büyüktür) → >, " (çift tırnak) → " ve ' (tek tırnak) → '. Bu karakterler kodlanmadan metin içeriğinde görünürse, tarayıcı bunları HTML işaretlemesi olarak yorumlayabilir ve bu durum işleme hatalarına veya güvenlik açıklarına yol açabilir.
HTML varlıkları üç biçimde gelir: adlandırılmış varlıklar açıklayıcı bir ad kullanır (© © için, € € için), ondalık sayısal karakter referansları bir kod noktası numarası kullanır (© © için) ve onaltılık karakter referansları bir hex kodu kullanır (© © için). Üç biçim de eşdeğerdir — tarayıcı, hangi biçim kullanılırsa kullanılsın aynı karakteri işler. Adlandırılmış varlıklar en okunabilir olanıdır; sayısal varlıklar, herhangi bir Unicode karakteri için çalıştıklarından en evrensel olanıdır.
HTML varlıkları ne zaman kodlanmalı
Metin içeriğinde veya özellik değerlerinde göründüklerinde beş ayrılmış HTML karakterini (&, <, >, ", ') en azından kodlamanız gerekir. Bunları kodlamamak, Cross-Site Scripting (XSS) güvenlik açıklarının bir kaynağıdır: kullanıcı girişi kodlanmadan HTML'ye eklenirse, bir saldırgan script etiketleri veya olay işleyicileri enjekte edebilir. React, Vue ve Angular gibi modern çerçeveler varsayılan olarak HTML'yi otomatik olarak kodlar — innerHTML, manuel kodlamanın hâlâ kritik olduğu ana istisnadır.
Gerekli beş karakterin ötesinde, UTF-8'i güvenilir şekilde işlemeyen ortamlar için ASCII olmayan karakterleri de kodlamak isteyebilirsiniz: e-posta HTML'si, eski CMS sistemleri veya maksimum uyumluluk için belgeler. «Tüm ASCII olmayanları kodla» seçeneği, kod noktası 127'nin üzerindeki her karakteri bir sayısal varlığa dönüştürerek çıktının saf ASCII olmasını sağlarken işlendiğinde görsel görünümü korur. Modern UTF-8 HTML dosyaları için ASCII olmayan karakterleri kodlamak isteğe bağlıdır — charset'i doğru bildirmek yeterlidir.
HTML varlıkları vs URL kodlama vs Base64
HTML varlıkları, URL kodlama (yüzde kodlama) ve Base64, farklı bağlamlar için üç farklı kodlama şemasıdır. HTML varlıkları (& gibi) HTML belgelerinde karakterleri güvenli bir şekilde temsil etmek için kullanılır. URL kodlama (& için %26 gibi), URL'lerde özel anlam taşıyan karakterleri sorgu dizelerinde ve URL'lerde kodlamak için kullanılır. Base64, rastgele ikili verileri ASCII metni olarak kodlar ve veri URI'leri ile e-posta ekleri için kullanılır.
Yaygın bir hata, bunları karıştırmaktır: HTML içeriği için URL kodlaması veya URL'ler için HTML kodlaması kullanmak. Örneğin, URL sorgu dizesindeki bir ve işareti, HTML varlık kodlaması (&) değil yüzde kodlama (%26) gerektirir. Bir HTML özelliğine gömülecek bir URL oluşturuyorsanız, ikisine de ihtiyacınız vardır: URL kodlamalı form özelliğe girer ve özellik değerinin kendisi HTML olarak kodlanır. Hangi bağlamda hangi kodlamanın uygulandığını anlamak, çift kodlama hatalarını ve güvenlik sorunlarını önler.
Sık sorulan sorular
›Ve işareti (&) için HTML varlığı nedir?
Ve işareti için HTML varlığı &'dir — kelime anlamıyla &, a, m, p ve noktalı virgül karakterleridir. HTML kaynağına & yazdığınızda, tarayıcı tek bir & karakteri görüntüler. Bu kodlama, bir ve işareti metin içeriğinde veya özellik değerlerinde göründüğünde zorunludur; çünkü kodlanmamış bir &, ayrıştırıcının yorumlamaya çalıştığı bir varlık dizisini başlatır.
›Telif hakkı (©) için HTML varlığı nedir?
Telif hakkı © simgesinin üç eşdeğer HTML varlığı vardır: adlandırılmış ©, ondalık sayısal © ve onaltılık ©. Hepsi aynı © karakterini işler. Adlandırılmış varlıklar, mevcut olduğunda en okunabilir seçenektir. Modern UTF-8 HTML için, HTML dosyanız charset=utf-8 bildirdiği sürece © karakterini doğrudan da yazabilirsiniz — varlık gerekmez.
›HTML'de tırnakları kodlamam gerekiyor mu?
Çift tırnaklar ("), çift tırnaklarla ayrılmış HTML özelliklerinin içinde " olarak kodlanmalıdır: <input value=""">. Tek tırnaklar ('), tek tırnaklı özellikler içinde ' veya ' olarak kodlanmalıdır. Eleman metin içeriğinde (etiketler arasında) her iki tırnak karakteri de kodlanmadan görünebilir, ancak kodlamak zararlı değildir. Her bağlamda her ikisini de tutarlı şekilde kodlamak en güvenli yaklaşımdır.
›Adlandırılmış ve sayısal varlıklar arasındaki fark nedir?
Adlandırılmış varlıklar açıklayıcı bir kelime kullanır (©, €, ♥) ve HTML spesifikasyonunda tanımlanmıştır — her Unicode karakterinin adlandırılmış bir varlığı yoktur. Sayısal varlıklar, Unicode kod noktasını ondalık (€ € için) veya onaltılık (€ € için) olarak kullanır. Sayısal varlıklar herhangi bir Unicode karakteri için çalışırken, adlandırılmış varlıklar yalnızca bir alt kümeyi kapsar. Her ikisi de tarayıcılarda aynı şekilde işlenir.
›HTML'de ASCII olmayan karakterleri kodlamalı mıyım?
Genellikle hayır. HTML belgeniz UTF-8 kodlamasını (meta charset=utf-8) bildiriyorsa ve UTF-8 olarak kaydedildiyse, ASCII olmayan karakterleri doğrudan yazabilirsiniz: é, ñ, 中, 🎉. Bunları varlık olarak kodlamak isteğe bağlıdır ve kaynağı okunması daha zor hale getirir. İstisna, kodlamayı koruyamayacak bağlamlarda HTML gönderildiği durumlardır: e-posta mesajları, eski API'ler veya ASCII olmayan baytları bozan sistemler. Bu durumlarda, tüm ASCII olmayanları sayısal varlıklar olarak kodlamak, çıktının saf güvenli ASCII olmasını sağlar.
›XSS nedir ve HTML varlıkları bunu nasıl önler?
Cross-Site Scripting (XSS), bir saldırganın sunucunun kodlamadan HTML'ye yansıttığı metin ekleyerek bir web sayfasına kötü amaçlı JavaScript enjekte ettiği bir güvenlik açığıdır. Örneğin, kullanıcı girişi <script>alert('xss')</script> doğrudan bir sayfaya eklenirse, tarayıcı betiği çalıştırır. Girişi düzgün şekilde kodlarsanız — < karakterini <'ye ve > karakterini >'ye dönüştürürseniz — tarayıcı metni bir etiket olarak ayrıştırmak yerine olduğu gibi görüntüler. HTML varlık kodlama, yansıtılan ve depolanan XSS'e karşı birincil savunmadır.
›Neden bu aracın listesinde görünmüyor?
Bu araç, adlandırılmış varlıklara sahip karakterleri kodlar. Kırılmaz boşluk (Unicode U+00A0), gerçek kırılmaz boşluk karakterini yazdığınızda olarak kodlanır (bazı sistemlerde Alt+Boşluk ile ekleyebilir veya karakter haritalarından kopyalayabilirsiniz). Normal boşluk (U+0020, boşluk tuşu), güvenli bir ASCII karakteri olduğu için kodlanmaz. Çıktınızda özellikle gerekiyorsa, girişe bir kırılmaz boşluk karakteri yazın veya yapıştırın.
›Bunu kullanıcı girişinde HTML enjeksiyonunu önlemek için kullanabilir miyim?
Evet — kullanıcı tarafından sağlanan metni HTML'ye eklemeden önce kodlamak, HTML enjeksiyonu ve XSS'e karşı temel savunmalardan biridir. En azından beş ayrılmış karakteri kodlayın: &, <, >, ", '. Bu araç beşini de kodlar. Ancak, yalnızca kodlama tam bir güvenlik çözümü değildir: uygun Content Security Policy başlıkları, özniteliklerdeki javascript: URL'lerinin dikkatli işlenmesi ve çerçeve düzeyinde korumalar da gereklidir. Üretim uygulamaları için, manuel kodlama yerine güvenlik için tasarlanmış sunucu tarafı bir kitaplık kullanın (OWASP Java Encoder, istemci tarafı için DOMPurify vb.).
İlgili araçlar
Son güncelleme: