"Güvenli"

4 Cevap php

Kamu yorumların kullanmak için uygun markdown bir PHP uygulama var mı?

Temelde sadece markdown sözdizimi bir alt kümesini (kalın, italik, bağlantıları, blok-tırnak, kod blokları ve listeler) izin vermeli ve tüm inline HTML dışında şerit (veya belki bu kaçış?)

Ben bir seçenek normal bir markdown ayrıştırıcı kullanmak, ve bir HTML sanitasyonunda aracılığıyla çıkışını çalıştırmak için sanırım, ama bunu yapmanın daha iyi bir yolu var ..?

Biz sitenin geri kalanı için ekstra PHP markdown kullanıyorsanız, yani biz zaten ikincil bir ayrıştırıcı (dipnot desteği gibi şeyler gereksiz olduğundan non-"Extra" versiyonu) kullanmak gerekiyor .. O da güzel ayrıştırma sadece görünüyor *bold* metin ve sahip her <b>bold</b> metin üretmek ve biz istemiyoruz bit şerit çalışırken daha, &lt;a href="etc"&gt; kaçtı ..

Ayrıca, ilgili not, biz "ana" site için KİS denetimini kullanarak konum, ama yorumlar için, ne diğer seçenekleri vardır? KİS javascript önizleme güzel, ancak (başka türlü birisi sunacak ve onların çalışma markdown olacak "ara vermek", o kadar üzerinde görüntüleri ve olamaz) PHP markdown işlemci olarak aynı "kısırlaştırma" gerekir

Dan showdown.js sözdizimi başlığı / görüntü kaldırmak için> HTML santiser yöntem ve düzenleme KİS - - Şu anda planım PHP-markdown kullanmak için ama bu daha önce sayısız kez yapılmış gibi görünüyor ..

Temelde:

  • PHP bir "güvenli" markdown uygulama var mı?
  • Aynı seçenekleri kolayca devre dışı olabilecek bir HTML / javascript markdown editörü var mı?

Update: Ben sadece HTML Purifier ile markdown() çıkışını çalışan sona erdi.

Bu şekilde Markdown render (seferde render ve sterilizasyon hem yapmaya çalışıyoruz değil), ve daha esnek, daha güvenli (birden sterilize olabilir (çoğunlukla iki-değiştirilmemiş kodu üsleri) çok daha kolaydır çıkış sanitisation, ayrı idi seviyeleri) güvenilir içerik için daha gevşek bir yapılandırma ve kamu yorumların için çok daha sıkı bir sürümünü söylüyor

4 Cevap

PHP Markdown bir dezenfektanı seçeneği vardır, ama her yerde reklamı görünmüyor. markdown.php (sürüm 1.0.1m line 191 başlar) içinde Markdown_Parser sınıfının üstünde bir göz atın. Biz hatları 209-211 ilgileniyorsanız:

# Change to `true` to disallow markup or entities.
var $no_markup = false;
var $no_entities = false;

Eğer true, biçimlendirme ve kuruluşlar için bu değiştirirseniz, sırasıyla, öncelenmesi gerekir ziyade kelimesi kelimesine takılmış. Orada (yapıcısı aracılığıyla örneğin) bu değiştirmek için herhangi bir yerleşik bir yol olarak görünmüyor, ama her zaman bir tane ekleyebilirsiniz:

function do_markdown($text, $safe=false) {
    $parser = new Markdown_Parser;
    if ($safe) {
        $parser->no_markup = true;
        $parser->no_entities = true;
    }
    return $parser->transform($text);
}

Yukarıdaki işlevi daha ziyade yavaş tarafında biraz olabilir, o yüzden sağlanan Markdown fonksiyonu (satır 43-56) gibi önbelleğe göre her vadede yeni bir çözümleyici oluşturur unutmayın.

JavaScript Markdown Editörü Hipotezi:

  • Showdown dayalı bir JavaScript odaklı Markdown Editor, örneğin kullanın
  • Istenmeyen öğeleri için Araç Çubuğu tüm simgeleri ve görsel ipuçlarını kaldır
  • Temiz-up sunulması üzerine istenmeyen biçimlendirme bir JavaScript filtresi kurmak
  • Test ve bilgisayarınızda yerel olarak tüm JavaScript değişiklikleri ve filtreleri sertleşmesine
  • Sunucu tarafında aynı yakalamak için, PHP teslim script bu filtreleri ayna.
  • Yardım / Tutorials istenmeyen öğeleri tüm başvuruları kaldırın

Ben JavaScript Markdown editörü oluşturduk, ancak gelişmiş özelliklere sahiptir. O zaman ve SVN revizyonlar büyük bir yığın aldı. Ama ben buna izin HTML sınırlamak için bir Markdown editörü değiştirmek için o zor olacağını sanmıyorum.

Kendi ayrıştırıcı yazmak için arıyorsanız, neden BBCode mimarisini kullanan.

Senin / (kullanıcı) comments göndererek zaman evet orada diğer fonksiyonlar, mysql_escape_real_string ile text () sterilize etmek gerekiyor ama bu herhangi bir JS iğneleri duracaktır.

Nasıl kullanıcı htmlspecialchars çalışan hakkında markdown aracılığıyla işleniyor önce, girdi girdi? Bu tehlikeli bir şey kaçmak, ancak markdown anlıyor her şeyi terk etmelidir.

Ben bu işe yaramaz bir durumda düşünmek çalışıyorum ama elin kapalı bir şey düşünemiyorum.