2011-01-13 10 views
5

के लिए एक हैश जोड़ने मैं इस उदाहरण ट्यूटोरियल अनुसरण कर रहा हूँ बंद हो जाता हैक्यों इस Zend उदाहरण काम कर रहा है जब मैं प्रपत्र

परियोजना कोड: http://akrabat.com/wp-content/uploads/zf-tutorial-layoutform.zip

ट्यूटोरियल: http://akrabat.com/zend-framework/a-form-in-your-layout/

परियोजना कोड अपेक्षित ढंग से चलाता है, जब तक मैं फॉर्म में हैश तत्व जोड़ता हूं। सभी मुझे क्या करना/Signup.php

$hash = new Zend_Form_Element_Hash('hash'); 
$hash->setSalt('mysalt'); 
$this->addElement($hash); 

कोड का यह अतिरिक्त बिट सब कुछ फेंकता बंद आवेदन/रूपों के तहत के रूप में इस कोड को जोड़ना है। जब मैं अब फॉर्म जमा करता हूं, तो यह मुझे त्रुटि देता है कि 2 टोकन मेल नहीं खाते हैं।

कुछ समस्या निवारण:

  • समस्या हैश ही है क्योंकि यह मेरे अन्य उदाहरण में ठीक काम करता है नहीं है।
  • मुझे लगता है कि इस उदाहरण में अनुरोध कैसे किया जा रहा है, लेकिन यह सुनिश्चित नहीं है कि समस्या वास्तव में क्या है। मैंने सोचा कि इसे हॉप गिनती के साथ करना था, लेकिन जब मैं Zend_Form_Element_Hash संपादित करता था और हॉप गिनती को 1 से 100 में बदल देता था, तब भी मुझे एक ही त्रुटि मिल गई।

समस्या निवारण की सीमा है जो मैं ज़ेंड के साथ विशेषज्ञता के अपने स्तर पर सोच सकता हूं। तो सोचा कि यह बड़ा दिमाग पूछने का समय है। मुझे उम्मीद है कि कोई इसे समझ सकता है।

+0

जैसा हैश तत्व zend_session का उपयोग करता है जो एक समस्या हो सकती है। जांच करने के लिए एक और चीज होप्स हो सकती है जब तक कि हैश एक हॉप (या टाइमआउट के बाद) के बाद समाप्त हो जाती है। – Fge

+0

नहीं, यह हार्डकोड नहीं है। लेकिन आप सत्र सामग्री और सबमिट किए गए फॉर्म डेटा की तुलना करना चाहेंगे। ($ _SESSION बनाम $ _POST) और डीबगिंग के लिए किसी भी रीडायरेक्ट को हटा दें। – Fge

+0

सीधे नहीं। लेकिन यह तब एक और है जब आपका ब्राउज़रबार कुछ और दिखाता है तो फॉर्म लक्ष्य। लेकिन अगर आप रीडायरेक्ट नहीं करते हैं तो आपको वास्तव में $ _SESSION/$ _ POST की जांच करनी चाहिए। – Fge

उत्तर

2

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

मैंने जो भी पोस्ट किया है वह आपके द्वारा पोस्ट किया गया कोड जोड़ा गया था और यह ठीक काम करता था। आप इस कोड का उपयोग कहां कर रहे हैं? ऐसा लगता है कि आपके पर्यावरण के साथ कुछ करना है?

0

से: Zend_Form_Element_Hash

यह तत्व सुनिश्चित डेटा उपयोगकर्ता सत्र उस प्रपत्र उत्पन्न द्वारा और एक दुष्ट स्क्रिप्ट के द्वारा नहीं प्रस्तुत की है, रूपों पर CSRF हमलों से सुरक्षा प्रदान करता है। एक फॉर्म में हैश तत्व जोड़कर संरक्षण प्राप्त किया जाता है और फॉर्म जमा होने पर इसे सत्यापित किया जाता है।

हैश तत्व का नाम अद्वितीय होना चाहिए। हम एक ही नाम और विभिन्न लवण के साथ तत्व-दो हैश के लिए नमक विकल्प का उपयोग करना चाहिये टकराने नहीं होगा:

$form->addElement('hash', 'no_csrf_foo', array('salt' => 'unique'));

आप बाद में setSalt ($ नमक) पद्धति का उपयोग करके नमक सेट कर सकते हैं।

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

'फॉर्महेड' व्यू हेल्पर फॉर्म में तत्व प्रस्तुत करने के लिए उपयोग किया जाता है।

मैं कोशिश करूँगा:

$form->addElement('hash', 'unique_form_name', array('salt' => 'unique_salt'));

मैं अपने कोड में अद्वितीय रूप/हैश नाम दिखाई नहीं देता और यही कारण है कि टोकन मच नहीं है।

+0

क्या स्ट्रिंग 'हैश' नहीं है जिसका उपयोग तत्व को अद्वितीय नाम बनाने के लिए किया जा रहा है? –

+0

नाम समस्या नहीं है। यह "हैश" नाम से ठीक काम करता है। – user570783

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