2010-01-27 12 views
7

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

$.ajax({ 
    type: 'POST', 
    url: 'http://localhost/comments/vote_down/' + post_id 
}); 

अब अपने अभी भी स्थानीय होस्ट पर, लेकिन यह वेब के लिए अंत में मिल जाएगा। क्या होगा यदि कोई व्यक्ति किसी प्रकार की स्क्रिप्ट बनाता है जो will run n times यह यूआरएल http://localhost/comments/vote_down/post_id है।

यहां तक ​​कि उपयोगकर्ता प्रमाणीकरण भी बहुत उपयोगी नहीं है, आप बस अपनी दुर्भावनापूर्ण स्क्रिप्ट को प्रमाणीकृत करने के लिए tweak करें और आप इसे फिर से कर सकते हैं। मैं इस अनुरोध को और अधिक सुरक्षित कैसे बना सकता हूं, मैं क्या कर सकता हूं? धन्यवाद

संपादित

मैं कुछ जवाब, नहीं लोगों को मैं अब तक तलाश रहे हैं देखते हैं।

हो सकता है कि मैं बहुत अधिक उम्मीद कर रहा हूं, क्या ऐसा कोई तरीका है कि मैं इस अनुरोध को सीधे किसी से भी इनकार कर सकता हूं लेकिन किसी को ऐसा करने का प्रयास करने के बाद स्थानीयहोस्ट (या वेबसाइट.com) से रीडायरेक्ट किया गया है।

शायद किसी प्रकार का हेडर प्रमाणीकरण? मैं उसमें बहुत कुछ नहीं हूं, यही कारण है कि मैं पूछता हूं।

संपादित

इसके अलावा क्या मैं एक मिनट के बारे में गलती से पता चला है या तो पहले, मैंने गर्त कुछ इसी तरह के सवाल ब्राउज़ कर रहा था और मेरे फ़ायरबग पर था, मैं पसंदीदा में एक सवाल जोड़ा .. देखा सांत्वना पद प्रतिक्रिया 200 OK तब मैंने इसे देखने के लिए 10 बार की तरह कोशिश की कि मुझे फिर से ऐसा करने के लिए कब खारिज कर दिया जाएगा .. आखिर में मैं ऊब गया .. तो अगर स्टैक ओवरफ्लो ने इसे हल नहीं किया .. मैं क्या करने की कोशिश कर रहा हूं: =)

+1

आप अनुरोध को अस्वीकार करने की जरूरत नहीं है। आपको वोटिंग के संबंध में व्यवसाय तर्क निष्पादित करने की आवश्यकता नहीं है। –

उत्तर

6

कम से कम, आप यह सुनिश्चित कर सकते हैं कि प्रत्येक उपयोगकर्ता केवल एक बार मतदान कर सके।

  • यदि उपयोगकर्ता लॉग इन नहीं है, तो वोटिंग को कम न करें।
  • यदि उपयोगकर्ता लॉग इन है, तो प्रति टिप्पणी एक वोट पर मतदान प्रतिबंधित करें (चाहे वे ऊपर से नीचे तक मतदान कर सकते हैं या नहीं)
  • यदि आप अनियंत्रित उपयोगकर्ताओं को वोट देना चाहते हैं, तो उन्हें लॉक करें कुकीज़ और आईपी पता और उपयोगकर्ता की जांच।

    • एक कैप्चा

    अपने संपादित के जवाब में लागू:

    यदि आप हैं

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

अपने दूसरे संपादित के जवाब में:

200 की स्थिति कोड केवल इसका मतलब है कि http अनुरोध सफल रहा था, क्या आवेदन तर्क अनुरोध के साथ क्या करने का फैसला किया एक पूरी तरह से अलग मुद्दा है। आप वोट से इंकार कर सकते हैं और एक 200 वापस कर सकते हैं, जैसे आप 403 वापस कर सकते हैं (जो शायद इस मामले में अधिक उपयुक्त होगा)।

+0

@ वाहक डाउनवॉटेड: एक कारण पोस्ट करना अच्छा होगा :) –

+0

लेकिन हर बार जब मैंने सफलता हासिल की तो मुझे सफलता मिली "यह" सफलता ": सत्य," न्यूस्कोर ": 2," संदेश ": शून्य," LastVoteTypeId ": null} " –

+0

इसका मतलब यह नहीं है कि स्कोर बदल गया था, एक सफल अपवर्त रिटर्न: {" सफलता ": सत्य," न्यूस्कोर ": 2," संदेश ":" "," LastVoteTypeId ": 2} डाउनवोट: { "सफलता": सच है, "NewScore": 0, "संदेश": "" "LastVoteTypeId": 3} कुछ नहीं होता: { "सफलता": सच है, "NewScore": 1, " संदेश ": शून्य," LastVoteTypeId ": शून्य} –

0

मुझे लगता है कि आपको ट्रैक करने की आवश्यकता है कि कौन से (प्रमाणित) उपयोगकर्ता किस आइटम पर मतदान करते हैं, और प्रत्येक उपयोगकर्ता को प्रत्येक आइटम पर केवल एक बार वोट करने की अनुमति देता है।

0

