ToolHub
View All Posts

<, > ve Daha Fazlası

HTML entity'leri, web geliştirmenin en temel ancak sıklıkla yanlış anlaşılan yönlerinden biridir. Tarayıcının HTML işaretlemesi olarak yorumlayacağı karakterleri görüntüleme mekanizmasıdır ve web güvenliğinde kritik bir rol oynar. İster siteler arası betik çalıştırma saldırılarını önlemek için özel karakterleri kodluyor, ister matematiksel semboller görüntülüyor veya içeriğin farklı kodlamalarda doğru şekilde render edilmesini sağlıyor olun, HTML entity'lerini anlamak her web geliştiricisi için gereklidir.

HTML Entity Nedir?

HTML entity, HTML'de tek bir karakteri temsil eden bir karakter dizisidir. Entity'ler ve işareti (&) ile başlar ve noktalı virgül (;) ile biter. Tarayıcı bir entity ile karşılaştığında, render sırasında onu karşılık gelen karakterle değiştirir. Bu mekanizma, aksi takdirde imkansız veya sorunlu olacak karakterleri HTML'inize dahil etmenize olanak tanır.

<) bir etiketi başlatır, büyüktür işareti (>) bir etiketi bitirir, ve işareti (&) ise bir entity referansını başlatır. Bu karakterleri işaretleme yerine görünür içerik olarak görüntülemek istiyorsanız, onları entity olarak kodlamalısınız.

