c# - How do I protect this function from SQL injection? -


  सार्वजनिक स्थैतिक बूल TruncateTable (स्ट्रिंग dbAlias, string tableName) {string sqlStatement = string.format ("truncate table { 0} ", टेबलनाम); वापसी ExecuteNonQuery (dbAlias, sqlStatement)> 0; एसक्यूएल इंजेक्शन से लड़ने के लिए सबसे आम सिफारिश एसक्यूएल क्वेरी पैरामीटर का उपयोग करने के लिए है ( 

इस मामले में यह गलत जवाब है आप किसी डीडीएल स्टेटमेंट में तालिका नाम के लिए SQL क्वेरी पैरामीटर का उपयोग नहीं कर सकते।

SQL क्वेरी पैरामीटर केवल एक SQL अभिव्यक्ति में एक शाब्दिक मूल्य के स्थान पर उपयोग किया जा सकता है। यह एसक्यूएल के हर कार्यान्वयन में मानक है।

एसक्यूएल इंजेक्शन के खिलाफ की रक्षा करने के लिए मेरी सिफारिश जब आपके पास तालिका नाम है, तो ज्ञात तालिका नामों की सूची के खिलाफ इनपुट स्ट्रिंग को मान्य करना है।

आप INFORMATION_SCHEMA से मान्य तालिका नामों की एक सूची प्राप्त कर सकते हैं:

  चयन तालिका_नाम से सूचना_एससीएचएएमए.Tables जहाँ तालिका की तालिका = 'आधार तालिका' और तालिका_नाम = @tableName   

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

आप तालिका के नाम को विशिष्ट टेबल की सूची के साथ भी मान्य कर सकते हैं, , @ जॉन बुकानन के रूप में।

यह भी मान्य करने के बाद भी कि आपके कोड RDBMS में tableName मौजूद एक टेबल नाम के रूप में मौजूद है, मैं भी मेज नाम को विभाजित करने का सुझाव देगा, बस आप तालिका नामों का उपयोग करते हैं रिक्त स्थान या विशेष वर्णों के साथ माइक्रोसॉफ्ट एसक्यूएल सर्वर में, डिफ़ॉल्ट आइडेंटिफ़ायर सीमांकक वर्ग के कोष्ठक होते हैं:

  स्ट्रिंग sqlStatement = string.Format ("ट्रंककेट टेबल [{0}]", टेबलनाम);  

अब आप एसक्यूएल इंजेक्शन के लिए जोखिम में हैं यदि टेबलनाम एक वास्तविक तालिका से मेल खाता है, और आप वास्तव में अपनी टेबल के नामों में चौकोर ब्रैकेट का उपयोग करते हैं!


Comments

Popular posts from this blog

c# - How to capture HTTP packet with SharpPcap -

jquery - SimpleModal Confirm fails to submit form -

php - Multiple Select with Explode: only returns the word "Array" -