2011-09-16 14 views
9

पर "अवैध साइट-निजी-कुंजी" प्राप्त करना जारी रख सकता हूं शायद आप लोग इसके साथ मेरी सहायता कर सकते हैं। मैं अपने node.js एप्लिकेशन में reCAPTCHA को लागू करने की कोशिश कर रहा हूं और इससे कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, मैं को प्रतिक्रिया के रूप में "अवैध साइट-निजी-कुंजी" प्राप्त करता हूं।मैं अपने reCAPTCHA सत्यापन अनुरोध

यहाँ बातें मैं दोगुना और डबल की जाँच की और कोशिश की हैं:

  1. सही कुंजी
  2. कुंजी बदली नहीं कर रहे हैं
  3. कुंजी "वैश्विक कुंजी" के रूप में मैं स्थानीय होस्ट पर परीक्षण कर रहा हूँ कर रहे हैं और सोचा था कि यह हो सकता है एक ही समस्या

आखिरी बात मैं - कि

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

    privatekey=6LcHN8gSAABAAEt_gKsSwfuSfsam9ebhPJa8w_EV&remoteip=10.92.165.132& challenge=03AHJ_Vuu85MroKzagMlXq_trMemw4hKSP648MOf1JCua9W-5R968i2pPjE0jjDGX TYmWNjaqUXTGJOyMO3IKKOGtkeg_Xnn2UVAfoXHVQ-0VCHYPNwrj3PQgGj22EFv7RGSsuNfJCyn mwTO8TnwZZMRjHFrsglar2zQ&response=Coleshill areacce

    वहाँ कुछ इस प्रारूप के साथ गलत है: तो यह अनुरोध शरीर मैं वर्तमान में (कुंजी और आईपी बदल गया है, लेकिन मैं उन्हें अपने पक्ष पर जाँच) भेज रहा हूँ है? क्या मुझे विशेष हेडर भेजना है? क्या मैं पूरी तरह से गलत हूँ? (मैं 16 घंटे सीधे के लिए काम कर रहा हूं तो यह हो सकता है ..)

    आपकी मदद के लिए धन्यवाद!

  • +0

    पर्याप्त विवरण प्रदान नहीं किया गया। अनुरोध हेडर क्या हैं? क्या आप https://github.com/mirhampt/node-recaptcha जैसे मॉड्यूल का उपयोग कर रहे हैं? हो सकता है कि जब आप कुछ नींद ले लें तो दोबारा दोबारा कोशिश करें। : पी – broofa

    +0

    अरे ब्रूफा, क्षमा करें कि मेरा प्रश्न इसका उत्तर देने के लिए पर्याप्त नहीं था। फिर भी आपने मॉड्यूल में अनजाने में अपनी समस्या बी/सी हल की है, जिसे आपने रीकैप्चा का सत्यापन करने के लिए जरूरी अनियंत्रित शीर्षलेख पोस्ट किया है, इसलिए मैं उन्हें अपने स्वयं के समाधान में बनाने में सक्षम था। मैं बाद में समाधान के रूप में समाधान पोस्ट करूंगा। धन्यवाद! ;) – floriankrueger

    उत्तर

    17

    उपरोक्त टिप्पणियों में बताया गया है कि, मैं https://github.com/mirhampt/node-recaptcha पर उपलब्ध ब्रोफा और नोड-रीपैप्चा मॉड्यूल की सहायता से समस्या को हल करने में सक्षम था।

    लेकिन पहले, ऊपर से लापता विवरण पूरा करने के लिए:

    • मैं किसी भी मॉड्यूल का उपयोग नहीं किया है, मेरे समाधान पूरी तरह से आत्म लिखित दस्तावेज the reCAPTCHA website पर उपलब्ध पर आधारित है।
    • मैंने कोई अनुरोध शीर्षलेख नहीं भेजा क्योंकि दस्तावेज़ में कुछ भी नहीं बताया गया था। सब कुछ अनुरोध के विषय में कहा जाता है कि इससे पहले कि वे आवश्यक मानकों को समझाने है निम्नलिखित:

      "के बाद अपने पेज को सफलतापूर्वक reCAPTCHA प्रदर्शित कर रहा है, तो आप चाहे जवाब उपयोगकर्ताओं द्वारा दर्ज सही जांचने के लिए अपने प्रपत्र विन्यस्त करने की जरूरत। यह http://www.google.com/recaptcha/api/verify पर POST अनुरोध करके हासिल किया जाता है। नीचे प्रासंगिक पैरामीटर हैं। "

      - http://code.google.com/apis/recaptcha/docs/verify.html

    पर "कैसे उपयोगकर्ता की उत्तर जांचें करने के लिए" इसलिए मैं बनाया एक अपने आप querystring (जो एक एक लाइनर है, लेकिन उसके लिए एक module है और साथ ही मुझे पता चला अब) सभी मानकों को शामिल किया गया है और इसे reCAPTCHA API एंडपॉइंट पर भेजा गया है। मुझे जो त्रुटि मिली वह त्रुटि कोड invalid-site-private-key था, जो वास्तव में (जैसा कि हम अब जानते हैं) वास्तव में 400 Bad Request भेजने का गलत तरीका है। शायद उन्हें इसे लागू करने के बारे में सोचना चाहिए तो लोग आश्चर्य नहीं करेंगे कि उनकी चाबियों में क्या गड़बड़ है।

    • Content-Length है जो क्वेरी स्ट्रिंग
    • Content-Type जो application/x-www-form-urlencoded हो गया है की लंबाई होने के लिए:

      ये हैडर मानकों जो स्पष्ट रूप से आवश्यक हैं (वे मतलब आप एक फार्म भेज रहे हैं) कर रहे हैं

    एक और बात मैं node-recaptcha मॉड्यूल से सीखा है कि एक क्वेरी स्ट्रिंग utf8 इनकोडिंग भेजना चाहिए, है।

    मेरा समाधान अब इस तरह दिखता है, आप इसका उपयोग कर सकते हैं या उस पर बनाया गया है लेकिन त्रुटि प्रबंधन अभी तक लागू नहीं किया गया है। और यह कॉफीस्क्रिप्ट में लिखा है।

    http = require 'http' 
    
    module.exports.check = (remoteip, challenge, response, callback) -> 
    
        privatekey = 'placeyourprivatekeyhere' 
    
        request_body = "privatekey=#{privatekey}&remoteip=#{remoteip}&challenge=#{challenge}&response=#{response}" 
        response_body = '' 
    
        options = 
    
        host: 'www.google.com' 
        port: 80 
        method: 'POST' 
        path: '/recaptcha/api/verify' 
    
        req = http.request options, (res) -> 
    
        res.setEncoding 'utf8' 
    
        res.on 'data', (chunk) -> 
         response_body += chunk 
    
        res.on 'end',() -> 
         callback response_body.substring(0,4) == 'true' 
    
        req.setHeader 'Content-Length', request_body.length 
        req.setHeader 'Content-Type', 'application/x-www-form-urlencoded' 
    
        req.write request_body, 'utf8' 
        req.end() 
    

    धन्यवाद

    +2

    मैं इस समस्या में भी भाग गया, स्पष्ट रूप से 'सामग्री-प्रकार' शीर्षलेख को मेरे लिए काम किया, धन्यवाद! ('सामग्री-लंबाई 'पहले से ही मेरे ढांचे द्वारा निर्धारित किया गया था)। – Halcyon

    +1

    आप उल्लेख करते हैं कि डेटा 'utf8' एन्कोड किया जाना चाहिए। मैं एक PHP आधारित कार्यान्वयन का उपयोग कर रहा हूं और यहां तक ​​कि मूल लाइब्रेरी कोड (v1.11) में भी मुझे इसका कोई उल्लेख नहीं मिल रहा है। मूल कार्यान्वयन '$ कुंजी" = "का उपयोग करता है। urlencode (स्ट्रिप्सलाश ($ मान)) 'लेकिन मुझे पूरा यकीन है कि' http_build_query' एक बेहतर विकल्प है, मेरा अनुमान है कि उन्होंने PHP 4.x के साथ संगत रहने के लिए इसका उपयोग न करने का विकल्प चुना है। मूल 'नोड-रिकैप्चा' कार्यान्वयन में 'res.setEncoding (' utf8 ')' शामिल नहीं है, क्या आपने इसे स्वयं जोड़ा है? – Halcyon

    +0

    आप सही हैं, नोड-रीपैप्चा में 'res.setEncoding (' utf8 ')' नहीं है, लेकिन यदि आप ध्यान से सभी तरह से नीचे [लाइन 151] (https://github.com/mirhampt/node-recaptcha /blob/master/lib/recaptcha.js#L151) आप देखते हैं कि प्रतिक्रिया अंततः यूटीएफ -8 एन्कोडिंग में आउटपुट स्ट्रीम में लिखी जाती है। मुझे सच में नहीं पता कि यह महत्वपूर्ण है या नहीं, लेकिन मैंने इसे अपने समाधान में शामिल किया और यह काम किया। – floriankrueger

    2

    +1 :) बहुत मददगार जवाब के लिए @florian करने के लिए। वंशावली के लिए, मैंने सोचा कि मैं यह सत्यापित करने के तरीके के बारे में कुछ जानकारी प्रदान करूंगा कि आपका कैप्चा अनुरोध कैसा दिखता है, यह सुनिश्चित करने में आपकी सहायता करने के लिए कि उचित शीर्षलेख और पैरामीटर निर्दिष्ट किए जा रहे हैं।

    यदि आप मैक या लिनक्स मशीन पर हैं या इन स्थानीय में से किसी एक तक पहुंच है, तो आप एक त्वरित सर्वर सेटअप करने के लिए नेटकैट कमांड का उपयोग कर सकते हैं। मुझे लगता है कि netcat windows ports हैं लेकिन मेरे पास नहीं उनके साथ अनुभव है।

    nc -l 8100 
    

    यह आदेश एक टीसीपी सॉकेट को 8100 बर्तन पर सुनता है और कनेक्शन की प्रतीक्षा करेगा। फिर आप अपने सर्वर कोड में होने के लिए http://www.google.com/recaptcha/... से कैप्चा सत्यापित URL बदल सकते हैं। अपने कोड को सत्यापित करने के लिए यूआरएल POST बनाता है जब आप अपने अनुरोध netcat द्वारा रोड़ी के लिए outputted देखना चाहिए:

    POST/HTTP/1.1 
    Content-Type: application/x-www-form-urlencoded 
    Content-Length: 277 
    Host: localhost:8100 
    Connection: Keep-Alive 
    User-Agent: Apache-HttpClient/4.1 (java 1.5) 
    
    privatekey=XXX&remoteip=127.0.0.1&challenge=03AHJYYY...&response=some+words 
    

    इस का उपयोग करना, मैं देखना चाहता हूँ कि मेरी निजी कुंजी दूषित कर रहा था।

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