अगर मैं सही ढंग से समझता हूं तो इस कार्य को कैप्चा की आवश्यकता नहीं है। मुझे लगता है कि आप देखना चाहते हैं कि उपयोगकर्ता ने अपने पीसी के सामने बैठकर खुद को क्लिक किया था या नहीं।
नया विचार
रखो एकाधिक छवि आपका प्रपत्र पर सबमिट:
<input type="image" name="send1" src="buttons.php?i=1" />
...
<input type="image" name="send8" src="buttons.php?i=8" />
जब एक रूप में 1 से 8 के बीच एक यादृच्छिक संख्या हो और $_SESSION['submitnumber']
में सहेज पैदा होता है। दो समान आकार की छवियां बनाएं - एक डिफ़ॉल्ट रूप से आपकी डिफ़ॉल्ट पृष्ठभूमि से भरा खाली, दूसरा सबमिट बटन की तरह दिख रहा है। buttons.php इस कोड के साथ कि इच्छा उत्पादन चित्र बनाने:
header("Content-Type: image/jpeg");
flush();
readfile($filename);
और खाली छवि वापस आ यदि किसी और $_GET[i]!=$_SESSION['submitnumber']
प्रस्तुत छवि वापस आ।
प्रपत्र स्वीकार करता है, तो सही imagesubmit क्लिक किया गया था (ब्राउज़र जब उपयोगकर्ता बटन पर क्लिक करता आप send1X तरह coords भेज देंगे)
यह कैप्चा का एक प्रकार है, लेकिन लोगों को पता नहीं होगा;)
रूपों है कि काफी अद्वितीय हैं के लिए टोकन जनरेट करें: वर्ष विचार
आप दो चीजों की जरूरत है।
<input type="hidden" name="timertoken" value="someweirdstring" />
डालें और "someweirdstring" को कुछ (उपयोगकर्ता नाम और समय) - एमडी 5 हैश उत्पन्न करने के लिए उत्पन्न करें।मैं इस पर विस्तार कर सकता हूं, लेकिन यह सुरक्षा और सीएसआरएफ हमलों को अवरुद्ध करने के लिए एक बुनियादी रूप टोकन है। पोस्टिंग के बाद टोकन सत्यापित किया जाता है।
उदाहरण:
यह नहीं टोकन तंत्र का एक विशिष्ट कार्यान्वयन है, लेकिन यह पर्याप्त होगा।
$token=generatesomerandomtext();
$_SESSION['token']=$token;
//... somewhere later when outputing forms:
echo '<input type="hidden" name="token" value="'.$token.'" />';
//and when it comes back:
if($_POST['token']==$_SESSION['token']) {
//it's ok
}
और यह सब आपको चाहिए। यह सरल उदाहरण प्रत्येक पृष्ठ के लिए एक अद्वितीय टोकन बनाता है और रूपों में रखता है। यह समय पर निर्भर नहीं है और एमडी 5 का उपयोग नहीं करता है, लेकिन सत्र में टोकन स्टोर करता है। स्वचालित रूप से एक फॉर्म भेजने के लिए जिसे स्वीकार किया जाएगा व्यक्ति को उस फॉर्म का उपयोग करना होगा जिसे आपने जेनरेट किया है या टोकन कॉपी किया है।
असली फॉर्म टोकन उदाहरण इस तरह अधिक होगा: $ टोकन = एमडी 5 ($ उपयोगकर्ता नाम। 'कुछ गुप्त पाठ'। $ दिनांक। $ TimeRoundedTo10Minutes);
//... somewhere later when outputing forms:
echo '<input type="hidden" name="token" value="'.$token.'" />';
//and when it comes back:
if(
($_POST['token']==md5($username.'some secret text'.$date.$timeRoundedTo10Minutes)) ||
($_POST['token']==md5($username.'some secret text'.$date.$timeRoundedTo10Minutes-10minutes))) {
//it's ok
}
उपयोगकर्ता नाम क्यों? चूंकि यह किसी अन्य उपयोगकर्ता को हैक करने के लिए एक उपयोगकर्ता के टोकन का उपयोग करने की संभावना को हटा देता है क्यों गुप्त पाठ (जिसे 'नमक' कहा जाता है)? क्योंकि कोई समय के साथ अन्य उपयोगकर्ता के नाम को एक साथ रख सकता है और एमडी 5 कर सकता है, लेकिन नमक का अनुमान लगाए बिना वह नहीं कर सकता। दो तुलना क्यों? क्योंकि अगर अब 22:44:59 है - टोकन 22:40 के साथ उत्पन्न होता है और यदि उपयोगकर्ता इसे भेजता है तो यह 22:45:30 है, इसलिए यह 22:50 तक गोल हो जाता है और यह केवल टोकन से मेल खाता है यदि आप इसे 10 मिनट वापस लेते हैं ।
यह मूल उदाहरण के लिए है। संदर्भ के लिए this प्रश्न देखें।
<input type="image" ...
में अपना सबमिट बटन बदलें क्योंकि यह बटन क्लिक किए गए एक्स और वाई निर्देशांक पोस्ट करता है। मुझे नहीं पता कि विनिर्देशन में इसके साथ कौन आया, लेकिन यह पहली बार इस्तेमाल किया जा सकता है! :)
अब यह देखने के लिए कि उपयोगकर्ता ने खुद को क्लिक किया है या नहीं, आपको यह देखना होगा कि निर्देशांक मौजूद हैं या नहीं (क्लासिक सबमिटिंग उन्हें नहीं भेजेगा) और सरल हैकिंग को अवरुद्ध करने के लिए आप खिलाड़ी के अंतिम एक्स और वाई को भी याद कर सकते हैं सत्र और तुलना करें। प्रत्येक बार अलग-अलग तार भेजने के लिए इसे हैक करना बहुत मुश्किल है।
उपयोगकर्ताओं को अपने फॉर्म की एक प्रतिलिपि बनाने के लिए यादृच्छिक फ़ील्ड के साथ फॉर्म टोकन हैं जो क्लिक निर्देशांक अनुकरण करेंगे। यदि टोकन प्रत्येक बार बदलता है तो फॉर्म फ़ील्ड को ओवरराइड करना मुश्किल होता है।
यह अभी भी उपयोगकर्ताओं की कार्यक्षमता द्वारा हैक करने योग्य है, लेकिन यह बहुत कठिन है। और यदि आपने एक घंटे में एक बार कैप्चा जोड़ा है तो कोई भी लेखन स्क्रिप्ट को परेशान नहीं करेगा जो केवल एक घंटे के लिए मदद करेगा और उसके बाद तोड़ देगा (और कुछ प्रयास और ज्ञान की आवश्यकता है)।
मुझे लगता है कि मेरे पास गैर-कैप्चा समाधान के लिए एक विचार है, लेकिन मुझे अधिक जानकारी चाहिए। वे ऑटो सबमिट का उपयोग कैसे करते हैं? आप उन्हें क्या रोकना चाहते हैं? कीबोर्ड से दूर होने पर बहुत तेज़ और अक्सर सबमिट करना, या सबमिट करना? – naugtur
मैंने अभी अपना विचार पोस्ट करने का फैसला किया है, लेकिन आप अभी भी – naugtur