कैप्चा के संबंध में: मैं आपको तब तक कैप्चा का उपयोग करने की सलाह दूंगा जब तक कि आपको वास्तव में इसकी आवश्यकता न हो। क्यूं कर?
- यह बदसूरत है।
- यह आपके उपयोगकर्ताओं के लिए परेशान है। आपको अपनी साइट का उपयोग करने के लिए उन्हें हुप्स के माध्यम से कूदना नहीं चाहिए।
हैं कुछ विकल्प है जो बहुत सरल हैं, बहुत प्रभावी हो सकता है और पूरी तरह (लगभग सभी) उपयोगकर्ताओं के लिए पारदर्शी है।
Honeypot क्षेत्रों: "वेबसाइट" की तरह एक आम नाम के साथ अपने रूपों के लिए एक क्षेत्र में जोड़ें। इसके अलावा, "इस बॉक्स में न लिखें" के प्रभाव में कुछ कहकर एक लेबल जोड़ें। जावास्क्रिप्ट का उपयोग इनपुट और लेबल छुपाएं। जब आप फॉर्म सबमिशन प्राप्त करते हैं, यदि फ़ील्ड में कुछ भी है, तो इनपुट को अस्वीकार करें।
जेएस वाले उपयोगकर्ता इसे नहीं देख पाएंगे और ठीक होंगे। जेएस के बिना उपयोगकर्ताओं को बस सरल निर्देश का पालन करना होगा। स्पैम्बॉट इसके लिए गिरेंगे और खुद को प्रकट करेंगे।
स्वचालित अशुद्ध-कैप्चा: यह उपरोक्त के समान है। "Write 'Alex'" (उदाहरण के लिए) कहने वाले लेबल के साथ एक इनपुट फ़ील्ड जोड़ें। जावास्क्रिप्ट का उपयोग करना (और यह जानकर कि सबसे स्वचालित स्पैम बॉट जेएस नहीं चलेंगे), फ़ील्ड को छुपाएं और इसे 'एलेक्स' के साथ पॉप्युलेट करें। यदि सबमिट किए गए फॉर्म में जादू शब्द नहीं है, तो उसे अनदेखा करें।
जेएस वाले उपयोगकर्ता इसे नहीं देख पाएंगे और ठीक होंगे। जेएस के बिना उपयोगकर्ताओं को बस सरल निर्देश का पालन करना होगा। स्पैमबॉट्स नहीं जान पाएंगे कि क्या करना है और आप उनके इनपुट को अनदेखा कर सकते हैं।
यह आपको 99.9% स्वचालित स्पैम बॉट से बचाएगा। यह कुछ भी नहीं करेगा, यहां तक कि थोड़ी सी भी, आपको लक्षित हमले के खिलाफ सुरक्षा प्रदान करता है। कोई भी हनीपॉट से बचने के लिए अपने बॉट को कस्टमाइज़ कर सकता है या हमेशा सही मान भर सकता है।
ब्रूट फोर्स अवरुद्ध के बारे में: सर्वर-साइड समाधान इस स्पष्ट रूप से करने के लिए केवल व्यवहार्य तरीका है। मेरी वर्तमान परियोजनाओं में से एक के लिए, मैंने आपके द्वारा वर्णित एक समान बल बल सुरक्षा प्रणाली लागू की है। यह केकपीएचपी के लिए इस Brute Force Protection plugin पर आधारित था।
एल्गोरिदम काफी सरल है, लेकिन शुरुआत में थोड़ा उलझन में है। DELETE * FROM brute_force WHERE expires < NOW()
रन::
- उपयोगकर्ता कुछ कार्रवाई (पासवर्ड रीसेट, उदाहरण के लिए)
- रन का अनुरोध करता है
SELECT COUNT(*) FROM brute_force
WHERE action = 'passwordReset'
AND ip = <their ip address>
- तो गिनती है
X
से बड़ा तो उन्हें थोड़ी देर प्रतीक्षा करने के लिए बता ।
अन्यथा, चलाएँ:
INSERT INTO brute_force (ip, action, expires)
VALUES (<their ip address>, 'passwordReset', NOW() + Y minutes)
- रीसेट पासवर्ड समारोह के साथ आगे बढ़ें।
यह उपयोगकर्ताओं को केवल वाई मिनट में पासवर्ड X बार रीसेट करने का प्रयास करने की अनुमति देगा। जैसा कि आप फिट देखते हैं इन मानों को ट्विक करें। शायद 5 मिनट में 3 रीसेट? इसके अतिरिक्त, आपके पास प्रत्येक क्रिया के लिए अलग-अलग मान हो सकते हैं: कुछ चीजों के लिए (उदाहरण के लिए: एक पीडीएफ उत्पन्न करें), तो आप इसे 10 मिनट में 10 तक सीमित करना चाहेंगे।
+1 निक बाहर चिल्लाने के लिए धन्यवाद! :) – alex