2012-01-31 12 views
9

मेरे पास एक वेब एप्लिकेशन है जिसका उपयोग बहुत से गैर-तकनीकी उपयोगकर्ताओं द्वारा किया जाता है। मैंने पाया है कि इनमें से कई उपयोगकर्ता एप्लिकेशन के लॉगिन पेज को अपने डेस्कटॉप पर सहेज रहे हैं (जो संबंधित सीएसएस और जेएस फाइलों को भी बचाता है)। फिर, एप्लिकेशन का उपयोग शुरू करने के लिए, वे उस डेस्कटॉप आइकन पर डबल क्लिक करें जो फ़ाइल: // प्रोटोकॉल का उपयोग कर स्थानीय प्रतिलिपि दिखाता है।उपयोगकर्ताओं को स्थानीय रूप से सहेजे गए HTML लॉगिन पृष्ठ से वेब एप्लिकेशन तक पहुंचने से कैसे रोकें?

इससे बाद में समस्याएं हो सकती हैं, उदा। अगर मैं लॉगिन फॉर्म, या यूआरएल को पोस्ट करता हूं, आदि। इसके अलावा, कुछ जावास्क्रिप्ट उपयोगिताओं, उदा। PIE.htc फ़ाइल: // प्रोटोकॉल का उपयोग कर काम नहीं करता है।

जाहिर है कि उन्हें क्या करना चाहिए ब्राउज़र ब्राउज़र/पसंदीदा सहेजना, मैं उन उपयोगकर्ताओं को पहचानने और चेतावनी देने का एक तरीका ढूंढ रहा हूं, बाकी के भ्रमित किए बिना। मैं इन उपयोगकर्ताओं को सचेत करने के कुछ जावास्क्रिप्ट का उपयोग कर दिया गया है:

if (top.location.protocol == 'file:') { 
    alert('This application is not designed to be accessed from a desktop copy...') 
} 

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

क्या किसी और को यह समस्या है और वे चालाक समाधान के साथ आते हैं जिन्हें वे साझा करना चाहते हैं?

धन्यवाद

अद्यतन:

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

यदि उपयोगकर्ता ने स्थानीय रूप से लॉगिन पृष्ठ सहेजा है, तो कुकी के मुकाबले सहेजे गए फॉर्म में उनके पास अलग-अलग गैर मूल्यों की संभावना होगी (यदि उनके पास कुकी है)।

आम तौर पर एक लॉगिन फॉर्म में सीएसआरएफ सुरक्षा (जो यह है) यह नहीं जोड़ता है, लेकिन यह मेरी आवश्यकताओं को पूरा करता है। मैंने रजिस्टर, http://www.theregister.co.uk/2009/10/02/google_web_attack_protection/ पर इस तकनीक के बारे में पढ़ा है, Google ने लॉगिन अनुरोधों, http://en.wikipedia.org/wiki/Cross-site_request_forgery#Forging_login_requests के फोर्जिंग के खिलाफ सुरक्षा के लिए अपने लॉगिन फॉर्मों के लिए समान सुरक्षा लागू की है।

उत्तर

1

शायद कुकीज़? यदि साइट file:\\ के साथ चल रही है तो शायद अनुरोध के भीतर कोई कुकीज़ नहीं है। (बेशक, अब आपको अपने लॉगिन पेज पर कुछ कुकी (सत्र डेटा) जोड़ना चाहिए।

इसके अलावा, सीएसआरएफ http://en.wikipedia.org/wiki/Cross-site_request_forgery और विधि को रोकने के बारे में पढ़ें।

+1

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

+0

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

1

आप शायद सर्वर पक्ष पर http संदर्भकर्ता की जांच कर सकते हैं और उपयोगकर्ताओं को आपके होस्ट किए गए लॉगिन फॉर्म से नहीं आते हैं।

संपादित करें:

वास्तव में, एक अस्पष्ट समान प्रश्न से पहले कहा गया है और एक अच्छा स्पष्टीकरण क्यों रेफरर एक आदर्श समाधान नहीं है मिल गया है और यह भी एक विकल्प के समाधान प्रदान करता है: How to check if a request if coming from the same server or different server?

+0

मैंने यह कोशिश की थी, यह आदर्श समाधान की तरह लग रहा था, लेकिन ऐसा लगता है कि आईई और क्रोम (जिन्हें मैंने परीक्षण किया है) फ़ाइल से जाने पर रेफरर नहीं भेजते हैं: // से http: // –

+1

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

+0

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

0

संदेश की बजाय आप रीडायरेक्ट कर सकता है आपका उपयोगकर्ता वास्तविक पृष्ठ पर लॉगिन फॉर्म है, या सहायता बॉक्स दिखाएं जो समझाएगा कि उपयोगकर्ता को इस तरह से पृष्ठ को सहेजना चाहिए।

2

मुझे लगता है कि आपकी सबसे अच्छी शर्त उपयोगकर्ताओं को भौतिक फाइलों को सहेजने के बजाय बुकमार्क का उपयोग करने के लिए शिक्षित करने जा रही है।

इसके अलावा, शायद लॉगऑन के दौरान, शायद आपके यूआरएल में एक शॉर्टकट बनाने का एक तरीका है?

+0

यह एक अच्छा विचार है, मैंने उन साइटों को देखा है जिनमें 'बुकमार्क जोड़ें' लिंक हैं (जो शायद जावास्क्रिप्ट का उपयोग करते हैं)। मैं इसे लागू करने की संभावना रखूंगा, लेकिन इस बिंदु पर मुझे मौजूदा उपयोगकर्ताओं को चेतावनी देने की आवश्यकता है जिन्होंने पहले से ही यह किया है। –

1

क्यों, अलर्ट के बजाय, आप अपने पृष्ठ पर रीडायरेक्ट क्यों नहीं करते?

window.location = 'http://www.yourdomain.com' 

या आप भी आप एक सत्र चर उस रूप में एक छिपा चर के रूप में सेट किया गया है निर्धारित कर सकते हैं window.location.reload();

+0

प्रश्न में कहा गया है कि HTML पृष्ठ पहले ही क्लाइंट द्वारा सहेजा गया था, इसलिए संशोधित नहीं किया जा सकता है। मैं यह जानना चाहता था कि कौन से उपयोगकर्ता स्थानीय रूप से सहेजी गई प्रतिलिपि के माध्यम से दृष्टि तक पहुंच रहे थे। साथ ही, फ़ाइल को पुनः लोड करना: // पृष्ठ केवल स्थानीय प्रतिलिपि को फिर से लोड करेगा –

0

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

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