2009-01-23 12 views
47

को रोकने में मदद मिलेगी मैं एक सार्वजनिक साइट स्थापित कर रहा हूं और मेरे दिमाग की पहली चीज़ एसक्यूएल इंजेक्शन है। मेरे पास कुछ टेक्स्ट फ़ील्ड हैं जिन्हें मैं सहेज रहा हूं और डेटाबेस में अपडेट/लिखने के लिए linq का उपयोग कर रहा हूं। क्या मैं linq का उपयोग कर सुरक्षित हूँ?LINQ से SQL का उपयोग करने से SQL इंजेक्शन

यह उदाहरण उपयोगकर्ता खाता बना रहा है।

Data.MemberRegistrationDataContext context = new MemberRegistrationDataContext(); 
Data.tbl_Member_UserProfile profile = new tbl_Member_UserProfile(); 
profile.SSN = Convert.ToDecimal(Session["tempMemberSSN_Registration"]); 
profile.UserName = userName; 
profile.Password = password; 
profile.EmailAddress = email; 
profile.QuestionID = qID; 
profile.QuestionResponse = securityAnswer; 
profile.LastModDt = DateTime.Now; 
profile.LastModBy = "web"; 
context.tbl_Member_UserProfiles.InsertOnSubmit(profile); 
context.SubmitChanges(); 

यह उदाहरण पासवर्ड

MemberRegistrationDataContext dc = new MemberRegistrationDataContext(); 
    var mProfileRecord = dc.tbl_Member_UserProfiles.Single(c => c.SSN == sSSN); 
    mProfileRecord.Password = sNewPassword; 
    dc.SubmitChanges(); 

इन सुरक्षित हैं बदल रहा है? क्या LINQ एसक्यूएल को स्वचालित रूप से जेनरेट करता है?

+2

पाठकों के लिए नोट: यह इकाई फ्रेमवर्क के लिए भी जाता है। Http://stackoverflow.com/questions/3473841/entity-framework-linqtosql-and-sql-injection –

उत्तर

68

हां, LINQ एसक्यूएल इंजेक्शन को रोकने में मदद करेगा।

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

इसके अलावा, कुछ जानकारी के लिए Eliminate SQL Injection Attacks Painlessly with LINQ देखें।

+0

यह ध्यान दिया जाना चाहिए कि जब वे कहते हैं कि "सभी डेटा पास हो जाते हैं" तो उनका मतलब है "सभी डेटा" - यहां तक ​​कि हार्ड-कोडेड मान: "डीबी। कर्मचारी। जहां (ई => e.Active == 1)" पैरामीटर के रूप में "1" पास करेगा। –

+8

एक मामूली अपवाद के साथ: यदि आपके पास एक संग्रहीत प्रक्रिया या फ़ंक्शन है जो SQL-इंजेक्शन कमजोर है (गतिशील एसक्यूएल संरचना के कारण) तो उस एसपी/func के लिए कोई भी कॉल निश्चित रूप से कमजोर है। – KristoferA

14

आप जाने के लिए अच्छे हैं। लिंक डेटाबेस को भेजे गए डेटा को पैरामीटरकृत करता है।

क्या हो रहा है की जाँच करने के लिए लॉग इन संपत्ति का उपयोग करें: dc.Log = Console.Out;

3

यह चाहिए क्योंकि मापदंडों जो मनमाने ढंग से एसक्यूएल निष्पादित करने के लिए शोषण नहीं किया जा सकता नामित एसक्यूएल उत्सर्जित का उपयोग करता है।