Nerede bir web sayfasında çıkış olacak kullanıcı girdileri için en iyi yer neresidir?

9 Cevap php

Şeyler yapmanın MVC şekilde, herhangi bir yerde giriş örneğin çalıştırmak için en iyi yer, htmlspecialchars() nedir? (Ben denetleyicisi ve model boyunca ham girişi ile uğraşıyor olması gibi bir nevi, burada bunu yapmak için mantıklı?) Görünümünde olması gerektiğini

Ben pek emin değilim ... görünümünde ya da kontrolöre bunu yapmanın faydaları nelerdir? Bu sadece potansiyel XSS açıkları en aza indirmek için ... Bir sayfa çıktısı reguarding edilir.

9 Cevap

Eh, o, değil bağlıdır? Siz görünümde size ÇIKTI şeyi sterilize edilmelidir. Birincisi, çünkü sanitization sizin çıkış biçimine bağlıdır. Bir JSON dezenfekte çıktı sağ, bir HTML dezenfekte çıkıştan farklıdır? İkinci olarak, size sahip verileri güven istemiyorum çünkü. Bu yollardan herhangi bir numara ile ele geçirilmiş olabilir.

O da, SQL enjeksiyonu ve bu karşı korumak değildir. Şimdi, bir saldırganın kolayca değiştirebilir, çünkü, bir istemci tarafı javascript yapmak istemiyorum. Yine, benim tavsiyem kullanım noktasında sanitization olduğunu. Eğer sadece bir dosyaya yazıyorsanız, gerekli olmayabilir. Ve bazı veritabanı erişim kitaplıkları ya da ihtiyaç yoktur. Diğerleri yok.

Her halükarda, kullanım noktada bunu yapmak, ve tüm kaynak kodu (böcek yoluyla veya saldırıları) saldırıları ve böcek karşı daha güvenilir hale gelir.

Tasarım desenleri düşünme berbat nedeni budur. Ne sorması gereken nerede bunu yapmak için en efficient yerdir? Veri write-once/read-many ise o da (sayfa görünümünde) çıktısı her zaman hijyen sunucu üzerinde gereksiz yük koymak için gidiyor. Veri nasıl kullanılacağını dayanarak karar, nerede vb arama yapmak kurulum nasıl önbelleğe alma, yapamam. Değil desen esası hakkında.

Eğer ben sadece öncesinde DB bunu yazma sanitasyon gerçekleştirmek söyledi kadarıyla. Sonra veri eklemek için güvenli sağlanması konum değil sadece ama aynı zamanda hiçbir gelecek hatalar gönderilen unsanitised veri neden olabilir sağlamak ediyoruz. Hiç bir nedenle orijinal metni istiyorsanız sadece orijinal dönüşüm ters.

TÜM metin bir form veya başka kodlanmış beri DB html kodlanmış metin saklamak endişe olmamalıdır. Eğer metin aramak gerekiyorsa sadece de arama dize kodlamak. Başka bir format gerekiyorsa o başka bir hikaye ama sonra sizin ihtiyaçlarınıza göre seçenekleri değerlendirmek gerekir.

Çıkışı, ve veritabanı orijinal şeyi saklamak - Ben iyi yolu görünümü kaçmak olduğunu düşünüyorum.

Neden? Bu yöntem ile her kullanım durumda db kayıtlarını kullanmak mümkün olacaktır.

Sen (javascript doğrulama yoluyla) görünümünde yapabilirsiniz, ancak denetleyici işlenen görünüme gelen verileri hala güvenilmeyen olarak kabul edilir, bu yüzden hala denetleyicisi bunu sterilize etmek zorunda kalacak.

I (örneğin {[) 0 (]} as) seen Örneklerde, sanitize etme kodu modeli sınıfları bir parçasıdır. Bazı insanların kullanımı validation libraries.

Ben sterilize etmek için herhangi bir 'en iyi' yer yok değil. Kullanım durumunda bağlı olarak, birden fazla katmanda hijyen mantığını uygulamak gerekebilir.

Genel kural: şişman modeli, ince kontrolör.

Şimdi, nasıl bu kuralı uygulamak farklı bir hikaye :)

I düşünmek yolu denetleyicisi gerçekten sadece, akışını kontrol sayfalara yönlendirme vb Herhangi bir doğrulama modeliniz yer almalıdır gerektiğidir. Eğer istemci tarafında doğrulama yapmak istiyorsanız, muhtemelen görünümünde koymak istiyorum. Güvenliği hakkında endişe herhangi bir geliştirici istemci ve sunucu üzerinde doğrulama yapardı.

Bugünün çerçevelerin çoğu bunu tanımlamak gibi ben "kontrolör" koydum. Bir görünümü şablonu doğrudan ait bir şey değil (ne kadar saf olduğunu bir tartışma içine almak değil), ama bazen ve diğerlerini orijinal verileri isteyebilirsiniz gibi o da mutlaka, model olması gerekmez.

Ben denetleyicisi model veri yükleme ve (benim durumumda smarty şablon) bir görünüme atıyorum Yani, ilk HTML Purifier ile çalıştırın.

Burada telesekreter eğilim kova ve bu tavsiye vermek için gidiyorum:

Güvenilmeyen girişinin mümkün olduğunca sıkı bir şekilde sınırlı olmalıdır - güvenliği değil bir hata düzeltme veya işlevsellik iyileştirme düşünüyor birisi değiştirdiğinde onun güvenlik değerlendirilmiştir önce girişi ile etkileşim yerlerin sayısını azaltarak, sizin tehdit maruz kalma azaltmak Tartışılan sistemi.

Kullanıcı girişi türü ve ne doğrulama bunu çalıştırırken edildiğine bağlıdır.

Eğer girişini temizlemek istiyorsanız görünümünde, ben denetleyicisi mantığı koymak istiyorum, ve also zaman veritabanı (ya da gerçekten herhangi bir kaynaktan) gelen çıkış verileri.

Veri doğrulama yapıyorsanız, ben javascript ile istemci tarafında bunu hem yapmak, hem de model olur.