Veritabanında saklayın html kişiler?

7 Cevap php

Hızlı soru, daha iyi bir fikir htmlentities() aramak (veya htmlspecialchars()) önce veya veritabanına veri taktıktan sonra?

Before: yeni uzun dize beni alanında uzun değerleri tutmak için veritabanı değiştirmek zorunda neden olur. (maxlength="800" bir 804 karakter dize değişebilir)

After: Bu çok daha fazla sunucu işlem gerektirir, ve çağrı yüzlerce htmlspecialchars(), her sayfa yük veya AJAX yük yapılabilir.

SOOO. Anlamlı derecede yavaş kodumu alınır zaman dönüştürme olacak? Ben DB değiştirmek gerekir?

7 Cevap

Ben veritabanındaki verilerin en ham formu saklamak tavsiye ederim. Bu size nasıl ve nerede çıktı ki seçerken en esnekliği verir veri.

Eğer bu performans bir sorun bulursanız, bir şekilde bu verilerin HTML biçimli sürümünü önbelleğe olabilir. Erken optimizasyon kötü bir şey olduğunu unutmayın.

Ben php hiçbir deneyimi var ama genelde ben hep dönüştürmek ve çıkışına yakın kaçış. Örneğin XML veya JSON diziler gibi verileri tükürmek isteyebilirsiniz, çıkış şartları değişecek biliyorum ve bu yüzden yalnız HTML olarak verileri kullanarak sınırlı konum araçları HTML kaçan ve daha sonra saklamak yok.

Bir php / MySQL web uygulaması, veri iki şekilde akar

Database -> scripting language (php) -> HTML output -> browser ->screen and Keyboard-> browser-> $_POST -> php -> SQL statement -> database.

Veri kullanıcı tarafından sağlanan her şey olarak tanımlanır.

HER ZAMAN HER ZAMAN ....

A) mysql_real_escape_string üzerinden işlem veri bir SQL deyimi içine taşımak, ve gibi

B) Eğer HTML çıktı içine htmlspecialchars'dan işlem veri taşımak gibi.

Bu sql injection saldırılarına karşı korumak, ve (eğer bir yerde unutmak yönetmek sürece, ve sonra bir güvenlik delik açtı) düzgün görüntülemek için html karakterleri ve kuruluşlar sağlayacaktır.

Ben bu verilerin herhangi bir kullanıcı hiç bir komut dosyası aracılığıyla, dokundu değiştirilmiş veya sağlayabilirdi her bir parça için yapılması olduğunu söylemiş miydim?

P.S. Performans nedenleriyle, her yerde UTF-8 kodlaması kullanın.

Bu, "iki ölçmek kez optimize" usta yoludur.

Çiğ olarak metin depolamak ve gerektiği gibi dürüst olmak, onu kodlamak için en iyisidir, her zaman XSS önlemek kesmek için WBE sayfaya çıktısı olduğunuzda zaten verilerinizi HtmlEncode gerekir.

Eğer veritabanında koymak önce verilerinizi kodlamak gerekir. Temel nedeni vardır:

  1. Bu tür veriler sütun boyutu sınırı yakınında ise, 32 karakter başlık "Steve & Fred filan" olsaydı, o zaman bu sütun sınırı üzerinden gidebilir, demek çünkü 1 karakter & 5 karakter & olur amp;
  2. Sen veriler her zaman verilere bakarak olacak asla bilemezsiniz ve bu kodlanmış istemeyebilirsiniz, şimdi bunu çözmek için var ve bunu olmayabilir mümkündür gelecekte, bir web sayfasında gösterilecektir varsayıyoruz PHP'nin kod çözme işlevine erişim

Kolay yolu "olduğu gibi" ve ihtiyaç duyulan her yerde daha sonra Htmlentities dönüştürmek veri depolamak olduğunu.

Güvenli çözüm, bu güvenlik uygulama eksikliğinden sunucu ve veritabanı üzerindeki olası saldırıları engeller ve daha sonra gerektiğinde ihtiyacınız Ancak dönüştürmek gibi veritabanına gider önce verilere filtre etmektir. Eğer PDO kullanarak eğer Ayrıca bu hazırlanmış deyimleri kullanarak otomatik olacak.

http://php.net/PDO

Biz son zamanlarda işte bu tartışma vardı. Önce (biz saklamak olduğunu zaman çıkmamış) veri kaçtı olmadan görüntülenen ediliyordu köşe durumlarda vardı, çünkü veritabanında kaçtı değerleri depolamak için karar verdi. Bu XSS yol açabilir. Bu yüzden güvenli olması için kaçtı saklamaya karar vermiş, ve want bu işi kendiniz yapmak zorunda çıkmamış bile.

Edit: katılmadığını herkese Yani, benim durum için bazı backstory ekleyelim. Diyelim ki ... 50 + kişilik bir ekip çalışıyoruz ve veritabanından veri çıkış yolu HTML-kodlanmış olması garanti edilmez diyelim - bunun için yerleşik bir mekanizma var bu yüzden geliştirici kod yazmak zorunda bunu yapmak için. Ve bu veriler 30 en geçiyor 1 geliştiricinin kod geçiyor değil bu yüzden biryere gösterilir - ve bunların çoğu (hatta nadir açılı ayraçlar içerebilir o ya) bu veri hakkında hiçbir ipucu var ve sadece onu almak istiyorum sayfada gösterilen, hareket, ve onu unutun.

Eğer still bu veritabanına, HTML, veri koymak ve-sen düzgün şeyler yapmak için rasgele insanlara güvenmek daha iyi olduğunu düşünüyor musunuz? Kesinlikle sıcak-bulanık-en-practicey görünüyor olabilir açıkçası, ben oldukça açık daha kapalı (veriler Değer