Önceden paylaşılan tanımlayıcı olmayan kullanıcıların tek bir defa kimlik doğrulaması için Stratejiler

4 Cevap php

Ben isimleri ve e-posta adreslerinin bir listesini alır ve bizim departmanın güvenli web sitesine kayıt olmak için onları davet eden bir e-posta gönderen bir komut dosyası oluşturma. Isimleri ve e-postaların listesi aynı sitede bir kamu bakan sayfada mevcuttur. Ben onlara hesap kayıt sayfasına e-postadaki bir bağlantıyı takip bunları tespit edecek benzersiz bir belirteç vermek için bir yol gerekir. Kullanıcı sadece hesabı oluşturmak ve onların ilk şifre koymak için, bir kez belirteci kullanarak olacaktır.

Ne belirteç oluşturmak için en iyi yöntem olacaktır? Rastgele bir dize bir veritabanında saklanır? Kullanıcı bilgileri ve bir tuzundan oluşan bir karma? Başka bir şey? Ben bu yöntemin güvenlik anlıyorum hafif olan bireysel e-posta davet, gizlilik bağlı olduğunu anlıyoruz.

4 Cevap

Neden özellikle bir karma olması gerekiyor? Sadece bağlantı parçası olarak yeni kullanıcı adınızı koymak, ve rastgele istediğiniz ne olursa olsun uzunluğu bir kimlik doğrulama belirteci oluşturmak ve onlar doğrulamak kadar, kendi kullanıcı adıyla bağlantılı veritabanında, bu mağaza.

Bu yüzden e-posta olsun bağlantı gibi bir şeydir:

http://domain.com/confirm.php?user=Chad&t=AB14CD05

Herhangi çarpışmalar var eğer gerçekten önemli değil, yine de oldukça düşük bir risk olayı var. Ne başkası ... onlar için kendi e-posta adresini onaylamak olabilir, yine de yanlış gidebiliriz? Eğer endişe nelerdir? Eğer biraz daha ayrıntılı olarak tüm süreci açıklamak Belki de, ben daha iyi ihtiyaçlarınızı anlamak istiyorum.

Birçok farklı hash algoritmalar vardır. Eğer güvenli bir karma gerek yok çünkü, sizin için daha iyi çalışacak görmek için bu linke bakmak olabilir. Ayrıca SSL lib 8 karakter md4 hash oluşturmak nasıl görmek için bakmak olabilir.

http://www.partow.net/programming/hashfunctions/#top

Neden sadece kullanıcının kimliği ile göndermek için rastgele bir 64-bit sayı atamaz. , 64-bit sayısını alın 5-bitlik parçalar halinde onu kırmak, ve 32-karakter alfabeye dizin için her 5-bitlik bir yığın kullanın: 23456789ABCDEFGHJKLMNPQRSTUVWXYZ (elverişli 01IO atlama). 64-bitlik bir sayı ve (sonuncusu hariç) 5-bits/code ile 13 karakter sülük kullanıcıyı tanımlamak için kullanılacak olsun. İsterseniz 2 rasgele karakterler ile ped bunu 5 karakterden oluşan 3 grup vermek olabilir.

Id ve giriş url slug parçası olun. Onlar aynı olduğundan emin olmak için veritabanı kimliği ile saklanan külçenin değerini kontrol edin. Ben en çok amaçlar için bu tahmin etmek son derece zor yapmak için yeterince büyük bir değer olacağını düşünüyorum - sayı sonuçta rastgele - Hangi kullanıcı kimliği ile gider sümüklüböcek. Bir kriptografik güçlü rasgele sayı üreteci kullanarak, ben hatta herhangi bir kullanıcı için numaralarını tekrar olsun istiyorum ki son derece düşüktür olacağını düşünürdüm.

Bu gibi görünebilir:

http://example.com/activate?userid=bgates&validate=GY45M-RHQBN-32GYM

Bilinen değerler bir hash kullanarak aslında daha kolay birisi rastgele bir sayı kullanarak daha doğru kodu tahmin için yapmak olabilir. Bir karma birini kullanarak sadece çeşitli hash algoritmalar yoluyla bunları kullanarak ve çalıştırmak konum bitleri tahmin etmek vardır. Birisi Birlikte bu parçası için mümkün ise, bir kaç örnek verildi demek ve çeşitli kombinasyonları denemek için yeterli zaman, o zaman birinin kod çatlamak için yapmanız gereken belirli bir kişi için (muhtemelen) yaygın bilinen özelliklerini belirlemek ve kimliğine bürünmek için bu kullanmaktır onlara ve bir hesap oluşturun. Her birey atanan güçlü bir rasgele sayı ile sadece bir kaba kuvvet saldırısı ile kalacaksın.

Çıkış gperf.

GNU gperf is a perfect hash function generator. For a given list of strings, it produces a hash function and hash table, in form of C or C++ code, for looking up a value depending on the input string. The hash function is perfect, which means that the hash table has no collisions, and the hash table lookup needs a single string comparison only.

Ayrıca CMPH - C Minimal Perfect Hashing Library

Ilgili çeşitli SO soru vardır: