मैं बस यहाँ साबित होता है कि इस सरल समारोह काफी अच्छा दुनिया में हर एसक्यूएल इंजेक्शन को रोकने के लिए नहीं है कोशिश कर रहा हूँ:साबित SQL इंजेक्शन
Function CleanForSQL(ByVal input As String) As String
Return input.Replace("'", "''")
End Function
यहाँ हमारे ऐप्स से एक ठेठ डालने बयान है :
Database.DBUpdate("UPDATE tblFilledForms SET Text1 = '" + CleanForSQL(txtNote.Text) + "' WHERE FilledFormID = " + DGVNotes.SelectedRows(0).Cells("FilledFormID").Value.ToString)
मैं अपने सुरक्षित नहीं पता, क्योंकि googling और StackOverflow.com पर अन्य प्रश्न को देख के। Here एक प्रश्न है जिसे मैंने पाया है जिसमें मैंने ऊपर प्रस्तुत किए गए सभी कार्य अप्रासंगिक और व्यर्थ हैं।
तो पोस्ट मैं से जुड़ा हुआ है, बस
txtNote में'Chr (8) टाइप पर आधारित है; अद्यतन tblMaint सेट मान 1 = 2 कहां ValueID = 2--
पूरे tblFilledForms तालिका में टेक्स्ट 1 में हर मूल्य स्पष्ट करने के लिए पर्याप्त होना चाहिए, और फिर अद्यतन tblmaint मेज की दूसरी पंक्ति 2 सही होने के लिए?
क्या चाहिए यहाँ हो कि वीबी
अद्यतन tblFilledForms के रूप में इस व्याख्या करेगा सेट पाठ 1 है = '' 'Chr (8); अद्यतन tblMaint सेट मान 1 = 2 कहां ValueID = 2-- 'कहां FilledFormID = 5120327
और SQL के लिए भेज जो प्रशिक्षु निष्पादित करेंगे Chr (8) तीसरे को मिटाने के लिए' जो उत्पादन होता
अपडेट करें tblFilledForms SET Text1 = ''; अद्यतन करें tblMaint SET Value1 = 2 WHERE ValueID = 2-- 'जहां FilledFormID = 5120327
वास्तव में डेटाबेस पर निष्पादित करने के लिए सही है?
मैंने क्लिपबोर्ड से एक Chr (8) को कॉपी किया और क्लिपबोर्ड सामग्री के साथ टेक्स्टबॉक्स में Chr (8) को प्रतिस्थापित किया और अभी भी कोई नहीं जाना। यह पूरी स्ट्रिंग को सीधे क्षेत्र w/o समस्याओं में डाल देता है।
तो मैं यहां क्या गलत कर रहा हूं? या इसे तोड़ने के लिए मैं और क्या कर सकता हूं?
टेक्नोलॉजीज और पृष्ठभूमि: मैं एमएस SQL सर्वर 2005, और वीबी नेट उपयोग कर रहा हूँ 2005 डेटाबेस में पाठ 1 क्षेत्र एक VARCHAR (600) क्षेत्र (मेरे कारण है कि इसकी नहीं मैक्स मत पूछो है, इसके व्यर्थ, मुझे पता है) तालिका पर कुछ ट्रिगर्स हैं जो इस तरह के बड़े पैमाने पर अपडेट को रोक देंगे और इंजेक्शन वास्तव में सही काम करते हैं तो कुछ त्रुटियों को फेंक देंगे।
पीएस। मुझे पता है कि पैरामीरिज्ड प्रश्न यहां जाने का तरीका हैं और मैं जवाब की तलाश नहीं कर रहा हूं "अच्छी तरह से मुझे पता नहीं है कि यह क्यों काम नहीं करता है, लेकिन पैरामीट्रिज्ड प्रश्न जाने का तरीका है"। मैं साबित करने की क्षमता की तलाश कर रहा हूं कि हमारा सॉफ़्टवेयर टूट गया है और हमें बेहतर सिद्धांतों का उपयोग करके इसे फिर से लिखना होगा।
इस प्रश्न को पढ़ने के लिए किसी को भी यह जानने के लिए कि अपने टेक्स्ट फ़ील्ड को बेहतर तरीके से कैसे फ़िल्टर किया जाए, जवाब नहीं है! पैरामीटर का प्रयोग करें! वे बहुत बेहतर, सुरक्षित और आसान हैं!
डाउनवोट लोगों को धमकी देने और उसी पैराग्राफ में सिद्धांतों के बजाय प्रिंसिपल लिखने के लिए डाउनवोट। –
वैसे आपका Chr (8) एक स्ट्रिंग के अंदर समाप्त होता है इसलिए यही कारण है कि एसक्यूएल इसका मूल्यांकन नहीं कर रहा है। –
@ विंको मुझे यह उचित नहीं लगता है, वह बस जवाबों के लिए दिशानिर्देश स्थापित कर रहा था।तो जवाबों का पूरा समूह प्राप्त करने के बजाय सभी एक ही बात कह रहे हैं, उन्हें 1 या 2 मिलता है जो उसे बताता है कि वह क्या चाहता है। – Zoidberg