2013-06-21 10 views
5

समस्या परिदृश्य:Laravel 4: रोकें कई फ़ॉर्म सबमिशन - CSRF टोकन

मैं Laravel 4. प्रपत्र नए ब्लॉग पोस्ट के निर्माण के लिए जिम्मेदार है कि CSRF में निर्माण के द्वारा सुरक्षित है के साथ एक ब्लॉग बना रहा हूं सुरक्षा (Laravel Docs: CSRF Protection)।

सब कुछ ठीक काम करता है, लेकिन ऐसा लगता है कि लार्वेल प्रत्येक अनुरोध पर सीएसआरएफ टोकन को रीफ्रेश नहीं करता है।

समस्या यह होती है कि यदि उपयोगकर्ता सबमिट किए गए फॉर्म पर वापस आने के लिए ब्राउज़र के बैक बटन को हिट करता है, तो दर्ज डेटा जारी रहता है और उपयोगकर्ता फ़ॉर्म को "पुनः सबमिट" करने में सक्षम होता है। यह स्पैमर के लिए एक खुला दरवाजा बना सकता है।

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

मैं फॉर्म और ब्लॉग पोस्ट दृश्यों को संभालने के लिए लार्वेल "संसाधन नियंत्रक" दृष्टिकोण (Laravel Docs: Resource Controllers) का उपयोग करता हूं। इसके अलावा मैं डेटाबेस (MySQL) में सबमिट किए गए इनपुट को संग्रहीत करने से पहले Laravels इनपुट सत्यापनकर्ता का उपयोग करता हूं।


तो निम्न उपाय आया:

  1. किसी भी तरह Laravel 4 के लिए मजबूर किए गए प्रत्येक अनुरोध

  2. उत्पन्न एक और टोकन पर स्वचालित रूप से CSRF को पुनर्जीवित और यह प्रपत्र मैन्युअल

    में शामिल करने के लिए
  3. उपयोगकर्ता सत्र (PHP या डेटाबेस) में फॉर्म सबमिशन का टाइमस्टैम्प सहेजें और थ्रॉटल ne एक समय के आधार पर डब्ल्यू फ़ॉर्म सबमिशन

व्यक्तिगत तौर पर मैं पहले विचार को पसंद करते हैं, लेकिन दुर्भाग्य से मैं व्यवहार करने के लिए मैं इसे कैसे होना चाहता हूँ laravel लिए मजबूर करने का एक तरीका नहीं मिल सकता है, हैकिंग के बिना "रोशन" खुद (जिसे मैं "जैसा है" रखना चाहता हूं बिना "परेशानी हॉफ" ^^ के बिना लार्वेल को अपडेट करने में सक्षम होना चाहिए।

आप क्या सलाह देंगे?

आपने समस्या को स्वयं कैसे संभाला?

+1

मैं सिर्फ जाँच कैसे stackoverflow पर प्रपत्र संभालती उल्लिखित के संयोजन का उपयोग करने में हो सकता है वही डेटा, यह कहता है "उस शीर्षक के साथ एक प्रश्न पहले से मौजूद है, कृपया अधिक विशिष्ट हो।" और "आप केवल हर 20 मिनट में एक बार पोस्ट कर सकते हैं।" एक विकल्प है लेकिन वास्तव में जो मैं चाहता हूं ... –

उत्तर

18

मैं वास्तव में कई मुद्दों के सबमिशन के लिए भी इस मुद्दे में भाग गया।

1) पोस्ट जमा करने के बाद एक नया टोकन जेनरेट करें:

Session::put('_token', sha1(microtime()))

2) एक पुष्टिकरण पृष्ठ पर पोस्ट करने के बाद पुन: निर्देशित:

Redirect::route('form/success')->with("data", $myData)

मैं समाप्त हो गया आप यहाँ दो विकल्प हैं दूसरा कर रहा हूँ।की जाँच के लिये भेज पुनः पर:

संपादित करें: जेसन के माध्यम से एक टिप्पणी में, यह सबसे अच्छा ") history.back (" दोनों तरीकों से ऊपर

+0

मैं प्रमाणीकरण पास के बाद बनाए गए ब्लॉग पोस्ट पर रीडायरेक्ट करने के लिए पहले से ही एक रीडायरेक्ट :: रूट का उपयोग कर रहा हूं। सत्यापन त्रुटियों के मामले में मैं रीडायरेक्ट :: बैक() -> withInput() -> withErrors() के साथ उपयोग करता हूं। बीटीडब्ल्यू: आप मेरे पहले प्रश्न का उत्तर देने वाले पहले व्यक्ति हैं :-) धन्यवाद। मैं आपको वोट दूंगा, लेकिन पहले 15 प्रतिनिधि की जरूरत है ... –

+0

आप हमेशा उत्तर के रूप में स्वीकार कर सकते हैं :) मदद करने में खुशी हुई। –

+0

वहां आप जाते हैं ... मैं बस इंतजार कर रहा था, क्योंकि कुछ और जवाब बुलबुले हो सकते थे। –

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