the HTML Purifier smoketest, 'hatalı biçimlendirilmiş' URI'larını bazen bir nitelik daha az çapa etiketi, örneğin geride bırakmak atılır başına
<a href="javascript:document.location='http://www.google.com/'">XSS</a>
olur <a>XSS</a>
... Yanı sıra protokole soyunmuş olması, örneğin
<a href="http://1113982867/">XSS</a>
olur <a href="http:/">XSS</a>
Per se, sorunsuz olsa da, biraz çirkin. Bunun yerine düzenli ifadeler ile bu dışarı atmak için çalışıyor, ben HTML Arıtma kendi kütüphane yetenekleri / enjektör / plug-ins / whathaveyou kullanmak umuyordum.
Point of reference: Handling attributes
Şartlı HTMLPurifier bir attribute kaldırılması kolaydır. Burada kütüphane yöntemi ile HTMLPurifier_AttrTransform
sınıfını sunar confiscateAttr()
strong>.
Ben şahsen başına confiscateAttr()
, I do use an HTMLPurifier_AttrTransform
işlevselliğini kullanmak yok iken this thread target="_blank"
tüm çapa eklemek.
// more configuration stuff up here
$htmlDef = $htmlPurifierConfiguration->getHTMLDefinition(true);
$anchor = $htmlDef->addBlankElement('a');
$anchor->attr_transform_post[] = new HTMLPurifier_AttrTransform_Target();
// purify down here
HTMLPurifier_AttrTransform_Target
tabii, çok basit bir sınıftır.
class HTMLPurifier_AttrTransform_Target extends HTMLPurifier_AttrTransform
{
public function transform($attr, $config, $context) {
// I could call $this->confiscateAttr() here to throw away an
// undesired attribute
$attr['target'] = '_blank';
return $attr;
}
}
O kısmı doğal, bir cazibe gibi çalışır.
Handling elements
Belki HTMLPurifier_TagTransform
de yeterince sert şaşı değilim, ya da yanlış yere (ler) arıyorum, ya da genel olarak bunu anlamakta amn't, ama şartlı kaldırmak için bir yol anlamaya gibi olamaz elements.
Etkisiyle, bir şey söyle:
// more configuration stuff up here
$htmlDef = $htmlPurifierConfiguration->getHTMLDefinition(true);
$anchor = $htmlDef->addElementHandler('a');
$anchor->elem_transform_post[] = new HTMLPurifier_ElementTransform_Cull();
// add target as per 'point of reference' here
// purify down here
İtlaf sınıf confiscateElement()
ability, or comparable, wherein I could check for a missing href
nitelik veya içeriği ile href
niteliği olan bir şey uzanan http:/
.
HTMLPurifier_Filter
Ben bir filtre oluşturabilirsiniz anlıyorum, ama örnekler (Youtube.php ve ExtractStyleBlocks.php) ben gerçekten oldukça kaçınmak istiyorum hangi, bu düzenli ifadeler kullanarak, if it is at all possible olurdum öneririz. Ben HTML Arıtma mükemmel ayrıştırma yetenekleri kullanan bir yerleşik veya yarı-onboard çözüm için umut ediyorum.
null
HTMLPurifier_AttrTransform
maalesef onu kesmiyor bir çocuk sınıfta döndürülüyor.
Herkes herhangi bir akıllı fikir var, ya da ben regexes şaşırıp? :)