मैं आज एक पुरानी संग्रहित प्रक्रिया को देख रहा था और देखा कि यह quotename
इनपुट मापदंडों पर उपयोग कर रहा है । कुछ खुदाई करने के बाद यह पता लगाने के लिए कि इस साइट पर वास्तव में क्या हुआ है । अब मैं समझता हूं कि यह क्या करता है और इसका उपयोग कैसे किया जाता है, लेकिन साइट का कहना है कि इसका उपयोग SQL इंजेक्शन हमलों से शमन के रूप में किया जाता है। जब मैं ऐसे ऐप्स विकसित करता था जो सीधे asp.net का उपयोग करते हुए एक डेटाबेस को क्वेरी करता था, तो मैं ADO.Net पैरामीटर का उपयोग उपयोगकर्ता इनपुट को शाब्दिक मान के रूप में पास करने के लिए करता था और कभी भी मेरी संग्रहीत प्रक्रियाओं में इसे बचाने के बारे में चिंतित नहीं था।
मैं अब एक संग्रहीत प्रक्रिया लिख रहा हूं जिसका उपयोग उन अनुप्रयोगों द्वारा किया जाएगा जो मैं नहीं लिखता हूं इसलिए मुझे प्रक्रिया स्तर पर इंजेक्शन के हमलों से quotename
बचने और बचाव करने की आवश्यकता है, यह करने का सबसे अच्छा तरीका है या एक नया कार्य है / बेहतर तरीका?
इस विचार पद्धति पर मुझे मिला कोड ( @parm1
एक उपयोगकर्ता इनपुट पैरामीटर है):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '