En iyi uygulama.

5 Cevap php

Ben aşağıdaki yapmalıyım hangi yolu merak ediyordum. Ben doğru html etiketleri ile kullanıcıların verileri biçimlendirir küçük MCE wysiwyg editörü kullanıyorum. Şimdi, ben bir veritabanı tabloya editörü içine girilen bu verileri kaydetmek gerekir.

Ben geri tablodan veri almak zaman sonra, XSS amaçlı kodlar buna sahip değil, DB eklerken ben bunlara karşılık gelen kişilere html etiketleri kodlamak gerektiğini ama hala biçimine html etiketleri için eval kullanmak zorunda metin.

VEYA

Ben geri veritabanı kodlamak gelen verileri almak zaman etiketleri kullanıcıya görünecek gibi ben veritabanına html etiketleri tasarruf yapmak, daha sonra kişilere html etiketleri, ama sonra, ben aslında eval işlevini kullanmak zorunda girildiği gibi verileri biçimlendirmek.

Düşüncelerim ilk seçenek ile, sadece siz düşünce ne merak edilir.

5 Cevap

Ne. O yüzden dışarı çekin, hazır fro render "olduğu gibi-" Sen HTML saklayın. Sen ileri ve geri dönüştürme edilecek chouldnt. Ne koymak görüntülemek ne olmalıdır. Ne yapmak istiyorsun sen DB içine koymadan önce filtre girişi olduğunu. TinyMCE ve ck / fckeditor hem bir editör kullanılan olabilir ve sizin için bu etiketleri şerit olacak etiketlerini sınırlamak tesisleri var. Sonra diğer gerekli doğrulama ya da biçimlendirmeyi yapmak gerekir jsut.

Ben mümkün olduğunca bu "doğal" formu ona yakın veritabanında veri depolama öneririm. Genellikle veritabanı katmanı bir alan HTML, Base64 kodlanmış İkili metin, ya da sadece düz metin içerip ile ilgili olmamalıdır. Bu içeriği işlemek için nasıl karar verir, bu sizin bakış katman için endişeleri vardır.

Eğer veritabanına eklemeden önce XSS saldırıları için bazı ön tarama yapmak isteyebilirsiniz yaparken tarayıcı "güvenilmeyen" bilgi göndermeden önce Böylece, her zaman XSS taranması gerekir.

Bu da XSS önleme algoritmaları gelecekte geliştirmek eğer, bunun yerine HTML içerebilecek alanlar için veritabanını taramak zorunda kalmadan, sadece görüntülemek rutinleri değiştirerek tüm uygulama boyunca uygulamak ve daha sonra güncelleyebilirsiniz bu avantajı vardır onları.

Ben veritabanına eklerken sadece SQL enjeksiyon kontrol ve onun "ham" formunda olduğu gibi html bırakacaktı.

Ben drupal bunu yapar ve anında filtreleri (örn. tüm html etiketleri (filtresiz), bazı etiketleri yalnızca, xss filtre, php kod formatı, jeton vb) geçerli olduğunu biliyoruz. Bu yaklaşımın bir avantajı daha sonra kullanılan filtreyi değiştirmek istiyorsanız eğer yıkıcı, giriş verileri değiştirmek kalmamasıdır.

Önce benim blog başladı, ben HTML BBCode dönüştürmek (ve aklı kontrolleri yapmak) ve ardından veritabanına koymak karar verdi. Eh, bir ay ile rulo ve ben bir düzen sorunu vardı çıkıyor. Benim eski HTML veritabanında "sabit" olduğunu şimdi, yakında her zaman kullanıcı veritabanında kullandığı başlangıç ​​metni saklamak ve daha sonra bir istek daha sonra dönüştürmek gerektiğini öğrendim.

HTML ve XSS ile hataları düzeltmek ve geriye dönük olması bu yüzden yapar.

Bir olasılık both ayıklanmış sürümü ve orijinal versiyonu saklamaktır. Yine de kullanıcıların özgün biçimde kendi içeriği düzenlemek için izin verirken ben, canlı sanitasyonuyla tarafından oluşturulan performans sorunlarını önlemek için HTMLPurifier ile kullanabilirsiniz.

O çift depolama alanı alacak ama genellikle uzay hız ve kontrol olarak bir sorun olarak fazla değildir söylemeye gerek yok.