2009-09-23 11 views
10

लॉग फ़ाइलों में जाने से संवेदनशील जानकारी को छिपाने के बारे में आप कैसे जायेंगे? हां, आप जानबूझकर जानकारी के संवेदनशील बिट्स को पहले स्थान पर लॉग न करना चुन सकते हैं, लेकिन सामान्य मामले हो सकते हैं जहां आप असफलताओं पर त्रुटि संदेशों को अंधाधुंध लॉग करते हैं या किसी समस्या की जांच करते समय संदेश का पता लगाते हैं और आपके भीतर लैंडिंग संवेदनशील जानकारी के साथ समाप्त होते हैं। फाइल्स लॉग करें # लॉग फाइलें।लॉग फ़ाइलों में संवेदनशील/गोपनीय जानकारी छिपाना

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

क्या कोई डिज़ाइन प्रतिमान है जिसे जानकारी के कुछ बिट्स को "टैग" करने के लिए नियोजित किया जा सकता है ताकि एक सामान्य लॉगिंग पाइपलाइन उन्हें फ़िल्टर कर सके?

+2

सिफारिश पर serverfault.com से यह सवाल स्थानांतरित करने के लिए: नहीं यह सवाल सॉफ्टवेयर के नजरिए से है। आप यह सुनिश्चित करना चाहते हैं कि आप सॉफ़्टवेयर संवेदनशील हैं जो उपयोगकर्ताओं को संवेदनशील जानकारी को मुखौटा करने में मदद करने के लिए पर्याप्त स्मार्ट हैं। वास्तव में यह वास्तविक जीवन की आवश्यकता है जिसे मैंने वास्तविक जीवन के ग्राहकों से देखा है। –

+0

* आप हैं -> आपका (7 साल बाद) –

उत्तर

7

प्रश्न में मामले के लिए मेरा वर्तमान अभ्यास ऐसी संवेदनशील जानकारी के हैश को लॉग करना है। यह हमें एक विशिष्ट दावे से संबंधित लॉग रिकॉर्ड की पहचान करने में सक्षम बनाता है (उदाहरण के लिए एक विशिष्ट क्रेडिट-कार्ड नंबर) लेकिन किसी को भी लॉग को पकड़ने और उनके बुरे उद्देश्यों के लिए संवेदनशील जानकारी का उपयोग करने की शक्ति नहीं देता है।

बेशक, इसे लगातार करने में अच्छी कोडिंग प्रथाएं शामिल होती हैं। मैं आम तौर पर toString अधिभार (जावा या .NET में) का उपयोग करके सभी ऑब्जेक्ट्स को लॉग करना चुनता हूं जो Sensitive उनके साथ लागू फ़ील्ड के साथ चिह्नित फ़ील्ड के मानों के हैश को क्रमबद्ध करता है।

बेशक, एसक्यूएल स्ट्रिंग अधिक समस्याग्रस्त हैं, लेकिन हम डेटा ओआरएम के लिए हमारे ओआरएम पर अधिक भरोसा करते हैं और विभिन्न चरणों में सिस्टम की स्थिति लॉग करते हैं, फिर SQL क्वेरी लॉग करते हैं, इस प्रकार यह एक गैर-मुद्दा बन जाता है।

+0

मुझे सोर्स को ओवरराइड करने का विचार पसंद है; इस तरह, लॉगिंग कोड को लॉग इन करने के बारे में परवाह नहीं है। हालांकि यह स्मृति डंप के साथ इस मुद्दे को संबोधित नहीं करता है, लेकिन मैं इसे मूल प्रश्न का उत्तर देने के बाद से इसे सबसे अच्छा जवाब मानूंगा। धन्यवाद! –

5

मैं व्यक्तिगत रूप से लॉग फ़ाइलों को संवेदनशील जानकारी के रूप में मानता हूं और उन तक पहुंच प्रतिबंधित करना सुनिश्चित करता हूं।

+0

सच है! मैं उन मामलों के बारे में सोच रहा हूं जहां आप एक सॉफ्टवेयर विक्रेता हैं और सिस्टम क्लाइंट इत्यादि का निदान करने के लिए अपने ग्राहकों से लॉग फाइल भेजने के लिए कह रहे हैं। क्या क्लाइंट पर पहले से ही अपनी लॉग फाइलों को साफ करने के लिए क्लाइंट पर होगा संवेदनशील जानकारी? क्या यह अच्छा नहीं होगा अगर आपके सिस्टम के पास क्लाइंट को मुफ्त में आने का कोई तरीका था? –

+0

"पहुंच प्रतिबंधित करना" क्रेडिट कार्ड की जानकारी के लिए पर्याप्त सुरक्षा प्रदान करने के लिए पर्याप्त विशिष्ट नहीं है। लॉग को एन्क्रिप्ट करने की आवश्यकता है, और डिक्रिप्शन कुंजियों तक पहुंच सुरक्षा नीति में वर्तनी की आवश्यकता है। – erickson

