Veri girişi doğrulama her zaman benim için oldukça iç bir mücadele oldu.
Eski uygulamamıza yeniden yazma projemize gerçek bir güvenlik çerçevesi ve kodu eklemenin eşiğinde (şu ana kadar kart kalesi güçlü eski güvenlik kodunu ve veri doğrulamasını tutar), ne kadar doğrulamam gerektiğini merak ediyorum. nerede vb
Profesyonel Java geliştiricisi olarak 5 yılı aşkın süredir veri girişi doğrulama ve güvenlik önlemleri için kişisel kurallarımı oluşturup geliştirdim. Yöntemlerimi geliştirmeyi sevdiğim için, bazılarının sizden bazı fikirler duymasını istiyorum. Genel kurallar ve prosedürler gayet iyi ve Java'ya özgü kurallar da var.
Özetle, bunlar benim kısa açıklamalarım olan kılavuzlarımdır (3 katmanlı bir web uygulaması tarzında açıklanmıştır):
1. kademe müşteri tarafı (tarayıcı): minimum doğrulama, yalnızca değişmeyen kurallar (zorunlu e-posta alanı, bir öğe seçmeli ve benzeri); "6 ile 20 karakter arasında" gibi ek doğrulama işlemlerinin kullanımı daha az sıklıkta görülür; çünkü bu, değişikliklerle ilgili bakım çalışmalarını artırır (işletme kodu sabit olduğunda eklenebilir);
1. kademe sunucu tarafı (web iletişimi işleme, "denetleyiciler"): Bunun için bir kuralım yok, ancak yalnızca veri işleme ve montaj / ayrıştırma hatalarının burada ele alınması gerektiğine inanıyorum (doğum günü alanı geçerli bir tarih değil); buraya daha fazla doğrulama eklemek, onu gerçekten sıkıcı bir işlem haline getirir;
2. kademe (iş katmanı): sağlam sağlam doğrulama, daha az değil; giriş veri formatı, aralıklar, değerler, metodun herhangi bir zamanda çağrılıp aranamayacağı iç durum kontrolü, kullanıcı rolleri / izinleri, vb .; mümkün olduğunca az kullanıcı giriş verisi kullanın, gerekirse veritabanından tekrar alın; Eğer alınan veritabanı verilerini de girdi olarak kabul edersek, sadece bazı spesifik verilerin DB'ye yeterince güvenilmez veya bozuk olduğu biliniyorsa doğrularım - güçlü yazma işlemi burada işin çoğunu yapar, IMHO;
3. katman (veri katmanı / DAL / DAO): burada sadece çok fazla doğrulama gerekmediğine inanılmadı, çünkü sadece iş katmanının verilere erişmesi gerekiyordu ("param2 doğruysa boş olmamalıdır" gibi bazı durumlarda doğrulayın); Ancak, "burada" derken, "veritabanına erişen kod" veya "SQL yürütme yöntemleri" derken, veritabanının kendisinin tamamen zıttır;
veritabanı (veri modeli): iyi birincil anahtarlar, yabancı anahtarlar, kısıtlamalar, veri türü / uzunluğu / büyüklüğü ile DB üzerinde mümkün olduğunca yanlış ve bozuk veri oluşmasını önlemek için iyi düşünülmüş, güçlü ve kendi kendini zorlayıcı olmalı / precision ve diğerleri - Kendi özel tartışmaları olduğu için tetikleyicileri bunun dışında bırakıyorum.
Erken veri doğrulama işlemlerinin iyi ve performans açısından iyi olduğunu biliyorum, ancak tekrarlanan veri doğrulama işlemleri sıkıcı bir işlemdir ve veri doğrulama işlemlerinin kendisinin oldukça can sıkıcı olduğunu kabul ediyorum. Bu yüzden birçok kodlayıcı bunu atlıyor ya da yarısını yapıyor. Ayrıca, yinelenen her doğrulama, her zaman senkronize edilmemeleri durumunda olası bir hatadır. Bugünlerde tercih ettiğim başlıca nedenler, iş katmanına yapılan onayların çoğunun zamana, bant genişliğine ve CPU'ya göre durum bazında ele alınan istisnalar olmasına izin veriyor.
Peki bunun hakkında ne düşünüyorsun? Görüşlerin karşısında mı? Başka prosedürleriniz var mı? Böyle bir konuya bir referans? Her türlü katkı geçerlidir.
Not: Java'nın bir şey yapmanın yollarını düşünüyorsanız, uygulamamız Spring Spring'e dayanmaktadır. Spring Security ürününü güvenlik sağlayıcımız ve JSR 303 (Hibernate Validator?) Olarak eklemeyi planlıyorum
Teşekkürler!
Düzenleme: 3. kattaki bazı ekstra açıklamalar.