Soru Üst düzey Java güvenlik çerçevesi


Java projelerinizde hangi güvenlik çerçevesini kullanıyorsunuz?

Spring Security ve Apache Shiro'yu kullandım ve ikisi de olgunlaşmamış görünüyorlar.

Bahar Güvenliği kusurları:

  1. izinler için yerel destek yok;
  2. Java kodunda açıkça kullanılma yeteneği (bazen gerekli);
  3. klasik (non AJAX) web uygulamalarına çok fazla odaklandı.

Apache Shiro kusurları:

  1. son sürümdeki hatalar (Bahar entegrasyonu ile ilgili problem gibi);
  2. OpenID ve bazı yaygın olarak kullanılan teknolojiler için destek yok;
  3. performans sorunları bildirildi.

Her ikisi için de belge eksikliği var.

Belki de gerçek projelerin çoğu kendi güvenlik çerçevelerini geliştirir?


18
2018-06-04 19:50


Menşei


Sorunuz çok muğlak bir IMHO. Hangi yönleriyle ilgileniyorsunuz? - Cratylus
Spring Security, "izin" için kullanılabilecek rollere sahiptir. Ve "Java kodunda açıkça kullanılma yeteneği" ne anlama geliyor? - matt b
@ user384706 Uygun izin modeli ve OpenID desteği gibi SS ve Shiro'nun avantajlarını birleştiren ve kusurlarının açıklanmadığı bir çerçeveyle ilgileniyorum. - Andrey Minogin
@matt İlk sorunuza kendiniz cevap verdiniz. "İzin için kullanılabilecek roller" dedin. "İzin olarak roller" değil, normal kullanıcı rolü-izni modeli olmalıdır. Şu anda izinler için SS desteği şu şekildedir: kendi tam özellikli PermissionEvaluator'unuzu yazın ve şansınız var. - Andrey Minogin
@matt b "Java kodunda açıkça kullanılma becerisi yok", SecurityContext.hasPermission ("add_contact") ve hatta hiçbir SecurityContext.hasRole ("manager") gibi bir yöntem olmadığı anlamına gelir. Şuna bakın: [link]stackoverflow.com/questions/3021200/... Peki SS ile koşullu güvenlik mantığını nasıl oluşturabilirim? Tabi ki bu yöntemleri kendim yazabilirim ama sorum şu: Bütün temel malzemelere sahip bir güvenlik çerçevesi var mı? - Andrey Minogin


Cevaplar:


Apache Shiro'ya gelince:

Yaptığın şeyleri neden listelediğinden emin değilim.

  1. Her Dünyadaki projenin, sorgulamadan hatalar var. Ancak buradaki büyük anahtar, Shiro'nun ekibinin yanıt vermesi ve ASAP'ı düzeltmesidir. Bu, bir çerçeveyi değerlendirecek bir şey değildir, aksi takdirde, yazdığınız her şey dahil olmak üzere her çerçeveyi ortadan kaldırırsınız.
  2. OpenID desteği kısa bir süre Shiro 1.2'de yayınlanacak - belki bir ay sonra mı?
  3. Hangi performans sorunları? Kimse yok hiç Özellikle Shiro'daki önbellek desteği geniş ve birinci sınıf olduğu için, dev listelere performans sorunları bildirdi. Açıklamalar veya referanslar olmadan, bu FUD olarak karşımıza çıkıyor.
  4. Belgeleme şu an gerçekten iyi - son zamanlarda gördüğüm Açık Kaynaktaki en iyilerden bazıları (2 hafta önce yeniden işlendi). Sizin için kısa sürede nereye düştüğüne dair belirli örnekleriniz var mı?

Yardım etmek isterdim, ancak endişeleriniz referanslar veya somut örnekler tarafından desteklenmeyen genellemeler. Belki de projenizin şu ana kadar başaramadığınız belirli şeyleri temsil edebilir misiniz?

Apache Shiro, Java ve JVM dilleri için güvenlik çerçevesini anlamak için en esnek ve en kolay olmaya devam ediyor - daha iyi bulacağınızdan şüpheliyim.

Ama her şeyden önce, ve tüm samimiyetle bunu kastediyorum, lütfen yapamaz bir yere koymayı planladığınız sürece kendi güvenlik çerçevenizi yazınız. gülünç içine zaman miktarı. Gördüğüm neredeyse her firma bunu yapmaya çalışıyor. Bu Gerçekten mi 'doğru' almak zor (ve güvenli). Güven bana - 8 yıldan sonra yazdıktan sonra, kesinlikle eminim :)