1

आपके उदाहरण में, आपको क्रेडिट कार्ड नंबर एन्क्रिप्ट करना चाहिए या बेहतर, अभी तक इसे पहले स्थान पर संग्रहीत नहीं करना चाहिए।

यदि कहें, तो आप लॉगिन की तरह कुछ और लॉगिंग कर रहे थे, तो आप ***** के साथ पासवर्ड को स्पष्ट रूप से बदलना चाहेंगे।

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

+0

मुझे लगता है कि एन्क्रिप्शन उत्तर हो सकता है: जैसे ही संवेदनशील जानकारी आपके सिस्टम में प्रवेश करती है, यह एन्क्रिप्टेड हो जाती है और एन्क्रिप्टेड के रूप में रहती है। इसलिए, यदि आप निम्न स्तर के लॉगिंग (अर्थशास्त्र-अज्ञेयवादी) कर रहे हैं या यहां तक ​​कि मेमोरी डंप भी कर रहे हैं, तो जानकारी उचित रूप से सुरक्षित होगी। मुझे लगता है कि मुझे अन्य उत्तरों में सुझाए गए अनुसार पूरी लॉग फ़ाइल की बजाय जानकारी एन्क्रिप्ट करने का विचार पसंद है। –

1

यदि आप जानते हैं कि आप फ़िल्टर करने का प्रयास कर रहे हैं, तो आप इसे लॉग करने से पहले एक रेगेक्स सफाई अभिव्यक्ति के माध्यम से लॉग आउटपुट चला सकते हैं।

+0

हां, मैंने इसके बारे में सोचा। वास्तव में, यह एक व्यवहार्य समाधान हो सकता है क्योंकि हमेशा विभिन्न प्रकार के "संवेदनशील" तारों की एक बुद्धिमान संख्या होगी जिसे आप रेगेक्स के साथ पहचान सकते हैं। –

2

क्रेडिट कार्ड नंबर लॉगिंग पीसीआई उल्लंघन हो सकता है। और यदि आप पीसीआई अनुपालन नहीं कर रहे हैं, तो आपसे अधिक कार्ड-प्रसंस्करण शुल्क लिया जाएगा। या तो संवेदनशील जानकारी लॉग न करें, या अपनी पूरी लॉग फ़ाइलों को एन्क्रिप्ट करें।

संवेदनशील जानकारी "टैगिंग" का आपका विचार दिलचस्प है। आपके पास Sensitive जानकारी के लिए एक विशेष डेटा प्रकार हो सकता है, जो वास्तविक, अंतर्निहित डेटा प्रकार को लपेटता है। जब भी यह ऑब्जेक्ट एक वर्ण स्ट्रिंग के रूप में प्रस्तुत किया जाता है, तो यह केवल "***" या जो कुछ भी देता है।

हालांकि, इसे व्यापक कोडिंग परिवर्तनों की आवश्यकता हो सकती है, और पहले स्थान पर संवेदनशील जानकारी लॉग इन करने से बचने के लिए आवश्यक शोर सतर्कता के स्तर की आवश्यकता होती है।

1

एसक्यूएल स्टेटमेंट्स के बारे में विशेष रूप से, यदि आपकी भाषा इसका समर्थन करती है, तो आपको कथन में मूल्य डालने के बजाय पैरामीटर का उपयोग करना चाहिए। दूसरे शब्दों में:

select * from customers where credit_card = ? 

फिर पैरामीटर को क्रेडिट कार्ड नंबर पर सेट करें।

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

+0

सच है। लेकिन यह केवल एसक्यूएल कथन शामिल है। –

+0

यही कारण है कि मैंने इसे "एसक्यूएल कथन के बारे में विशेष रूप से" के साथ prefaced। यह 100% सामान्य होने का इरादा नहीं था। –

+0

नोट किया गया। मैं वास्तव में केस-दर-केस विश्लेषण के बजाय चांदी के बुलेट समाधान की तलाश में था, लेकिन इस जवाब के लिए धन्यवाद! –

0

इस उपकरण का संदर्भ लें, इस उपयोग के मामले के लिए बिल्कुल बनाया गया है।

यदि आप केवल चयनित फ़ील्ड को मास्क करना चाहते हैं, तो लॉगिंग के दौरान और अन्य फ़ील्ड मानों को रखें। आप इसे आजमा सकते हैं।

https://github.com/senthilaru/sp-util

<dependency> 
    <groupId>com.immibytes</groupId> 
    <artifactId>sp-utils</artifactId> 
    <version>1.0.0-RELEASE</version> 
</dependency> 
संबंधित मुद्दे