• 11-02-2020, 15:04:58
    #1
    Selamlar,

    Tamamen son kullanıcı inputları üzerine bir tema geliştiriyorum. Tamamen ajax ile sitede form verilerini serialize() ederek PHP tarafında da

    $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

    kullanıp, integer string'ler için intval kullanmayı es geçmiyorum. Ancak yeni güncellememde son kullanıcılara strong, em gibi html taglerini de açmaya karar verdim.
    bildiğimiz üzere sanitize_textarea_field() komutu tüm tagleri yok ediyor ve bir tag ayıklama ayarı yok. (keza filter_input_array ile sanitize edince de durum aynı, evet allowed tag'a ayarlamaya sahip başka bir varyasyonu var ama XSS saldırılarına karşı tam koruma sağlamadığı bilinen bir şey.)

    wp_kses() ise başka bir boyut. allowed tag ayarı var ancak aptal bir stackoverflow konusunda wp_kses ile sadece strong, italic gibi basit html taglerine açmasına rağmen XSS'e maruz kalan birisini buldum.

    Kafam çok aptala döndü ve HTML Purifier kullanmayı düşünüyorum ancak Wordpress ile HP kullanan birileri varsa performans açısından kayıp yaşayıp, yaşamadıklarını belirtirlerse çok sevinirim.

    Tüm tagler ve attr değerlerini yasaklarken her şey çok kolay. Ancak tag izini işin içine girince karıştım bayağı.

    Yolumu aydınlatacak var mı?
  • 11-02-2020, 15:11:47
    #2
    Üstad bu soruyu anlayan bile azken yardım edebilecek tr'de kaç coder vardır bilemedim şimdi. wordpress geliştiricilerine sormayı denedin mi?
  • 11-02-2020, 15:12:40
    #3
  • 11-02-2020, 15:19:51
    #5
    Selamlar,

    Cevabınız için çok teşekkür ederim.

    sanitize_textarea_field() tüm tagleri de yok eden bir komuttur. Benim yapmaya çalıştığım şey kullanıcı girişini tamamen XSS'e karşı kesip, bold, italic gibi karakterler hariç tüm HTML taglerine de kapatmak.

    keza, sanitize_text_field() tek başına XSS'e karşı yine %100 koruma sağlamıyor maalesef. 2 ay kadar önce acı bir şekilde javascript operator koduyla XSS denemesine maruz kaldım. Eğer ki tinymce kullanmamış olsaydım doc. cookie çekmeye kadar yolu vardı.
  • 11-02-2020, 15:21:17
    #6
    wp_kses_post() kullanın. XSS için script taglarını yüklemeleri lazım. Kendiniz test edebilirsiniz. script taklarını direk engelliyor.
  • 11-02-2020, 15:22:39
    #7
    les adlı üyeden alıntı: mesajı görüntüle
    Üstad bu soruyu anlayan bile azken yardım edebilecek tr'de kaç coder vardır bilemedim şimdi. wordpress geliştiricilerine sormayı denedin mi?
    Metiss adlı üyeden alıntı: mesajı görüntüle
    Yabancı birkaç arkadaşıma sordum benim paranoyakça düşündüğümü ve temel wordpress fonksiyonlarının yeterli geleceğini söylediler. Ama ben buna katılmıyorum. Kolaya kaçayım diye 2 ay sonra XSS'e maruz kalmış bir müşteri de istemiyorum.



    bilimokur adlı üyeden alıntı: mesajı görüntüle
    wp_kses_post() kullanın. XSS için script taglarını yüklemeleri lazım. Kendiniz test edebilirsiniz. script taklarını direk engelliyor.
    Benim de aklıma ilk wp_kses() geldi. Ancak wp_kses() ilk tercihim olmadı asla her zaman intval, sanitize_text_field ve yer yer esc_attr ile işimi gördüm. Konuda yazdığım gibi wp_kses'i araştırınca stackoverflow'da bir kişinin wp_kses ile XSS yediğini gördüm.

    Başka kimseler de wp_kses'in bir ihtmal izin verdiği tag'ler içeresinde manipüle edilmiş olabileceğini söylemişlerdi. Örnek kodlar: https://brutelogic.com.br/blog/advan...pt-injections/

    Araştırmalarım sırasında HTML Purifier'in çok tercih edildiğini farkettim. Şimdiye kadar kullandığım bir library olmadı asla.

    Sizin düşünceniz nedir?
  • 11-02-2020, 15:56:41
    #8
    Bence yazan kişi farklı bir yerden yemiştir. wp_kses() ten olacağını sanmıyorum. İçin rahat edecekse dış kütüphane de kullanabilirsin. Performansa etki etmez.