यह ऐप एक टेक्स्टबॉक्स के साथ एक फॉर्म प्रदर्शित करता है जहां उपयोगकर्ता को दस्तावेज़ को डिक्रिप्ट करने के लिए उपयोग किया जाने वाला पासवर्ड दर्ज करना होता है।, पासवर्ड जैसे संवेदनशील डेटा को संभालने का सही तरीका क्या है?
मैं कोड है कि इस तरह दिखता है:
string password = passwordTextBox.Text;
...
DecryptDocument(password);
लेकिन मुझे बताया गया था कि, तकनीकी तौर पर, यह एक सुरक्षा दोष है, क्योंकि डेटा है कि पासवर्ड का प्रतिनिधित्व करता है स्मृति में रहना हो सकता है के बाद भी आवेदन है बन्द है।
मैं System.Security.SecureString वर्ग का उपयोग करने की कोशिश की लेकिन अब मैं CoTaskMem जो समस्या को बदतर बनाने के लिए लगता है की ओर इशारा के साथ काम कर रहा हूँ:
SecureString password = new SecureString();
foreach(char i in passwordTextBox.Text.ToCharArray())
password.AppendChar(i);
IntPtr ptr = Marshal.SecureStringToCoTaskMemAnsi(password);
int length = password.Length;
byte[] bytes = new byte[length];
Marshal.Copy(ptr, bytes, 0, length);
DecryptDocument(Encoding.Default.GetString(bytes));
Marshal.FreeCoTaskMem(ptr);
आप देख सकते हैं, यह नहीं दिखता है जैसे कि मैं एप्लिकेशन को सुरक्षित बना रहा हूं, क्योंकि जल्दी या बाद में मुझे इनपुट (passwordTextBox.Text) लेना होगा और उसे एक स्ट्रिंग में परिवर्तित करना होगा जिसे मैं DecryptDocument() फ़ंक्शन पर भेज सकता हूं।
क्या इस समस्या को हल करने का कोई तरीका है या क्या मुझे इस सुरक्षा भेद्यता से निपटना चाहिए?
"लेकिन मुझे बताया गया कि तकनीकी रूप से यह एक सुरक्षा दोष है, क्योंकि एप्लिकेशन बंद होने के बावजूद पासवर्ड का प्रतिनिधित्व करने वाला डेटा स्मृति में भी रह सकता है।" ** - हालांकि यह सच है स्मृति में एक यादृच्छिक स्थान में हो। आप कुछ भी नहीं चिंतित हैं। ** "क्या इस समस्या को हल करने का कोई तरीका है या क्या मुझे इस सुरक्षा भेद्यता से निपटना चाहिए?" ** यह क्या भेद्यता होगी? ** –
यह भेद्यता होगी: http: // cwe .mitre.org/डेटा/परिभाषाएं/316.html –
@ रैमहाउंड, यदि आप मेमोरी में यादृच्छिक स्थान में टेक्स्ट रखने के बारे में चिंतित नहीं हैं, तो सिक्योरस्टिंग का उपयोग करने के लायक नहीं है। निष्पक्ष होने के लिए, यह वास्तव में केवल थोड़ी सी सुरक्षा जोड़ता है; मुख्य चिंता क्रैश डंप है, हालांकि वे पहले से ही संवेदनशील जानकारी के सभी प्रकार को रिसाव कर सकते हैं (यानी सबकुछ जो कामकाजी उद्देश्यों के लिए वर्तमान में डिक्रिप्ट किया गया था)। एकमात्र चीज सिक्योरस्ट्रिंग वास्तव में आपको खरीदती है, एक पासफ्रेज लीक करने की कम संभावना है, जो संभावित रूप से एक कुंजी (या शामिल उपयोगकर्ता द्वारा उपयोग की जाने वाली अन्य सेवाओं को समझौता कर सकती है, अगर वे अपना पासफ्रेज पुन: उपयोग करते हैं।) –