Güvenlik Uyarısı: HTML entity kodlaması, kullanıcı tarafından sağlanan içeriği HTML'de render ederken XSS'e karşı gerekli bir savunmadır, ancak tek başına yeterli değildir. Farklı bağlamlar (HTML gövdesi, özellikler, JavaScript, CSS, URL'ler) farklı kodlama stratejileri gerektirir. Her zaman bağlamınıza uygun kodlama mekanizmasını kullanın.

Yaygın HTML Entity'leri

HTML 2.000'den fazla adlandırılmış entity tanımlasa da, günlük web geliştirmede sadece birkaçı sıklıkla kullanılır. İşte en çok karşılaşacağınız ve kullanacağınız entity'ler:

Beş Zorunlu Entity

KarakterAdlandırılmış EntityOndalık EntityOnaltılık EntityKullanım
&&&&Entity referanslarıyla belirsizliği önlemek için her zaman kodlanmalıdır
<<<<HTML etiket başlangıcı olarak yorumlanmayı önlemek için kodlayın
>>>>HTML etiket sonu olarak yorumlanmayı önlemek için kodlayın
""""Özellik değerlerinden çıkılmasını önlemek için kodlayın
''''Tek tırnaklı özellik değerlerinden çıkılmasını önlemek için kodlayın

Yaygın Sembol Entity'leri

KarakterAdlandırılmış EntityAçıklama
©©null
nullTelif hakkı sembolü®
®nullnull
Tescilli marka sembolü
nullnullMarka sembolü
null
nullEm tire
nullnull
En tire
nullnullMadde işareti

Sayısal ve Adlandırılmış Entity'ler

HTML entity'leri iki biçimde gelir: adlandırılmış ve sayısal. Aralarındaki farkı anlamak, her durumda doğru entity'yi seçmenize yardımcı olur.

Adlandırılmış Entity'ler

< küçüktür işaretini, © ise telif hakkı sembolünü temsil eder. Adlandırılmış entity'ler daha okunabilir ve hatırlanması daha kolaydır, bu da HTML kaynak kodunuzun bakımını kolaylaştırır. Ancak, adlandırılmış entity'ler yalnızca sınırlı bir karakter kümesi için mevcuttur — yaklaşık 2.000, oysa Unicode'da 140.000'den fazla karakter vardır.

Sayısal Entity'ler

Sayısal entity'ler, Unicode kod noktasına göre bir karaktere referans verir. İki biçimde gelir: ondalık ve onaltılık. Ondalık sayısal entity'ler &#NNN; biçimini kullanır, burada NNN ondalık kod noktasıdır. Onaltılık entity'ler &#xHHH; biçimini kullanır, burada HHH onaltılık kod noktasıdır. Örneğin, telif hakkı sembolü © (ondalık) veya © (onaltılık) olarak yazılabilir.

Sayısal entity'ler herhangi bir Unicode karakterini temsil edebilir, bu da onları adlandırılmış entity referansı olmayan karakterler için vazgeçilmez kılar. Nadir CJK karakterleri, tarihi yazı karakterleri veya adlandırılmış entity'si olmayan emoji'leri görüntülemeniz gerekiyorsa, sayısal biçimi kullanmalısınız.

Hangisi Ne Zaman Kullanılır

HTML Entity'leri Ne Zaman Kullanılır

Entity'leri ne zaman kullanacağınızı bilmek, nasıl kullanacağınızı bilmek kadar önemlidir. İşte entity'lerin gerekli veya faydalı olduğu başlıca senaryolar:

1. Ayrılmış Karakterleri Görüntüleme

< olarak yazmalısınız. Çıplak bir < yazarsanız, tarayıcı bunu bir HTML etiketinin başlangıcı olarak ayrıştırmaya çalışır, bu da sayfa düzeninizi bozabilir veya güvenlik açıkları oluşturabilir.

2. Belirsiz Ve İşaretini Önleme

Bir harf ve noktalı virgül tarafından takip edilen ve işareti her zaman bir entity referansı olarak yorumlanır. İçeriğinizde bir entity'nin parçası olmayan bir ve işareti varsa (örneğin 'Tom & Jerry'de), bunu & olarak kodlamalısınız. Kodlanmamış ve işareti ve ardından bir entity adıyla eşleşen metin, yanlış kod çözülecektir. Örneğin, kodlanmamış 'AT&T', tarayıcı &T'yi bir entity referansı olarak yorumlarsa 'AT&T'ye dönüşebilir (&T geçerli bir entity olmasa da, bu davranış teknik olarak hala hatalıdır).

3. Klavye Dışı Karakterleri Dahil Etme

Em tire, telif hakkı işareti ve matematiksel operatörler gibi karakterler, standart klavyede yazılması zor olabilir. Entity'ler, editörünüzün giriş yöntemine veya karakter haritasına güvenmeden bu karakterleri dahil etmenin güvenilir bir yolunu sağlar. Örneğin, — yazmak genellikle klavyede em tire karakterini bulmaktan daha kolaydır.

4. Bölünemez Boşluk

  entity'si, tarayıcının o konumda satır sonu yapmasını önleyen bölünemez bir boşluk oluşturur. Bu, '10 kg', 'Bölüm 3' veya satırlara bölünmemesi gereken marka adları gibi ilgili kelimeleri aynı satırda tutmak için çok önemlidir. Ayrıca, CSS'in uygun olmadığı düzenlerde görsel boşluk oluşturmak için de yaygın olarak kullanılır.

Güvenlik Etkileri: XSS Koruması

HTML entity kodlaması, siteler arası betik çalıştırma (XSS) saldırılarına karşı en önemli savunma hatlarından biridir. XSS, bir saldırgan diğer kullanıcıların görüntülediği bir web sayfasına çalıştırılabilir kod enjekte edebildiğinde gerçekleşir. Entity kodlaması, tehlikeli karakterleri güvenli entity eşdeğerlerine dönüştürerek bunu önler.

Entity Kodlama XSS'i Nasıl Önler

ararsa ve sayfa kodlama olmadan render edilirse, tarayıcı bu betiği çalıştırır. Ancak, çıktı entity kodlamasından geçirilirse, <script>alert('xss')</script> haline gelir ve tarayıcı bunu kod çalıştırmak yerine gerçek metin olarak görüntüler.

Bağlama Özel Kodlama Kuralları

Entity kodlaması HTML içerik ve özellik bağlamlarında çalışır, ancak farklı bağlamlar farklı kodlama stratejileri gerektirir: