belirteç parametresine sahip https URL'si: ne kadar güvenli?


91

Sitemizde, kullanıcılara özel bilgilerine (bir form aracılığıyla verilir) dayalı bir simülasyon sunuyoruz. Simülasyon sonuçlarına daha sonra geri dönmelerine izin vermek istiyoruz, ancak onları bir oturum açma / parola hesabı oluşturmaya zorlamadan.

Onlara sonuçlarını geri alabilecekleri bir bağlantı içeren bir e-posta göndermeyi düşündük. Ancak, doğal olarak, bu URL'yi güvenli hale getirmeliyiz çünkü özel veriler tehlikede.

Bu nedenle, URL'de bir jeton (40 karakterlik harf ve rakam kombinasyonu veya bir MD5 Hash gibi) geçirmeyi ve SSL kullanmayı planlıyoruz.

Sonunda şöyle bir e-posta alacaklardı:

Merhaba,
Sonuçlarınızı https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn adresinde geri alın

Bu konu hakkında ne düşünüyorsun? Yeterince güvenli mi? Token üretimi için bana ne önerirsiniz? URL parametrelerini bir https isteğinde geçirmeye ne dersiniz?


Yanıtlar:


101

SSL, sorgu parametrelerini aktarım sırasında koruyacaktır; ancak, e-postanın kendisi güvenli değildir ve e-posta, hedefine ulaşmadan önce herhangi bir sayıda sunucuda geri dönebilir.

Ayrıca web sunucunuza bağlı olarak tam URL, günlük dosyalarına kaydedilebilir. Verilerin ne kadar hassas olduğuna bağlı olarak, BT çalışanlarınızın tüm belirteçlere erişmesini istemeyebilirsiniz.

Ek olarak, sorgu dizesini içeren URL, kullanıcı geçmişinize kaydedilerek aynı makinedeki diğer kullanıcıların URL'ye erişmesine izin verir.

Son olarak ve bunu çok güvensiz kılan şey, URL'nin herhangi bir kaynağa, hatta üçüncü taraf kaynaklara yönelik tüm isteklerin Referer başlığında gönderilmesidir. Dolayısıyla, örneğin Google Analytics kullanıyorsanız, Google'a URL jetonunu ve tümünü göndereceksiniz.

Bence bu kötü bir fikir.


1
HTTP yönlendirici sorununu düşünmemiştim, ancak url bağlantısı sonuç sayfasına yönlendiriyordu, uygun bir sayfa olmazdı (google analytics veya diğer üçüncü taraf komut dosyası yok).
Flackou

6
Çoğu tarayıcı, HTTPS'den HTTP'ye geçerken yönlendireni kaldırmıyor mu?
Kevin Mark

2
Bu, kullanıcı aktivasyonu (veya şifre sıfırlama) bağlantısına benzer, değil mi? O zaman bu dava nasıl ele alınmalı? Birçok web sitesi e-postaya sıfırlama url'leri gönderir, tıklanabilir olması gerektiğinden POST bir seçenek değildir. Teşekkür ederim.
pinkpanther

3
öyleyse çözüm nedir?
RT

1
Ya url'deki simge, API istekleri için kullanılan belirteçle aynı değilse ve yalnızca bir saat sürerse, o zaman zararı ne olur?
user1709076

14

Bunun için bir kurabiye kullanırdım. İş akışı şu şekilde olmalıdır:

  1. Kullanıcı sitenize ilk kez geliyor.
  2. Site bir çerez ayarlıyor
  3. Kullanıcı verileri girer. Veriler, çerezde saklanan bazı anahtarlar kullanılarak DB'de saklanır.
  4. Kullanıcı ayrıldığında, ona https: bağlantısı içeren bir e-posta gönderirsiniz
  5. Kullanıcı geri döndüğünde site çerezi keşfeder ve kullanıcıya eski verileri sunabilir.

Artık kullanıcı, farklı bir makinede farklı bir tarayıcı kullanmak istiyor. Bu durumda, bir "transfer" düğmesi sunun. Kullanıcı bu düğmeyi tıkladığında bir "jeton" alacaktır. Çerezi sıfırlamak için bu belirteci başka bir bilgisayarda kullanabilir. Bu şekilde kullanıcı, jetonu ne kadar güvenli aktarmak istediğine karar verir.


4

SSL, aktarım sırasında verilerin içeriğini korur, ancak URL'den emin değilim.

Ne olursa olsun, bir saldırganın bu URL belirtecini yeniden kullanmasını önlemenin bir yolu, her simgenin yalnızca bir kez kullanılabileceğinden emin olmaktır. Hatta meşru kullanıcının bağlantıyı kullanmaya devam edebilmesi için bir çerez bile ayarlayabilirsiniz, ancak ilk erişimden sonra yalnızca çerezi olan biri için çalışacaktır.

Kullanıcının e-postası tehlikeye atılırsa ve bir saldırgan önce bağlantıyı alırsa, o zaman size sorulur. Ancak kullanıcının daha büyük sorunları da var.


11
SSL bağlantısı, URL iletilmeden önce güven altına alınır.
David

1

E-posta doğası gereği güvensizdir. Bu bağlantıya tıklayıp verilere ulaşabilen biri varsa, onu gerçekten korumuyorsunuz demektir.


Kesin, ancak birçok site bununla ilgilenmiyor ve postayla giriş / şifre gönderiyor. Ama bu onları taklit etmek için bir sebep değil ...
Flackou

Bunları taklit etmek için hiçbir neden kabul etmiyorum, ancak genellikle ilk kez oturum açtıktan sonra şifreyi değiştirmenizi söylüyorlar.
Jason Punyon

1

Token, SSL üzerinden geçerken güvenlidir. Sahip olacağınız sorun, URL'yi görüntüleyebilmesiyle (amaçlanmayanlar) insanlara sunulmasıdır.

SSN gibi özel bilgilerse, e-posta yoluyla bir URL göndereceğimi sanmıyorum. Site için bir kullanıcı adı ve şifre oluşturmalarını tercih ederim. Bu tür bilgileri tehlikeye atan bir e-postayı sizin ve onlar için tehlikeye atmak çok kolaydır. Birinin hesabına zarar verilirse, gerçekte kimin hatası olduğu sorulacaktır. Kesin bir CYA açısından ne kadar güvenli olursa o kadar iyidir.


1
Haklısın: URL, örneğin tarayıcı geçmişinde kalacak
Flackou

0

Ciddi gizlilik sorunlarının olduğu bir durum için bunun yeterince güvenli olduğunu gerçekten düşünmem. URL'yi (muhtemelen açık metin) bir e-postayla gönderiyor olmanız, açık ara en zayıf bağlantıdır. Bundan sonra, (gerçek bir kimlik doğrulama mekanizmasının yapısından yoksun), iyi yapılandırılmış bir kullanıcı adı ve parola kurulumundan daha savunmasız olma olasılığı yüksek olan, belirteçlere kaba kuvvet saldırıları riski vardır.

Tesadüfen, https isteğindeki parametrelerle ilgili hiçbir sorun yoktur.


Kaba kuvvet saldırıları riski konusunda haklısın. Botları bu tür saldırılardan nasıl önleyebileceğimizi anlamıyorum. IP'leri "ısrarla" yasaklamak yeterli bir koruma olmayacaktır. Konuyla ilgili fikirleriniz var mı?
Flackou

Aslında, bahsettiğimiz anahtar alanı türüyle, bir if (this_ip_number_has_requested_an_invalid_token_today ()) uyku (5) koyarak; load_simulation betiğinizde tamamen yeterli koruma olacaktır. (Hız sınırlama, iyi kimlik doğrulama mekanizmalarının özelliklerinden biridir.)
kaos

Cevabınız için teşekkürler. Ancak aynı botun farklı IP'leri kolayca alabileceğini düşündüm, bu da IP oranı sınırını yetersiz kılıyordu. Yanlış mıyım?
Flackou

Onları elde eden tek şey, IP başına geciktirilmemiş bir girişimdir. IP adresi alanı, yardımcı olacak kadar kolay erişilebilir değildir.
kaos

0

Olduğu gibi, kötü bir fikir olur. Kolay kullanım ile güvenliği korkutacaksınız. Daha önce söylendiği gibi, SSL yalnızca sunucu ve istemci tarayıcısı arasındaki bilgi aktarımını koruyacak ve yalnızca orta adam saldırısını önleyecektir. E-postalar çok riskli ve güvensizdir.

En iyisi, bilgilere erişmek için bir Kullanıcı adı ve parola kimlik doğrulaması olacaktır.

Kurabiye fikrini az çok seviyorum. Çerez bilgilerini de şifrelemelisiniz. Ayrıca, bir saldırı olasılığını sınırlamak için, salt ve anahtar kelime öbeği artı $ _SERVER ['HTTP_USER_AGENT'] içeren jetonu oluşturmalısınız. Doğrulama kullanımı için müşteri hakkında olabildiğince fazla hassas olmayan bilgiyi çerezde saklayın.

Anahtar kelime, kolay kullanım için çerezde saklanabilir, ancak çerezin de çalınabileceğini unutmayın = (.

Müşterinin, verisiyle birlikte veritabanında da saklanan anahtar ifadeyi yazmasına izin verin.

Veya anahtar, kişinin $ _SERVER ['HTTP_USER_AGENT'] parametrelerinde farklılık gösteren farklı bir makine kullanması veya sadece çerezi kaçırması durumunda kullanılabilir. Böylece çerez aktarılabilir veya ayarlanabilir.

Ayrıca, hassas verilerin veritabanında şifrelenmiş olduğundan emin olun. Asla bilemezsin ;)


-1

Herhangi bir bilgisayar korsanı veritabanınıza erişirse, birçok kişisel bilginin serbestçe verilebileceğinin farkında mısınız?

Ondan sonra bunun fikir kadar kötü olmadığını söyleyebilirim. Hashing için çok güvenli olmadıkları için MD5 veya SHA1'i kullanmam. Kolayca "şifreleri çözülebilir" (şifreleme olmadığını biliyorum).

Aksi takdirde, e-posta ile gönderilmeyen ikinci bir bilgiyi bir parola olarak kullanabilirim. Nedeni oldukça basit, eğer birisi kullanıcının e-postasına erişirse (oturumunuzu sonlandırmazsanız hotmail ile oldukça kolaydır), kullanıcının gönderdiği tüm bilgilere erişebilir.

HTTPS'nin sitenizden son kullanıcıya gönderilen verileri güvenli hale getireceğini ve şifreleyeceğini unutmayın. Başka hiçbir şey, onu güvenli bir tünel olarak kabul edin. Ne daha fazla, ne de daha az.


Tuzlu bir SHA1 hash, kelimenin herhangi bir anlamıyla tam olarak nasıl çözülür?
Eli

"Herhangi bir bilgisayar korsanı veritabanınıza erişirse, birçok kişisel bilginin serbestçe verilebileceğinin farkında mısınız?" Evet, ancak bu tüm web siteleri için bir sorun değil mi ??
Flackou

@Flackou evet, ancak paypal'ın db'sine erişim kazanırsanız, açıkça kaydedilmiş kredi kartı bilgilerini bulamazsınız, her şey şifrelenmiştir. @Eli: theregister.co.uk/2005/02/17/sha1_hashing_broken
Erick

-1

Fikrinizden anladığıma göre, teoride birisi rastgele 40 karakterlik bir dizi veya MD5 karması yazıp başka birinin ayrıntılarını alabilir. Bu pek olası olmasa da, yalnızca bir kez olması gerekir.

Daha iyi bir çözüm, kullanıcıya bir belirteç gönderdikten sonra, adı, posta kodu, ssn veya bunların bir kombinasyonu gibi bazı ayrıntıları girmesini istemektir.


5
SSN? Ciddi misin? Her neyse, kaç tane 40 karakterlik rastgele dizge olduğunu hesaplamanızı öneririm. Bu "pek olasılıktan" daha fazlası
Eli

Haklısın, muhtemelen url'ye e-posta gibi başka bir parametre eklemeliyiz (a..z + A..Z + 0..9 = 62 karakter ve 62 ^ 40 oldukça büyük bir sayı olsa bile).
Flackou

Çocuklar, 62 ^ 40, evrendeki atom sayısından çok daha fazla. Kelimenin tam anlamıyla tahmin edilemez.
Eli

1
Bu sayıların ölçeğini kaç kişinin kavrayamadığına şaşırdım. Saniyede bir MİLYON jeton tahmin ediyor olsaydınız, isabet almadan önce güneşin yanması çok daha muhtemeldir
Eli

4
Richard, genellikle Doğum Günü Paradoksu denen şeye işaret ediyor gibisin ... Önemli olan sadece olası kombinasyonların sayısı değil, kaçının kullanıldığı. Bu durumda, şans önemli hale gelmeden önce 62 ^ 40 kombinasyonun 2 ^ 119'unu kullanmanız gerekir.
erickson
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.