Halka açık veri tabanı kimliklerini gizlemek / gizlemek gerçekten “en iyi uygulama” mı?


23

İnsanların burada ve orada internette ders verdiğini, web uygulamalarında halka açık veritabanı kimliklerini gizlemenin en iyi yöntem olduğunu duydum. Sanırım temelde formlarda ve URL'lerde kastediyorlar, ancak bu konuda hiçbir zaman ağız dolusu bir şey okumamıştım.

EDIT : Tabii ki, şimdi bunu sorduğumda, konuyla ilgili bazı kaynaklar buldum:

Bu bağlantılar merakımın bir kısmını tatmin etti, ancak SO paylaşımlarının çok oyu olmadı ve bu bağlamda mutlaka konuyla ilgili bir merkeze sahip olmadıklarından, bunun için ne yapacağımdan emin değilim ve bazıları bunun üçüncü bağlantı sahte. Yazımın kalanını bozulmadan bırakacağım:


Müstehcenlik ve güvenlik arasındaki farkların yanı sıra, ikisinin birlikte nasıl çalışabileceğini anlıyorum ama bunun neden gerekli olduğunu hayal edemiyorum.

Bunun bir gerçeği var mı, sadece paranoya mı, yoksa tamamen sahte mi?

Bunu yapmanın yollarını düşünebilirim, ancak elbette uygulama koduna çok fazla karmaşıklık katıyor. Hangi şartlar altında bu yararlı olabilir? Bu , insanların sıklıkla yaptığı bir şeyse, genellikle nasıl dağıtılır? Tanımlayıcıları mı karıştırıyorsunuz? Başka bir şey? Fazladan bir güvenlik için pek çok iş gibi görünüyor. Gerçek çözümler aramıyorum, sadece insanların bunu gerçek dünyada nasıl / niçin yaptıkları hakkında bir fikir edinmek istiyorum.

Bu gerçekten bir "en iyi uygulama" olarak mı görülüyor yoksa az değerde bir mikro-optimizasyon mu?

NOT : Birkaç kişinin yanlış bir fikir edindiğini düşünüyorum: Tahmin edilmesi zor olan kimliklerin tek güvenlik mekanizması olacağını, açıkçası her zamanki erişim kontrollerinin olacağını öne sürmüyorum. Bunların yerinde olduğunu varsayalım ve bir kaydın kimliğini veya özetlenmiş kimliğini bilmek erişim izni vermek için yeterli değildir.

Yanıtlar:


28

Bunun önemli olduğunu sanmıyorum, ancak yaptığınız diğer kararlara bağlı olarak önemli olabilecek bazı senaryolar var .

Örneğin, sıralı olarak oluşturulan bir sipariş kimliğini ifşa edecekseniz ve müşteri desteğini arayan ve "hey, yeni bir bilgisayarda 2000 dolar harcadım ve sizden başkalarının siparişini gönderdiniz 15 $ 'lık bir kablo, şimdi 2000 $' a çıktım "ya, sahtekarlığa karar vermeden önce ya da sahtekarlara yeni bir bilgisayar göndermeden önce sorunu incelemeye çalışarak çok zaman geçirebilirsiniz.

Temada benzer, daha az karmaşık, ancak utanç verici farklılıklar var; Kötü bir adam bir sipariş kimliğini bir makbuzun e-postayla gönderilen bağlantısını eklerse ve bağlantıyı tıklayan kişinin sipariş kimliğini görüntüleme hakkına sahip olduğunu doğrulamak için ek bir doğrulama yapılmazsa, aniden istemeden özel müşteri bilgilerini açıklıyor olursunuz yanlış kişiye.

Bu gibi durumlarda, sayılar ardışık değilse, maruz kalma hafifçe azaltılır çünkü tahmin etmenin ilginç sonuçlar vermesi daha az olasıdır. Öte yandan, müşteri temsilcisi etkileşimlerinde, telefon tabanlı müşteri etkileşimleriyle uzun süre ileri geri görüşmelere neden olmayacak bir müşteri siparişi kimliğine başvurmak için uygun bir yönteme ihtiyacınız var. BPT2015D sipariş numarasına T.

