2012-01-30 10 views
5

मैं अपने ऐप के लिए फ्लास्क, डब्ल्यूटीएफम्स, और OurSQL MySQL लाइब्रेरी का उपयोग कर रहा हूं। मुझे request.form चर से पोस्ट डेटा प्राप्त होता है। मैंने इसे एक डब्ल्यूटीएफम्स फॉर्म ऑब्जेक्ट में रखा है। मैं उस फॉर्म पर validate() पर कॉल करता हूं, और उसके बाद फॉर्म डेटा को MySQL डेटाबेस का उपयोग करके MySQL डेटाबेस में सम्मिलित करता हूं।यदि मुझे फ्लास्क के साथ पोस्ट डेटा प्राप्त होता है, तो उस डेटा को WTForms फॉर्म में रखें और यह सफलतापूर्वक मान्य करता है, क्या यह एसक्यूएल इंजेक्शन हमलों से सुरक्षित है?

कोई अतिरिक्त प्रसंस्करण किए बिना, क्या मैं एसक्यूएल इंजेक्शन से सुरक्षित हूं? क्या WTForms validate विधि से बच निकलती है? यदि नहीं, तो डेटा से बचने के लिए मुझे क्या करना चाहिए? क्या मैं इस तरह दिखता है कर रहा हूँ का एक उदाहरण:

form = MyWTFFormsForm(request.form) 
if form.validate(): 
    cursor.execute("INSERT INTO mytable VALUES (?, ?, ?, ?, ?);", 
      (form.field1.data, form.field2.data, form.field3.data, 
      form.field4.data, 
      form.field5.data)) 

उत्तर

5

जहाँ तक मुझे पता है, न WTForms है और न ही बोतल एसक्यूएल के लिए डेटा से बचने के लिए, लेकिन जैसे तुम वहाँ क्या कर रहे हैं प्लेसहोल्डर का उपयोग कर से बचने के लिए की आवश्यकता समाप्त।

2

फॉर्म सत्यापन और एसक्यूएल अलग-अलग चिंताएं हैं। फॉर्म सत्यापन का काम यह सुनिश्चित करना है कि डेटा समझ में आता है। एसक्यूएल कोड का काम डेटा को सुरक्षित रूप से स्टोर करना है। एसक्यूएल इंजेक्शन हमले मूल रूप से एसक्यूएल से संबंधित कोड पर हमले होते हैं। आपके द्वारा प्रदत्त स्निपेट, cursor.execute और ? प्लेसहोल्डर्स का उपयोग करके, SQL को डेटा भेजने से पहले उचित उद्धरण देगा, इसलिए SQL इंजेक्शन की कोई संभावना नहीं है।