Güvenlik ve Kullanıcı Girdisi

Her tür giriş (Web isteği veya URL'den veriler, Microsoft Windows Forms uygulamasının denetimlerine giriş vb.) olan kullanıcı verileri, genellikle bu veriler diğer kodu çağırmak için doğrudan parametre olarak kullanıldığından kodu olumsuz etkileyebilir. Bu durum, kodunuzu garip parametrelerle çağıran kötü amaçlı kodlara benzer ve aynı önlemlerin alınması gerekir. Güvenilmeyen olabilecek verilerin varlığını izlemek için yığın çerçevesi olmadığından, kullanıcı girişinin güvenli hale getirmesi daha zordur.

Bunlar bulunması en ince ve en zor güvenlik hataları arasındadır, çünkü güvenlikle ilgisiz gibi görünen bir kodda bulunsalar da, diğer kodlara hatalı verileri geçirmek için bir ağ geçididirler. Bu hataları aramak için her türlü giriş verisini izleyin, olası değer aralığının ne olabileceğini düşünün ve bu verileri gören kodun tüm bu durumları işleyip işleyemeyeceğini göz önünde bulundurun. Bu hataları, kodun işleyemediği girişleri aralık denetimi ve reddetme yoluyla düzeltebilirsiniz.

Kullanıcı verileriyle ilgili dikkat edilmesi gereken bazı önemli noktalar şunlardır:

  • Sunucu yanıtlarındaki tüm kullanıcı verileri, istemcideki sunucunun sitesi bağlamında çalışır. Web sunucunuz kullanıcı verilerini alıp döndürülen Web sayfasına eklerse, örneğin bir <betik> etiketi ekleyebilir ve sunucudan gibi çalışabilir.

  • İstemcinin herhangi bir URL isteyebileceğini unutmayın.

  • Karmaşık veya geçersiz yolları göz önünde bulundurun:

    • .. \ , son derece uzun yollar.

    • Joker karakter (*) kullanımı.

    • Belirteç genişletme (%belirteç%).

    • Özel anlamı olan tuhaf yol biçimleri.

    • gibi filename::$DATAalternatif dosya sistemi akış adları.

    • gibi dosya adlarının longfi~1longfilenamekısa sürümleri.

  • Eval(userdata) öğesinin her şeyi yapabileceğini unutmayın.

  • Bazı kullanıcı verilerini içeren bir ada geç bağlamaya karşı tedbirli olun.

  • Web verileriyle ilgileniyorsanız, aşağıdakiler dahil olmak üzere izin verilen çeşitli kaçış biçimlerini göz önünde bulundurun:

    • Onaltılık kaçışlar (%nn).

    • Unicode çıkışları (%nnn).

    • Overlong UTF-8 kaçışları (%nn%nn).

    • Çift kaçış (%nn, %mmn olur; burada %mm, '%' için çıkıştır).

  • Birden fazla kurallı biçime sahip olabilecek kullanıcı adlarından imli olun. Örneğin, genellikle MYDOMAIN\username formunu veya username@mydomain.example.com formunu kullanabilirsiniz.

Ayrıca bkz.