उपयोगकर्ता लॉगिन करें और यह देखने के लिए जांचें कि क्या उन्होंने इसे ऊपर/नीचे वोट दिया है, जिसके बाद उपयोगकर्ता को एक लिंक जोड़ने के लिए वोट तालिका की आवश्यकता होगी, उम्मीद है कि आईडी के माध्यम से।

आशा इस मदद करता है,

3

आपके पास एक पोस्ट आईडी के लिए वोट मिलान स्टोर की तुलना में अधिक क्या करना है जा रहे हैं। आपको प्रत्येक व्यक्तिगत वोट कास्ट के लिए एक रिकॉर्ड स्टोर करना होगा।

अपने डेटाबेस स्कीमा के लिए सेट होते ही, आप प्रत्येक वोट के साथ अतिरिक्त जानकारी संबद्ध करने के लिए शुरू कर सकते हैं -

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

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

आप आगे भी जा सकते हैं और किसी को सिस्टम गेमिंग करने का पता लगाने की कोशिश कर सकते हैं और फिर उन्हें कुछ समय के लिए ब्लैकलिस्ट कर सकते हैं।

+0

- Stackoverfl ओउ उससे परे चला जाता है और उपयोगकर्ताओं को उनके वोट पूर्ववत करने और उन्हें दोबारा करने की अनुमति देता है। मुझे यह पसंद है .. और मैं इसे भी करने की कोशिश कर रहा हूं –

+1

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

0

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

1

आपको टोकन के माध्यम से प्रमाणित करना होगा।

संभावित रूप से, मैं सिर्फ <img src="http://localhost/comments/vote_down/1"> प्रिंट कर सकता हूं और अपनी साइट तक पहुंचने वाले उपयोगकर्ताओं से वोट कास्टिंग शुरू कर सकता हूं।

तुम क्या करना चाहिए सर्वर की ओर से मान्यता है, मान लीजिए कि आप अपने सर्वर पर एक MD5 हैश (md5(1) = c4ca4238a0b923820dcc509a6f75849b)

http://localhost/comments/vote_down/1?hash=c4ca4238a0b923820dcc509a6f75849b 

के खिलाफ मान्य होगा अब आप post_id हैश और हैश अगर जांच करना चाहिए जाने पैराम मैच, अगर ऐसा होता है, तो वोट करने की अनुमति दें।

लेकिन तब मैं अभी भी बस के माध्यम से <img src="http://localhost/comments/vote_down/1?hash=c4ca4238a0b923820dcc509a6f75849b">

जानने के बिना उन से स्पैमिंग वोट रख सकता है आपको बस इतना करना दोनों post_id और user_id (सत्र से) hashing है होगा क्या, कि जिस तरह से एक हैश से एक उपयोगकर्ता जीता दूसरे के समान नहीं है।

User: 1 
Post_id: 1 
md5(11) = 6512bd43d9caa6e02c990b0a82652dca 

User: 2 
Post_id: 1 
md5(12) = c20ad4d76fe97759aa27a0c99bff6710 

जाहिर है, आपको हैश फ़ंक्शन को नमक करना चाहिए, लेकिन यहां तक ​​कि इसके साथ भी, आपका ऐप उस तरह से सुरक्षित होगा।

+0

इस तरह का एक अच्छा विचार! : डी –

+0

मैं यह नहीं देख रहा हूं कि यह आपको वोट आईडी के साथ उपयोगकर्ता आईडी को जोड़ने के लिए क्या लाभ प्राप्त करता है। यह अतिरिक्त कार्यक्षमता के लिए अतिरिक्त जटिलता प्रतीत होता है। –

+1

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

1

मुझे आशा है कि यह आपके प्रश्न का उत्तर देने में मदद करने के लिए कुछ रास्ता तय करेगा। इस वेबसाइट को देखें: https://panopticlick.eff.org/। असल में यह आपके विभिन्न सिस्टम सेटिंग्स, फोंट स्थापित, ब्राउज़र क्षमताओं, टाइमज़ोन इत्यादि के आधार पर आपको पहचानने का प्रयास करता है। मैंने इसे अभी अपने कार्यालय के आसपास भेज दिया है और अब तक हम सभी अद्वितीय हैं।

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

मुझे लगता है कि मैं समस्या के लिए एक बहु-स्तरीय दृष्टिकोण लेने के इच्छुक हूं। चूंकि कोई भी विधि पूरी तरह से सुरक्षित नहीं है, आप जो कुछ भी कर सकते हैं उन्हें ढेर कर सकते हैं।

  • , जब तक वे कुकीज़ सक्षम होना
  • उपयोगकर्ताओं को, जो अपने सिस्टम की स्थापना के हैश (फोंट के हैश स्थापित के आधार पर
  • प्रोफ़ाइल उपयोगकर्ताओं में लॉग इन नहीं कर रहे हैं के लिए कॅप्चा लागू लोगों को वोट करने के लिए अनुमति न दें ब्राउज़र क्षमताओं, समय क्षेत्र, आदि)
  • ताकि उपयोगकर्ताओं को वोट करने के लिए

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

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

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

आशा इस

चीयर्स में मदद करता है इयान

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