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 " ">
<!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; ©right;</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ı | Karakter | Onaltılık referans | Ondalık referans |
---|---|---|---|
quot | " | " | " |
amp | & | & | & |
apos | ' | ' | ' |
lt | > | > |
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 > "Uyarı">
<body>
3 < 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;& ©right;</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 &
kullanın.
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çıklama | Varlık Adı | Varlık Numarası |
---|---|---|---|
kesilmeyen boşluk | |   | |
büyüktür | > | > | |
& | ve | & | & |
" | çift tırnak işareti | " | " |
' | tek tırnak işareti (apostrof) | ' | ' |
¢ | sent | ¢ | ¢ |
£ | pound | £ | £ |
¥ | yen | ¥ | ¥ |
€ | avro | € | € |
© | telif hakkı | © | © |
® | tescilli marka | ® | ® |
₹ | Hint Rupisi | &inr; | ₹ |
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;
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