Bu şaşırtmaya "en iyi uygulama" demenin bir zorunluluk olduğunu söyleyebilirim, ancak bazı senaryolarda, onaylama veya yetkilendirme kodunuzdaki başka bir zayıflığı kullanma kolaylığını azaltabilir. Öte yandan, birinin blog yaz # 1 veya # 2559 yazdığını bilmesi gerçekten önemli değil. Kimlik bilgisi ek bilgi olsa bile değerli bir bilgi değilse bile, bunu engelleyen en iyi uygulama olduğu argümanı daha az ağırlık tutar.

Veritabanı tanımlayıcınızın sizi belirli bir veritabanı uygulamasına (veya örneğe) davet edebileceği ve şirketiniz bir rakip satın alındığında veya bir rakip seçtiğinde ikinci bir potansiyel argüman var ve şimdi iki eski sistemi veya CEO'yu birleştirmek zorundasınız. DynoCoreBase'den rep ile içmeye devam ediyor ve artık tüm verilerinizi DynoCoreBase sürüm 13h'ye taşıyacağınıza ve tüm birincil anahtarların kılavuz olmasını istediğine ve eski kimlikleri yeni hale çevirmek için bir tür haritalama katmanı oluşturmanız gerektiğine karar veriyorlar. Böylece, eski URL’lerin bozulmaması için kimlikler belirlenir, ancak bu senaryoların sizin için önemli olup olmadığı, işinizin doğasına (ve bu kimliklerle müşterinin katılımına) genel en iyi uygulamalardan çok daha fazla bağlıdır.


2
Sorumu anlayan tek kişi sizsiniz. Söylediğiniz gibi, kesinlikle “başka bir zayıflığı kullanma kolaylığını azaltabilir”. Fakat bu ne değer? Birisi aslında tuzlu bir karma gibi bir şey atılacak kararlı bir birey var mı? Bunun daha çok "profesyonel" bir teknik olduğunu düşündüm, fakat pratikte göremiyorum (ya da bilseydim farketmezdim…). Söylediğiniz gibi, yalnızca kimliği bilmek erişim izni vermemelidir (bazı kişilerin bu kısmı kaçırdığını düşünüyorum, bunun için onayladım). Bu yüzden genel değerlendirmenize katılıyorum.
Wesley Murch

9

Benim üstümdeki şey bu:

“Müstehcenlikle güvenlik” açıkça yeterli olmasa da, muğlaklık az da olsa güvenliği güvence altına alabilir . Bu küçük su güvenliği güvencesinin, uygulamanızda böyle bir şey dağıtmak için harcayacağınız ekstra çabaya değip değmeyeceğine karar vermelisiniz.

Güvenlik dışında bunu uygulamak için düşünebileceğim başka bir neden var:

Gizlilik

URL'deki kullanıcı kimlikleriyle uğraştığımızı varsayalım. Joe'nun kullanıcı kimliği 100ve Bob'un kullanıcı kimliği ise 101, büyük olasılıkla Joe'nun hesabının ilk oluşturulduğu açıktır. Bu çoğu uygulamada önemli olmayabilir, ancak bazıları için önemli olabilir. Bu gizlilik örneğidir stricly kullanıcı kimlikleri obfuscating bir çok sofistike bir sistem var ve bu yüzden sürece, gizlilik üzerinden, bu en erimesi ve kimlikli kullanıcı olmadığını figürü kolay yetebilir 3Js9kW3hTs7sa120bir hesap daha uzun kimlikli kullanıcıdan daha olmuştur Q8Hs73kks0hEg.

Başvurduğum linkten :

Birincisi, bir nesnenin URL’si göz önüne alındığında, çevresinde oluşturulan nesnelerin URL’lerini çözebilirsiniz. Bu, veritabanınızdaki nesne sayısını olası rakiplere veya bu bilgilere sahip olmak istemeyeceğiniz diğer kişilere gösterir ( Müttefiklerin, Alman seri üretim seviyelerini tahmin ederek Alman tank üretim seviyelerini tahmin ettiği gibi).

Bir otomatik artış kimliği kullanmak, veritabanındaki nesne sayısını genel olarak gösterir ve hangisinin önce oluşturulduğunu ve hangilerinin daha yeni olduğunu açığa çıkarır. Bu bilgi, bir işletmenin yeni olduğu veya iyi yapamadığı gerçeğini ortadan kaldırabilir. Örneğin: Diyelim ki bir kitap sipariş ediyorsunuz ve sipariş kimliğiniz 1. Siparişinizin sistemde ilk olan ve sinir bozucu olabileceği açıktır. Diyelim ki geri dönüp bir tane daha sipariş edin ve sipariş numaranız 9. Bu, iki siparişiniz arasındaki zaman aralığında yalnızca 7 siparişin verildiği bilgisini verir. Bu, rakipler için değerli bilgiler olabilir. Bu durumda, sayısal otomatik artış kimliği muhtemelen gizlenmeden daha iyidir.


