Ana içeriğe geç

XML Entities

Entities, XML içeriklerinde tutarlılığı sağlamak için kullanılabilen değişkenlerdir. Örnek,

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE note [
<!ENTITY nbsp "&#xA0;">
<!ENTITY writer "Yazar: Donald Duck.">
<!ENTITY copyright "Telif Hakkı: W3Schools.">
]>

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Hatırlatma</heading>
<body attr="&writer;">Bu hafta sonu beni unutma!</body>
<footer>&writer;&nbsp;&copyright;</footer>
</note>

Kendi varlıklarınızı tanımlamak için DOCTYPE kullanılabilir. FXP varsayılan olarak aşağıdaki XML varlıklarını destekler:

Varlık adıKarakterOnaltılık referansOndalık referans
quot"&#34;&#x22;
amp&&#38;&#x26;
apos'&#39;&#x27;
lt&#62;&#x3E;
ipucu

Varlık tanımlaması yaparken dikkat edilmesi gereken en önemli nokta, yazılışların doğru olduğundan emin olmaktır.

Ancak, varlık işleme, ayrıştırıcının performansını büyük ölçüde etkileyebileceğinden, bunu devre dışı bırakmak için processEntities: false kullanabilirsiniz.

XML Builder varsayılan varlık değerlerini çözer. Örnek:

const jsObj = {
"note": {
"@heading": "Hatırlatma > \"Uyarı",
"body": {
"#text": " 3 < 4",
"attr": "Yazar: Donald Duck."
},
}
};

const options = {
attributeNamePrefix: "@",
ignoreAttributes: false,
// processEntities: false
};
const builder = new XMLBuilder(options);
const output = builder.build(jsObj);

Çıktı:

<note heading="Hatırlatma &gt; &quot;Uyarı">
<body>
3 &lt; 4
<attr>Yazar: Donald Duck.</attr>
</body>
</note>

Yan Etkiler

FXP, değerlerde & bulunan varlıkları sessizce göz ardı etmez, ancak aşağıdaki yan etkiler mümkündür.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE note [
<!ENTITY nbsp "writer;">
<!ENTITY writer "Yazar: Donald Duck.">
<!ENTITY copyright "Telif Hakkı: W3Schools.">
]>

<note>
<heading>Hatırlatma</heading>
<body attr="&writer;">Bu hafta sonu beni unutma!</body>
<footer>&writer;&&nbsp;&copyright;</footer>
</note>

Çıktı:

 {
"note": {
"heading": "Hatırlatma",
"body": {
"#text": "Bu hafta sonu beni unutma!",
"attr": "Yazar: Donald Duck."
},
"footer": "Yazar: Donald Duck.Yazar: Donald Duck.Telif Hakkı: W3Schools."
}
}

Böyle bir durumla başa çıkmak için XML belgesinde & yerine &amp; kullanın.

tehlike

XML belgelerinde & karakterini yanlış kullanmak, beklenmedik sonuçlar doğurabilir.

Saldırılar

Varlık işleme nedeniyle aşağıdaki saldırılar mümkündür:

  • Hizmet Engelleme Saldırıları (Denial-of-Service Attacks)
  • Klasik XXE
  • Gelişmiş XXE
  • Sunucu Tarafı İstek Sahteciliği (SSRF)
  • XInclude
  • XSLT

FXP değerlerde & olan varlıklara izin vermediğinden, yukarıdaki saldırılar etkili olmamalıdır.

HTML Varlıkları

Aşağıdaki HTML varlıkları varsayılan olarak ayrıştırıcı tarafından desteklenmektedir, htmlEntities: true olduğunda.

SonuçAçıklamaVarlık AdıVarlık Numarası
kesilmeyen boşluk&nbsp;&#160;
büyüktür&gt;&#62;
&ve&amp;&#38;
"çift tırnak işareti&quot;&#34;
'tek tırnak işareti (apostrof)&apos;&#39;
¢sent&cent;&#162;
£pound&pound;&#163;
¥yen&yen;&#165;
avro&euro;&#8364;
©telif hakkı&copy;&#169;
®tescilli marka&reg;&#174;
Hint Rupisi&inr;&#8377;

Ayrıca, sayı karakter referansları da desteklenmektedir. Hem ondalık (num_dec) hem de onaltılık (num_hex).

FXP'nin gelecekteki sürümünde, ELEMENT gibi DOCTYPE'un daha fazla özelliğini destekleyeceğiz, bir varlık için içerik okuma vb.

Harici Varlıklar

Harici varlıkları DOCTYPE kullanmadan ayarlayabilirsiniz.

const xmlData = `<note>&unknown;&#xD;last</note> `;

const parser = new XMLParser();
parser.addEntity("#xD", "\r"); // &unknown;\rlast
let result = parser.parse(xmlData);

Bu şekilde varsayılan varlıkları geçersiz kılabilirsiniz.

> Sonraki: HTML Belgesi Ayrıştırma