2012-09-25 21 views
6

सुरक्षित MVC और C# में पासवर्ड रीसेट लिंक बनाने के लिए आपको किस तरह से सुझाव मिलेगा? मेरा मतलब है, मैं यादृच्छिक टोकन बनाउंगा, है ना? उपयोगकर्ता को भेजने के लिए मैं इसे एन्कोड कैसे करूं? MD5 पर्याप्त है? क्या आप किसी अन्य सुरक्षित तरीके से जानते हैं?पासवर्ड रीसेट लिंक कैसे बनाएं?

+0

अधिकांश क्रिप्टोग्राफिक पुस्तकालयों एक क्रिप्टोग्राफी द्वारा यादृच्छिक संख्या पैदा करने के लिए उपकरण है पाने के लिए। आपको हैश, एनकोड या एन्क्रिप्ट करने की आवश्यकता नहीं है। आपको केवल 'यादृच्छिक' वर्ग प्रदान करने से यादृच्छिक यादृच्छिक संख्या की आवश्यकता हो सकती है। – Servy

उत्तर

2

मुझे नहीं लगता कि आपको इस उद्देश्य के लिए एन्क्रिप्टेड स्ट्रिंग की आवश्यकता है। मुझे लगता है कि GUID के साथ एक स्ट्रिंग बनाना पर्याप्त होगा।

string thatString=Guid.NewGuid("n").ToString(); 

उस विशेष उपयोगकर्ता खाते के विरुद्ध अपनी डीबी तालिका में सहेजें। उस उपयोगकर्ता के लिए एक लिंक बनाएं जिसमें यह स्ट्रिंग है और उन्हें भेजें। जब वे उस पर क्लिक करेंगे, तो यह उन्हें एक एक्शन विधि पर ले जाएगा और उन्हें आपके द्वारा संग्रहीत इस अस्थायी स्ट्रिंग से जुड़े संबंधित उपयोगकर्ता रिकॉर्ड मिलते हैं और उपयोगकर्ता को पासवर्ड अपडेट करने के लिए फॉर्म दिखाते हैं।

और यदि आपको कोई संदेह है कि क्या गिड अद्वितीय हैं, तो चेकआउट this

+10

अनोखा! = यादृच्छिक। [GUID को यादृच्छिक होने के लिए डिज़ाइन नहीं किया गया है।] (Http://blogs.msdn.com/b/ericlippert/archive/2012/05/07/guid-guide-part-three.aspx) वे अप्रत्याशित होने के लिए डिज़ाइन नहीं किए गए हैं । वे बस दोहराने के लिए डिजाइन किए गए हैं। – Servy

+0

मैं इस दृष्टिकोण का भी उपयोग करता हूं, गुइड।यदि आप विशिष्टता से परेशान हैं, तो आप गीलेर की जांच कर सकते हैं कि यह डेटाबेस में पहले से मौजूद है। मैंने इस पर एक समयबद्धता भी निर्धारित की है (इसलिए लिंक केवल दो घंटों के लिए क्लिक करने योग्य है) ताकि टकराव पर और भी मौका सीमित हो। – Michel

15

System.Security.Cryptography.RandomNumberGenerator का उपयोग करें जो एक क्रिप्टोग्राफिक-सुरक्षित आरएनजी है। बस उस ईमेल में शामिल करें और इसे बाद में पुनर्प्राप्ति के लिए अपने डीबी में स्टोर करें। मुझे यह हैशिंग में बिंदु नहीं दिख रहा है।

यह यहाँ दस्तावेज़ीकरण किया गया है: http://msdn.microsoft.com/en-us/library/system.security.cryptography.randomnumbergenerator.aspx

using System.Security.Cryptography; 

using(RandomNumberGenerator rng = new RandomNumberGenerator()) { 

    Byte[] bytes = new Byte[8]; 
    rng.GetBytes(bytes); 

    String sendThisInEmailAndStoreInDB = Convert.ToBase64String(bytes); 
} 
1

एक यादृच्छिक संख्या का उपयोग कर की तुलना में बेहतर तो हैश नमक है। https://stackoverflow.com/a/2138588/1026459

मूल रूप से सिर्फ एक पासवर्ड बनाने:

@using System.Security.Cryptography; 
static byte[] GenerateSaltedHash(byte[] plainText, byte[] salt) 
{ 
HashAlgorithm algorithm = new SHA256Managed(); 

byte[] plainTextWithSaltBytes = 
    new byte[plainText.Length + salt.Length]; 

for (int i = 0; i < plainText.Length; i++) 
{ 
    plainTextWithSaltBytes[i] = plainText[i]; 
} 
for (int i = 0; i < salt.Length; i++) 
{ 
    plainTextWithSaltBytes[plainText.Length + i] = salt[i]; 
} 

return algorithm.ComputeHash(plainTextWithSaltBytes);    
} 

आप अपने जवाब यहाँ पर अधिक देख सकते हैं: यहाँ एक सुरक्षा गुरु से एक टुकड़ा है। नमक और हैश यह यहाँ है, और उसके बाद उपयोगकर्ता की वापसी जब इसकी तुलना करें। जुड़े हुए उत्तर में तुलनात्मक विधि और नमक/हैशिंग की गहराई से स्पष्टीकरण में भी अधिक शामिल है।

1

दरअसल, मैं इनमें से कोई भी नहीं करता।

मुझे एक ही समस्या का सामना करना पड़ा और मैंने रीसेट टोकन भेजने का फैसला किया और ऐसा करने के लिए मैंने एक जेडब्ल्यूटी टोकन का उपयोग किया।

उस टोकन (जो एन्क्रिप्टेड है) पर आप एक समाप्ति सेट कर सकते हैं। बस ग्राहक ईमेल पते सहित एक रीसेट टोकन बनाएं और फिर अपनी समाप्ति सेट करें, इसे अपने डेटाबेस में (अपने एन्क्रिप्टेड रूप में) स्टोर करें और इसे एन्कोड करें और यूआरएल पैरामीटर के रूप में लिंक पर रखें।

फिर जब आप अनुरोध प्राप्त करते हैं तो आप टोकन सत्यापित कर सकते हैं सत्यापित कर सकते हैं। इसके बाद आप इसे ईमेल पते पर अनपैक कर सकते हैं और फिर उन्हें अपने खाते के लिए अपने सुरक्षित पासवर्ड रीसेट क्षेत्र में निर्देशित करने के लिए आगे बढ़ सकते हैं। (आप उपयोगकर्ता नाम आदि जैसे अन्य दावों को शामिल कर सकते हैं)।

जेडब्ल्यूटी implemnetation आप टाइप कर सकते Install-Package JWT

+0

इस टोकन के डिबगिंग के साथ आप क्या करेंगे? इस तरह के टोकन में सभी जानकारी निकालना संभव है: ईमेल, समाप्ति तिथि ... –

संबंधित मुद्दे