Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Tartışma : Text editor (ckeditor,tinymce,fckeditor....) gelen verinin güvenliği

Konu, 'PHP' kısmında mc_cree tarafından paylaşıldı.

  1. mc_cree

    mc_cree Üye

    Kayıt:
    22 Şubat 2009
    Mesajlar:
    226
    Beğenilen Mesajlar:
    0
    Şehir:
    Konya
    Merhabalar;

    Text editör kulanan arkadaşlar post ve çıktı güvenliği için neler yapıyorsunuz.
    Şimdi benim anlamadığım olay şu

    PHP:
    mysql_real_escape_string()
    nl2br();
    striptag
    ... 
    bu önlemleri aldıktan sonra çıktı yaparken mecburen style ve class olaylarına izin vermek için
    <," gibi tagları düzeltmek gerekiyor. bu durumda tagın içinde javascript kodu varsa buda aktif oluyor.

    bu konu hakkında görüşlerinizi merak ediyorum.Girdi ve çıktı konusunda örnek kodlarınızı paylaşırsanız sevinirim.
     
  2. Raiden

    Raiden self.life.start()

    Kayıt:
    11 Ekim 2004
    Mesajlar:
    4,392
    Beğenilen Mesajlar:
    0
    Şehir:
    /home/Raiden
    xss clean kütüphaneleri kullanabilirsin. bakınız -> html pruifier
     
  3. mc_cree

    mc_cree Üye

    Kayıt:
    22 Şubat 2009
    Mesajlar:
    226
    Beğenilen Mesajlar:
    0
    Şehir:
    Konya
    oldukça yararlı teşekkür ederim. uzun zamandır bu konuyu düşünüyordum,bu arada sitenizide takip ediyorum. Güzel paylaşımalr var tebrikler.Şu andada xss tanıtımına bakıyorum:)
     
  4. timemrah

    timemrah Daimi Üye

    Kayıt:
    7 Mart 2010
    Mesajlar:
    915
    Beğenilen Mesajlar:
    11
    Meslek:
    Web Geliştirici
    Şehir:
    Tekirdağ / Çorlu
    Bana göre kullandığınız veri içersinde HTML kodlarını ayrı , içeriği ayrı kullanırsanız bu probleminiz ortadan kalkar.

    Demek istediğim veri tabanına veriyi direk html kodlarıyla kayıt etmemeniz. Html kodlarını ayrıca, içeriği ayrıca kayıt ederseniz hem güvenlik sorununuz daha kontrollü ve daha iyi şekilde çözülmüş hemde yaşadığınız problem ortadan kalkmış olur.
     
  5. mc_cree

    mc_cree Üye

    Kayıt:
    22 Şubat 2009
    Mesajlar:
    226
    Beğenilen Mesajlar:
    0
    Şehir:
    Konya

    kayıtta bir problem yok problem çıktıda style ve biçimlendirmeye izin verdiğiniz takdirde java script kodlarına da izin veriyorsunuz.
     
  6. timemrah

    timemrah Daimi Üye

    Kayıt:
    7 Mart 2010
    Mesajlar:
    915
    Beğenilen Mesajlar:
    11
    Meslek:
    Web Geliştirici
    Şehir:
    Tekirdağ / Çorlu
    ANlattığım şekilde izin vermemeniz mümkün. Çünkü yapıları ayrı ayrı ele alacaksınız... Konu aslında çok aha detaylı anlatılmalı. Sanırım dediğim şey çok iyi anlaşılmadı. Ben sadece kayıt etmenizden bahsetmedim aslında. Veriyi kullanma şeklinden bahsetmek istedim.

    Eğerki bir çıktıyı kod tiplerini ayırarak işleyebilir ve kullanabilirseniz o zaman sorun ortadan kalkar. Çünkü javascript kodu ayrı, css kodu ayrı, saf string ayrı bir şekilde işlenip nihayetinde sonunda birleştirilip ekrana yansıtlır...

    Daha doğrusu bunu en iyi anlatamın yolu bir önrekle açıklamak. Siz bana yaşadığınız soruan dair bast bir örnek yazın. bende bunun üstünde demek istediğimi göstereyim...
     
  7. mc_cree

    mc_cree Üye

    Kayıt:
    22 Şubat 2009
    Mesajlar:
    226
    Beğenilen Mesajlar:
    0
    Şehir:
    Konya
    Kod:
     
    <span class="deneme" onclick="alert('Deneme')" >  Text editörden gelen veri </span>
    
    text editörden gelen bu veriyi javascript kodu haricindeki herşey çalışacak şekild ekaydedip ekrana bastırmak istiyorum.

    Not : @Raiden 'in önerdiği sayfa sorunumu çözdü.
     
  8. timemrah

    timemrah Daimi Üye

    Kayıt:
    7 Mart 2010
    Mesajlar:
    915
    Beğenilen Mesajlar:
    11
    Meslek:
    Web Geliştirici
    Şehir:
    Tekirdağ / Çorlu
    Sorun çözülmedi diye cevaplamadım zaten.. Maksat kafa yormak ve alternatif çözümler üretmek. Ama ben sizin dediğinizi yanlış anlamışım. Neyseki şu anda fark ettim.

    Ben olsaydım kendim bir tarama programı yazardım.
    1. si Konunun en başında dediğiniz gibi < ve " taglarını düzeltirdim.
    2. si <script> </script> taglarını ve arasını yok ederdim.
    3. sü HTML içersinde <> tagları arasına yazılabilecek bütün kodları bir diziye kayıt eder, text editore girilenleri kontrol ederdim. Burada girilecek value, name, id gibi verilerin içerikleri değişkenlik gösterebilmesine dikkat ederdim. Daha ayrıntılar elbette vardır. Kabataslak yazıyorum.
    3. İncelemdim ama sanırım size verilen link bunun hazır versiyonu :), ama ben kesinlikle kendim yazardım...
     
  9. Raiden

    Raiden self.life.start()

    Kayıt:
    11 Ekim 2004
    Mesajlar:
    4,392
    Beğenilen Mesajlar:
    0
    Şehir:
    /home/Raiden
  10. mc_cree

    mc_cree Üye

    Kayıt:
    22 Şubat 2009
    Mesajlar:
    226
    Beğenilen Mesajlar:
    0
    Şehir:
    Konya
    İlginiz için teşekkürler.Konuyu zaten kendim yazamadığım için açtım.Sizin bahsettiğiniz mantıkla 3 gündür uğraşıyorum olmuyor.Text editor kullanmadınız sanıyorum daha önce.
    bu bahsettiğim 3-5 kod'la yapılabilicek birşey değil.Sıradan post & kayıt & çıktı değil söylediğim.Text editorden gelen biçimli tagları göstermek.
    kodu yazsanız performansı sağlayamazsınız.Sayfa çok yavaş açılır tahminimce ayrıca çok fazla çelişki var.

    örneğin:

    <span class="deneme" onclick="alert('Deneme')" >
    [CODE_]
    <script>
    kodlar..
    </script>
    <form id="inputs" method="post" enctype="multipart/form-data" name="inputs">
    <input type="text" name="pictures" />
    <input onclick="document.write('aaaaa')" type="button" />

    </form> [CODE_] </span>

    şu kodun güvenli bir şekilde çıktısını performansı etkilemeden almak.

    aynen buradaki gibi kısa ve etkili :)
    http://ysfkc.com/php/xss-filter-uygulamasi.html
     
  11. timemrah

    timemrah Daimi Üye

    Kayıt:
    7 Mart 2010
    Mesajlar:
    915
    Beğenilen Mesajlar:
    11
    Meslek:
    Web Geliştirici
    Şehir:
    Tekirdağ / Çorlu
    Gayet güzel yazmış arkadaş işte. Ben zaten sana kesin bir proje ile gelmedim :) Elbette üstünde düşünmek lazım.

    Yazamadığınızı düşünmedim açıkcası... Uğraşmadığınızı düşündüm. Özür dilerim... Yazılmayacak bir kod değil aslında ki arkadaş yazış. Demekki daha tecrübeye ihtiyacınız var. 3 gün kafa yorarsınız 5 gün yorarsınız belki 7. günde çözüme ulaşırsınız. bu bazen bazı konular için aylar alabiliyor. Bazense düşünmediğiniz bir anda aklınıza çözüm algoritması gelebilior :)

    Bir keresinde hiç unutmuyorum bir filitre yazıyordum saat sabah 5. üstüne üstlük 2 gündür de uyumamıştım. Filitreyi çalıştırabilmek için aslında henüz o anda keşfetmediğim recursive fonksiyon mantığını kullanmam gerekiyordu. 7 saat sonrasında uykusuzluk başıma vurmuşken saçma sapan bir algoritma ile tam anlamıyla istediğim gibi çalışmasa da makul bir seviyede istediğimi yapan filitreyi yazdım. Ama ciddi anlamda kod yazmıştım.

    Aradan 4 gün geçti, birden bire yazdığım filitreyi açmak istedim kodlarına bakmak istedim. Çünkü kafamda bir ampül yanmıştı :) Çok ilginçtir hissedersin ama tam olarak bilemezsin ya işte o his. Kodları açtım ve 30 dk. kadar kodları yukarı aşağı süzdüm. Tabi uykum yok bu arada kafam dinç :). Ve sonrasında tam istediğim şeyi hemde çok daha az işlemle ve çok daha kısa yazabileceğimi farkettim. Ve işte o anda recursive fonksiyonu keşfettim. Tabiki bunun bir adı olduğunu ve bunun bir kullanım yöntemi olduğunu bilmiyordum yani bildiğin amerikayı yeniden keşfettim :D Keşfettikten sonrada bir yerde şansına denk geldimde aslında böyle bir şeyin var olduğunu ve bir ismi olduğunu anladım :)

    Öyle ki bazı algoritmalar recursive fonksiyon olmadan asla yazılamıyor. İşte ampulün ne zaman yanacağı belli olmuyor...
     
  12. mc_cree

    mc_cree Üye

    Kayıt:
    22 Şubat 2009
    Mesajlar:
    226
    Beğenilen Mesajlar:
    0
    Şehir:
    Konya
  13. Raiden

    Raiden self.life.start()

    Kayıt:
    11 Ekim 2004
    Mesajlar:
    4,392
    Beğenilen Mesajlar:
    0
    Şehir:
    /home/Raiden
    siz html pruifier i kullanın zira sürekli güncellenmektedir yeni bulunan xss lere göre..
     
  14. mgsmus

    mgsmus Aktif Üye

    Kayıt:
    20 Şubat 2007
    Mesajlar:
    268
    Beğenilen Mesajlar:
    2
    Şehir:
    Mersin