Gizli verileri istemci tarafı web uygulamasında güvenli bir şekilde depolama


11

Tüm istemci tarafı teknolojisi (HTML, CSS, JavaScript / AngularJS, vb ...) olacak bu web uygulaması var. Bu web uygulaması verilere erişmek ve verileri değiştirmek için REST API ile etkileşime girecektir. Şu anda REST API'nin ne tür bir kimlik doğrulama sistemi kullanacağına karar verilmemiştir.

Anladığım kadarıyla, her türlü API kimlik doğrulama sistemi (API Anahtarları, OAuth 1/2, vb ...) gizli tutulması gereken belirli verilere sahip olacak, aksi takdirde erişim tehlikeye girebilir. API Anahtarları için, anahtarların kendileri gizli olmalı, OAuth 2 için istemci gizli / erişim belirteçleri / yenileme belirteçleri gizli tutulmalı, eminim OAuth 1'de yer alan 4 anahtardan birkaçının gizli tutulması gerekiyor (değil OAuth ile çok fazla deneyim 1). Sunucu tarafında bir tür orta katman olmadan saf bir istemci tarafı web uygulamasında bu gizli şeyler saklamak için bir yol olup olmadığını düşünmeye çalışıyorum.

Bunu düşünmeye çalışıyorum ve bunu yapacak bir yer düşünemiyorum. Yani herkes sadece kaynağı görüntüleyebilir veya konsolu açabilir ve veri alabilir çünkü ben javascript saklayamıyorum. LocalStorage'ın ne kadar güvenli olduğundan ve kullanıcıların bu verilere erişip erişemeyeceğinden% 100 emin değilim. Yerel depolama güvenli olsa bile, veri almayı iki şekilde düşünebilirim. Bunun bir yolu, verileri aklıma gelen en güvensiz şey olan javascript kaynak kodunda depolamaktır. Şimdi, geri kalan api'nin kendisinin jetonları vereceği OAuth 2 gibi bir şey kullanıyor olsaydım, bu hala o kadar güvenli olmazdı (ilk seçenekten daha iyi) çünkü bu jetonlar, bilgisayarın yaptığı istekleri görebiliyordu.

İstemci tarafını tamamen çalıştıran bir uygulamanın, sunucu tarafında bir tür orta katman olmadan gizli veri parçalarını güvenli bir şekilde depolayabilmesinin bir yolu var mı?



Localstorage tarayıcıya özgüdür, ancak Windows'ta Opera'yı örnek olarak alırsak, kullanıcının profil klasöründeki bazı disk dosyalarıdır, bu yüzden aslında korumasızdır.
Ross Patterson

Bir yolu bir db sunucuda sırrı tutmak ve sadece istemci üzerinde application_id sahip olmak olacaktır. Sonra sunucudan oauth sorgusu yapın, bu yüzden bu bir çeşit proxy yaklaşımı.
Simon Polak

Yanıtlar:


9

Hayır, asla tamamen güvenli olamaz. Kullanıcı donanımı kontrol ediyor ve bir şeyi ellerinden uzak tutmaya çalışıyorsunuz. Nihayetinde, bunu bir şekilde elde edebilirler. Javascript'ten çalıştığınız için, konumunuz normal bir bilgisayar uygulamasından çok daha kötüdür, sadece kullanıcı donanımı kontrol etmekle kalmaz, aynı zamanda içinde çalıştığınız korumalı alanı kontrol eder.

Bir şeyleri saklayabilir ve bir şeyler elde etmeyi zorlaştırabilirsiniz, ancak sonunda yeterince uğraşırlarsa bunu çıkarabilirler.


4
^ Bu. Gizli veriler ne kadar "gizli" dir ve bu verileri korumak için ne kadar zaman ve paraya değer? "Endüstri standardı" çabaları yeterli olabilir.
DaveE

+1 Mükemmel cevap. Bir JavaScript hata ayıklayıcı ile, uygulamanızı değiştirebilir, ara değerleri görüntüleyebilirim, vb . Bilgi istersem, alacağım.
Ross Patterson

2

Güvenlik sistemleri tasarlanırken tehdit modeli her zaman düşünülmelidir. " Güvenli kılın ", işlem yapılabilir veya doğrulanabilir değildir. " Kullanıcının uygulamadan erişim belirteçlerini çıkarmasını engelle " çok daha iyidir ve çözümün sınırlarını tanımlar. " Başkalarının bir kullanıcının erişim belirteçlerini edinmesini önle " de daha iyidir ve tamamen farklı bir çözüm alanı tanımlar. Birinin çözümleri mutlaka diğerini çözmeyecektir ( örneğin , WiFi varsa kesinlikle ikincisi SSL gerektirir, ancak bu birincisini etkilemez).


0

bir seçenek, REST API'sinin kullanıcı oturumunu temel alarak erişim izni vermesidir; erişimi doğrulamak için diğer REST API çağrılarına geçirilebilen, oturuma dayalı bir belirteç (guid, hashed dize) döndürebilir

kullanıcı oturum açma bilgilerini istemci makinede depolamaktan endişe ediyorsanız, girmeyin, ancak kullanıcının her seferinde hesap ve şifre bilgilerini girmesi gerekir

OAuth ve arkadaşlarına aşina değil, ancak kimlik doğrulama bilgilerini kalıcı olarak saklamak için yukarıda zorlayıcı bir neden göremiyorum ...


Sebeplere gelince, her zaman "güvenlik" ve "güvenlik" in ayağı olan "konfor" vardır.
henon
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.