Genel olarak ilk önce - "sizin korumanız ve onlarınkileriniz için." Bu, geçersiz karakterleri çıkarmayı içerir (elbette karakter kodlamasına duyarlı). Bir alan sadece karakter ve boşluk içermeli, önce olmayan bir şeyi çıkar.
Bittiğinde, sonuçları doğrulayın - zaten kullanılan ad (benzersiz alanlar için), doğru boyut mu, boş değil mi?
Verdiğiniz nedeni, kullanıcı deneyimini en üst düzeye çıkarmak için doğru olanıdır. Bundan kaçınmak için kullanıcıyı şaşırtmayın. Bu, & yapıştırma davranışından kurtulmaya yardımcı olur, ancak dikkatli olmanız gerekir; eğer adımın "Ke $ h @" şeklinde kaydedilmesini istiyorsanız, "Keh" olarak değiştirilebiliyor olabilir veya olmayabilir. İkinci olarak, aynı zamanda hataları önlemek de mümkündür.
Özel karakterlere izin vermeyen kullanıcı adları oluşturmak istediğinizde ne olur? Eğer "Brian" girersem ve sistemimiz onu zaten kullanımda olan isim olarak reddederse, ben "Brian $" gönderirim? Önce bunu doğrulayın, kullanımda değil, sonra özel karakterleri çıkarırsınız ve "Brian" ile kalırsınız. Uh oh - şimdi ya TEKRARLAMAYI doğrulamak zorundasınız, ya da hesap oluşturmanın başarısız olduğu (örneğin, veritabanınız benzersiz kullanıcı adları gerektiriyorsa) veya daha kötüsü, başarılı ve aşırı yazma/bozulma olacak bir hata iletisi alırsınız. kullanıcı kullanıcı hesaplarına oluşur.
Başka bir örnek, minimum alan uzunlukları: eğer bir adla ilgili en az 3 harf uzunluğunda ve yalnızca harfleri kabul ediyorsanız ve ben "hayır" yazarak reddedersiniz; ama "no @ # $%" yazıyorsam, geçerli olduğunu (uzun sürebilir), sanitize etmeyi ve artık geçerli olmadığını söyleyebiliriz.
Bundan kaçınmanın kolay yolu, önce dezenfekte edilir ve sonra doğrulama hakkında iki kere düşünmek zorunda değilsiniz. Bununla birlikte, Niet depolamadan önce verileri kodlama konusunda haklıydı; çıktıları HTML'ye uygun şekilde kodlamak genellikle çok daha kolaydır, daha sonra düz metni (metin kutularına, JSON dizelerine vb. giriş yapmak istediğinizde) çözmeyi unutmayın. Kullanacağınız çoğu test vakası, HTML öğelerine sahip verileri içermez, bu nedenle kolayca yakalanamayan aptalca hataların tanıtılması kolaydır.
Büyük sorun, böyle bir hatanın tanıtılması durumunda, kolayca çözülemeyen veri bozulmasına yol açabilmesidir. Örnek: Düz metniniz var, html varlıklar gibi bir metin alanına yanlış yazdıysanız, form geri gönderilir ve siz onu yeniden kodlarsınız ... her açıldığında/yeniden gönderildiğinde yeniden kodlanır. Meşgul bir site/form ile binlerce farklı kodlanmış girdiyle sonuçlanabilir ve HTML kodlaması yapılmasının gerekip gerekmediğini belirlemek için net bir yol yoktur.
Enjeksiyondan korumak iyidir, ancak HTML kodlaması bunu yapmak için tasarlanmamıştır (ve bunlara güvenilmemelidir).
Verileri saklamadan önce asla şifrelememelisiniz. Ham olarak saklayın ("mysqli_real_escape_string" veya benzeri gibi doğru kaçış kullanarak) ve çıktı almadan önce kodlayın. Bunun nedeni, HTML veya JSON veya başka bir şey olarak çıktıysanız, farklı kodlamaya ihtiyaç duymasıdır. SQL enjeksiyon durdurmak için –
en iyi yöntem veritabanına veri girmek için mysqli PDO hazırlanan deyimi kullanmaktır. @ [Niet Koyu Absol] (http://stackoverflow.com/users/507674/niet-the-dark-absol) olduğu sağ ama mysqli_real_escape_string() işlevi kullanımdan kaldırılmıştır. – nurakantech
Asla “mysqli_real escape_string()” gibi işlevler kullanmayın, çünkü daha güvenlidir. – naazanin