2

"Gizli" kelimesi burada muhtemelen biraz yanıltıcıdır ve insanları "şaşırtmak" veya "kısmen saklanmak" düşünmeye yönlendirebilir.

Öneri, bu veritabanı kayıtları herhangi bir hassas veri içeriyorsa, hiçbir zaman genel URL’nin bir parçası olarak dahili olarak oluşturulan hiçbir veritabanı anahtarını eklememenizdir.

URL’deki sayılarla oynamak ve diğer kayıtlara erişmek çok kolay.


1
Evet, başlıktaki şaşkınlığı ve diğer birkaç vakayı kastetmiştim - bunun için üzgünüm. Ne demek istediğimi bilmene sevindim. "Rakamlarla oynamak" ile ilgili bir şey alıyorum ama bu benim açımdan bir şey - parmaklarınızın kestirilmesini ve geçilmesini zorlaştırarak uygulamanızın korunmaması gerekir. Birisi üzerine inip /account/8hdy39s1lks062dfasd4gerçek bir hesaba eşlerse, yine de erişememeleri gerekir.
Wesley Murch

2

Genel kullanıma karşı çıkacağım ve size rastgele, uzun bir tanımlayıcı kullanmanın bence oldukça iyi bir güvenlik biçimi olduğunu söyleyeceğim.

Bu verilere erişimi olanların, bir şifre kadar hassas olduğu açıkça anlaşılmalıdır. Ve tabii ki dezavantajı vardır ki, eğer vahşi yaşama girerse değişmesi daha zor olabilir.

Ancak normal kullanıcı adı ve şifre çifti üzerinden birkaç avantajı vardır. Öncelikle, kullanıcının bu konuda bir seçeneği yok, bu yüzden tahmin etmenin imkansız olduğundan emin olabilirsiniz. Yönetici ilk adını parola olarak seçtiğinde, tamamen güvenli bir site tasarlamanın hiçbir anlamı yoktur. İkincisi, her öğenin farklı bir tanımlayıcısı vardır, yani bir öğeye erişirse, bu diğerine yardımcı olmaz.

Elbette, güvenlik katmanları ne kadar fazla olursa, o kadar iyidir. Ancak bu yöntem tek başına birkaç kimlik bilgisinden daha güvenli olabilir.


1
Katılıyorum. Hangi güvenlik yöntemini kullanıyorsanız kullanın, tel üzerinden tahmin edilemeyen baytlar göndermeye başlar. Doğru şekilde yapılırsa, şifreli kadar iyi bir kimlik gönderiyorsunuz, kimlik alanınızla ilgili herhangi bir bilgiyi sızdırmıyor, ve kişilerin gizliliği gizlilikle "kaydırırken" hakkında konuşurken kullandıklarından daha güçlü olduğunu savunuyorum. "
Marc Stober,

0

Bunun iki yönü var: kullanılabilirlik ve güvenlik.

Güvenlik açısından, gizleyici kimlikler oldukça anlamsızdır; Önemli olan, kimlik bilgisinin asla halka açık olmayan herhangi bir kaynağın tek anahtarı olmamalıdır. Bu, seçilen kullanıcılara belirli bir sayfaya erişim izni vermek istiyorsanız, yalnızca URL’de sayfanın kimliğini istemek yeterli olmadığında, kullanıcı adı / şifre girişi veya genel / özel anahtar kimlik doğrulaması gibi gerçek bir güvenlik mekanizması uygulamanız gerektiği anlamına gelir. uygun izinlerin yanı sıra (yani, sistemin X kullanıcısının Y kaynağına erişmesine izin verilip verilmediğine göre karar verebilmeli ve buna göre davranabilmelidir).

