2010-08-13 11 views
5

एसक्यूएल इंजेक्शन से ग्रस्त होने के लिए पूरी तरह से LinqToSQL या Entity Framewok का उपयोग कर एक प्रोजेक्ट के लिए यह संभव है।इकाई फ्रेमवर्क, LinqToSQL और एसक्यूएल इंजेक्शन

मुझे लगता है कि शायद ऐसा नहीं है क्योंकि ओआरएम जेनरेट एसक्यूएल इंजेक्शन मुक्त होना चाहिए। लेकिन मुझे यकीन नहीं।

+1

की डुप्लीकेट को क्रियान्वित करने http://stackoverflow.com/questions/473173/will-using-linq-to-sql-help-prevent-sql - इंजेक्शन –

+1

वास्तव में डुप्लिकेट नहीं है क्योंकि यह एंटीटी फ्रेमवर्क के लिए भी पूछता है। इसके अलावा उत्तर वास्तव में कह रहे हैं कि कुछ परिस्थितियों में –

उत्तर

10

जब आप उन ढांचे का उपयोग इरादे से करते हैं, यानी संस्थाओं/तालिकाओं को सीधे, फिर नहीं। सभी स्ट्रिंग तुलना (यानी where name = 'smith') पैरामीटरकृत हैं।

केवल कमजोर धब्बे होते हैं:

  • किसी भी स्ट्रिंग संदर्भ के खिलाफ सीधे क्रियान्वित किया जा सकता। किसी भी तरह की विनाशकारी स्ट्रिंग के साथ dbContext.ExecuteQuery();

  • एक संग्रहीत प्रक्रिया किसी भी पैरामीटर का उपयोग कर गतिशील एसक्यूएल दिया

+1

बॉक्स के बाहर वीएस2012 में हमले के लिए एक संभावना है। _ कहां (ए => a.column == "उद्धरण" ") _ ने बाध्य var _ @ 1 = [Extent1] में अनुवाद किया था। [कॉलम] _। और _ कहां (ए => a.column! = "उद्धरण" ") _ _''Quote '' = [Extent1] में अनुवाद किया गया है। [कॉलम] _ –

3

"यह निर्भर करता है"।

एल 2 एस या ईएफ इकाइयों के खिलाफ सादा LINQ प्रश्न इंजेक्शन सुरक्षित हैं, लेकिन आप हमेशा एक संग्रहित प्रक्रिया या फ़ंक्शन को कॉल कर सकते हैं जो इंजेक्शन सुरक्षित नहीं है।

यह स्पष्ट रूप से एक बढ़त मामला होगा, लेकिन हाँ ऐसा होता है कि लोग एसपी/कार्यों को लिखते हैं जो इंजेक्शन के लिए खुले होते हैं (एसक्यूएल-इन-स्ट्रिंग को प्रो के अंदर पैरामीटर मानों के साथ बनाते हैं)।

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