Her neyse, Shiro kullanıcı listesine katılmaktan çekinmeyin ve topluluğun mutlu olabileceğini ve sahip olabileceğiniz sorunları çözmek için istekli olduğunu göreceksiniz. Soru sorduğumuz insanlarla ilgileneceğimizi ve yardım için elimizden geleni yapacağımızı göreceksiniz.

HTH!


16
2018-06-05 19:24



Merhaba Les. Cevabınız için teşekkürler. Shiro'nun kötü olduğunu söylemek istemem. Shiro'nun modelini gerçekten çok seviyorum ama yeterince olgun olup olmadığından emin değildim, böylece Shiro ile ilgili herhangi birinin deneyimini sordum. Görünüşe göre SS şu anda daha popüler (SS hakkında çok daha fazla referans). - Andrey Minogin
Sorularınızla ilgili olarak: 1. Shiro'yu sitenizdeki belgeleri kullanarak Spring ile entegre etmeye çalıştığımda, açıklamalı işlemlerimin bu yapılandırma tarafından devre dışı bırakılmasında sorun yaşadım. 2. OpenID ve diğer kullanışlı özellikler için destek eklemeyi planlıyorsanız iyi olur. 3. Hmmm ... Shiro ile yüksek yüklenen sitede performans sorunları hakkında birisinin cevabı vardı, ama şimdi bulamıyorum. Silmedin mi? (şaka yapıyorum) - Andrey Minogin
4. Realms'ın yapılandırılmasıyla ilgili çok az belge var gibi görünüyor. Bu sorunla uğraşan sadece ben olabilirim, ancak konfigürasyon belli değil. - Andrey Minogin
@Andrey: 1. Bunu daha önce duymadık - eğer bir Jira sorunu açmak üzereyseniz, biz hallederiz! 4. shiro.apache.org/realm.html ("Bölge Yapılandırması"). Diğer pojo gibi yapılandırılmışlar. Ama daha iyi / daha kolay hale getirmek için daha ne yapabilirdik? Yardım etmekten mutluluk duyuyorum! Her neyse, Shiro topluluğunu ve dev ekibini bulacağınızı düşünüyorum. çok uzlaşmacı. Bu ve kolay API bize harika bir seçimdir;) - Les Hazlewood
OpenId'i bırakma ayı bir yıl oldu. OpenId ve OAuth ne kadar yakın? Her iki konu da taahhütsüz olarak 1 ay gösteriyor - Dennis


Şu anki projelerim SpringSecurity kullanıyor ve SpringSecurity'de kusur olduğunu iddia ettiğiniz her üç şeyi de içeriyor:

  • Projeler, basit ROL'lerin ötesine geçen ve çeşitli etki alanı nesnelerini, ekstra istek parametrelerini ve benzerlerini içeren ince taneli erişim kuralları uygular. Bunlar, MVC denetleyicilerimde çağrılan özel "erişim ilkesi nesneleri" kullanılarak uygulanır. Ancak, erişim kontrol hataları, ilgili istisna atılarak SpringSecurity'e geri verilir. (Bunlar standart SpringSecurity yöntemi düzeyinde engelleyiciler olarak uygulanabilirdi, ancak kontroller genellikle etki alanı nesnelerini incelemeyi içerir.)

  • Projeler hem web hem de AJAX erişimini destekliyor ve iki durum için erişim hatalarıyla farklı şekilde ilgileniyor. Bu, istek URL'sine bağlı olarak farklı kimlik doğrulama davranışları arasında seçim yapmak için SpringSecurity için bazı özel Kimlik Doğrulama giriş noktası bileşenleri yazılarak yapılır.

Başka bir deyişle, yapılabilir ...

Bunu söyledikten sonra, size birkaç noktada katılıyorum:

  • Bu kadar şeyi telemek kolay değil. Kullanırken barikatlara koşmaya devam ettim <http> eleman ve ilişkili konfigüratör. Gibi ... X bileşeninin farklı bir sürümünü kullanmak istiyorum. Ama bunun için Y, Z, P ve Q ile değiştirmek zorundasınız.

  • Dokümantasyon gerçekten seyrek ve sıradan bir şey yapmaya çalışıyorsanız yardımcı değil.