Kullanılabilirlik açısından genel tavsiye, yapay anahtarları gizli tutmaktır: kullanıcı için bir anlamı yoktur ve bunları açık bir şekilde ortaya koyarak, dışarda yaşadığı için kullanımı zor olan ekstra bir bağımlılık ortaya çıkarırsınız. yazılımın bölge - insanlar olacaktır , vb e-posta, faks, baskı, imi, bu kimlikleri not edin ve hiç bunları değiştirirseniz, bazı can sıkıcı destek biletler için konum.


Bir web uygulamasında, insanların herhangi bir nedenle dahili bir kimlikleri yazabilecekleri örnekleri düşünemiyorum. Bir URL’yi veya kimliğini belirten bir şeyi (veya yer işaretini) e-postayla anlayabiliyorum, ancak bu durumda kullanılabilirliğin nerede devreye girdiğini göremiyorum. Onları akış ortasında değiştirmeyi önermedim, ancak bunun nasıl bir sorun olacağına dikkatinizi çekiyorum.
Wesley Murch

@Madmartigan: Özel bilgi sistemlerinde çok nadir değildir. Kullanıcıların bazı şeyleri yapması gerekir ve bazen uygulama doğrudan onları tam olarak desteklemiyor, ya da düz bir şekilde kırılıyor ya da kimliğin doğrudan içinden geçmek, yazılım mimarlarının öngördüğü rotadan daha kolaydır. İnsanlar bu şeylerle çok yaratıcı olabilirler ve bilmeden önce bu 'iç' kimlikleri kendi yaşamlarını sürdürmeye başlar.
tdammers, 13.03.2012

0

Hayır , kesinlikle, yalnızca iç kimliklerini bilerek, keyfi kaynaklara erişime izin vermek istemezsiniz. Bu, size varoldukları için hayal ne olursa olsun, kötü niyetli suç, veya düz çocuksu varlığı internet olduğunu gerçekte var ve er ya da geç olacak sitenize gelmek. Hizmet verebileceğiniz her şey herkes için tamamen halka açık olmadığı sürece (ve bir müşteriniz varsa, olamayacağı garanti edilir), gerçekten sahip olma yetkisi olanlara erişimi kısıtlamanız gerekir .

Alışılmış çözüm, şifreli bir oturumda saklanan bir tür yetkilendirme belirteçlerini kullanmak ve bir şeyi gerçekten göndermeden önce kimliği doğrulanmış kullanıcı tarafından görülebilir olup olmadığını doğrulayan denetler. Bu, JDK ile birlikte gelen veya aynı rolü yerine getirdiği sürece yerine getiren herhangi bir bileşen gibi gerçek bir güvenlik yöneticisi olabilir. (Dahili kimlikleri zaten doğrulanmış olup olmadığına maruz bırakıp maruz bırakmayacağınız aynı zamanda çeşitli avantaj ve dezavantajları olan ilginç bir sorudur, ancak güvenlik açısından daha az önemlidir.)

Bunu yapmanın değerini, aslında iş anlamına gelen biri tarafından saldırıya uğrayana kadar hesaplamak zordur. O zaman genellikle işsiz olmakla bir başka foografik senaryo çocuğundan uzaklaşmak arasındaki fark budur.


2
Sanırım yanlış bir fikre sahip olabilirsiniz, "sadece kendi iç kimliklerini bilerek keyfi kaynaklara erişime izin vermek" demedim, kimliği mevcut güvenlik önlemlerinin üstüne gizlemekten bahsediyorum. Açıkçası, sadece kimliği veya hash'ı bilmek, yetkilendirme olarak değerlendirilmemelidir.
Wesley Murch

0

Açıkçası, verilerin ne kadar hassas olduğuna bağlı, ancak orta güvenlik için yapabileceğim en az şey, kimlik ve sağlama toplamı değerini eklemektir.

Kimlikten önce ve sonra tuz ekleyerek (yani, rastgele karakterlerden oluşan bir küme toplama) ve değer üzerinde bir MD5 yaparak sağlama toplamı oluşturun.

Kimlik değerini okuyan her sayfada, sağlama toplamı değeri oluşturması ve bunu geçen değerle karşılaştırması gerekir, uygun değilse isteği reddeder.

Potansiyel bir bilgisayar korsanı yeterince geçerli kombinasyonlar elde edebiliyorsa, Tuz değerini kaba kuvvetle değerlendirebilir, böylece yardımcı olacak Kullanıcı Kimliğini kontrol etmek gibi başka bir güvenlik katmanı ekleyebilirseniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.