'Katı'? Ben tüm HTML-enjeksiyon saldırıları izin içine kandırmak kolay dikkatsiz regexen gevşek bir koleksiyon, gibi görünüyor all.they bir katı BBcode ayrıştırıcı bulmadım.
Örneğin yayınlanan bir John W açıkça dahil olmak üzere birçok etiketleri ile istismar edilebilir:
[img]xxx" onerror="alert('JS injection!')[/img]
artı javascript:
ve diğer tehlikeli URL'ler, kaçmak için başarısız verir &
, (dahil %
!) yanlışlıkla olmamalı (diğerleri izin ederken çok URL karakterler izin vermiyor Yazar oldukça dize ters bölü-kaçış var ne yaptığını anlamış değil) ve misnested etiketleri veya yanlışlıkla başka etiketleri 'nitelikleri içine çekilir etiketleri izin vermemek için başarısız ... temelde güvensiz bir karmaşa ve bu par bbcode ayrıştırıcıların ile ders.
Yararsızdır cevap için özür dilerim (bir yorum sığmayacak kadar büyüktü).
ETA Yorum re: Ah de sadece benzer, tam bir bbcode modül değil. Her dönüşüm için daha sonra, &
için bir vekil, <
için 02 ve 03 için >
şeklinde çizgiler, uzaklaştırıldı, mevcut kontrol karakterleri ve ardından el byte 01 ile bölünmüş adım (\x02[^\x03]*\x03)
üzerine re.split kullanılan ve 'içteki' sonra çalışma linebreaks ve emotes gibi değiştirmeler, dışa doğru olsa bağlantıları ve italik görüntüleri / ile başlayan, her saniye (non-tag) kısmında yedek regex koştu gider olarak kalın biçimlendirme, \x02html tags\x03
ekleyerek. Sonra nihayet HTML-kodlamak &<>
ile kontrol kodlarını değiştirin &<>
. Bu basit regex tabanlı biçimlendirme güvenlik açıklarının büyük kaynağı olan, kendini işaretlenmiş alıyorum biçimlendirme durur.
Düşününce gel, ben de gerçek bir Python bbcode ayrıştırıcı yazdın, ama sadece hızlı bir uyumluluk kesmek gibi; tam bbcode tüm yeteneklerini sunmuyor. Özellikle, herhangi bir başka aralık etiketi içinde (yakın-etiketi ile etiketi yani) herhangi bir aralık etiketi yuvalama izin verilmiyor. Eğer herhangi bir etiketi maç ve bir yedek işlev etiket adına göre yerine nasıl karar için bir tek-geçişli regex kullanmak gibi bu, kabul edilebilir olduğunu, uygulamak için nispeten kolaydır. örn.:
\[ (i|b|color|url|somethingelse) \=? ([^]]+)? \] (?: ([^]]*) \[\/\1\] )
(Boşluk sadece okunabilmesi için yani bu bir VERBOSE
regex olduğunu. Gibi herhangi bir regex kadar hiç okunabilir.)
Yuvalama Çıkarma büyük köşe vakalarının sayısını kolaylaştırır.