3
2018-06-05 00:59



@Stephen C Eh, SS ile olan bu - kendimiz tarafından bir sürü kod yazmanın gerekliliği. - Andrey Minogin
@Andrey - çok değil. SS-ile ilgili Java kodunun ~ 2.3k satırları var, ama çoğunlukla Shibboleth, OpenId, özel bir SSO düzeni ve hibrid giriş şemaları uygulamakla ilgilidir. Eğer hepsini kendim uygulamak zorunda olsaydım, daha fazla güvenlik, kimlik doğrulama ve erişim kontrol kodu siparişleri olurdu. - Stephen C
@Stephen C Cevabınız için teşekkürler! Hiç Shiro'yu denedin mi? Shiro çok ilginç görünmekle birlikte, SS kadar olgun ve iyi desteklenmemiş bir duygu var. - Andrey Minogin
@Andrey - diğer bir nokta ise, koşullu (ör. Nesne durumuna bağlı) erişim kontrol şemalarını uygulamak için kendi kodunuzu yazmanız gerekmesi kaçınılmazdır. - Stephen C
@Andrey - Shiro, Apache organizasyonunda 3 yıldan beri ve bundan 5 yıl önce JSecurity olarak biliniyor. Bu kesinlikle olgun ve hatta Katasoft tarafından profesyonelce desteklenmektedir: katasoft.com  HTH! - Les Hazlewood


Andrey, sanırım bu cevap sana yardımcı olmak için çok geç geldi; Daha sonra bu konuya inenler için tasarlanmıştır ve umarım yardımcı olur.

Şirketim yakın zamanda açık kaynak olarak piyasaya çıktı, OACC, gelişmiş bir Java Uygulama Güvenlik Çerçevesi. OACC, nesne düzeyinde güvenlik parçacığı gerektiren sistemler için tasarlanmıştır.

OACC, sağlayan yüksek performanslı bir API sağlar izin temelli yetkilendirme hizmetleri. Özetle, OACC uygulamanızın soruyu cevaplayarak güvenliği sağlamasına izin verir: "A" öğesi, "B" varlığında "p" işlemini gerçekleştirebilir mi?

OACC’daki temel soyutlamalardan biri kaynak. bir kaynak Uygulama etki alanındaki güvenli olması gereken nesne için OACC'de yer tutucu görevi görür. Hem aktörler (örneğin kullanıcılar, süreçler) ve güvenli hale getirilen nesneler (örneğin belgeler, sunucular), OACC'de kaynak olarak temsil edilir. Aktörler olan veya güvenli olan uygulama alanı nesneleri, kaynak kimliğini yalnızca ilgili kaynağa depolar.

Kaynak soyutlaması, diğer önemli güvenlik çerçevelerinden farklı olarak, kaynakların izinlerini yöneten zengin bir API sağlamak için OACC'ye izin verir. OACC, RDBMS tablolarındaki güvenlik ilişkilerini sürdürür (DB2, Oracle, MS-SQLServer ve PostgreSQL şu anda desteklenmektedir).

Daha fazla bilgi için proje web sitesine bakınız: http://oaccframework.org


1
2018-04-01 05:30





Projelerimizden birinde katmanlı bir güvenlik kullanıyoruz. Katmanlar şunlardır:

  1. Protokol olarak HTTPS (Apache-AJCConnectors-TomcatServlets)
  2. İstemci ve sunucu arasında yalnızca ikili nesneler aktarıldı
  3. Geçilen nesnelerdeki tek tek öğeler (her iki şekilde) şifrelenir
  4. Şifreleme anahtarı dinamiktir, ilk anlaşma sırasında ayarlanır, 1 oturum için geçerlidir

Kavramsal olarak güvenlik şifreleme anahtarı, şifreleme algoritması ve üzerine uygulandığı verileri içerir. İletişim sırasında 3'ten daha fazlasının aynı anda geçmediğinden emin oluruz. Umarım yardımcı olur. Saygılarımızla - M.S.


-2
2018-06-04 23:19



Sorum şu: YÜKSEK SEVİYE güvenlik çerçevesiyle ilgili şifreleme değil. Yüksek seviyeli güvenlik çerçevesi, rolleri ve izin kontrollerini yöneten sistemdir. - Andrey Minogin