الهروب الفواصل العليا في ينق على أساس الإجراء المخزن المكالمات عندما SP يحتوي على SQL ديناميكية

StackOverflow https://stackoverflow.com/questions/1211592

سؤال

لاحظت التالي:

وهو ASP.NET MVC الموقع قيد التطوير يحصل خطأ SQL "علامة اقتباس مغلقة..." عندما يجعل LINQ استدعاء إجراء مخزن الذي يحتوي على SQL ديناميكية.

على سبيل المثال:

SP GetEmployees دعا مع المعلمة [filter_name] الذي له قيمة [ن'for] يلقي هذا الخطأ

لا يمكن حل المشكلة عن طريق القيام .replace("'", """) مثل هذا:

[Function(Name = "dbo.GetEmployees")]
public ISingleResult<EmployeeRow> GetEmployees(
            [Parameter(DbType = "NVarChar(MAX)")] string filter_name)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), filter_name.Replace("'", "''"));
    return ((ISingleResult<EmployeeRow>)(result.ReturnValue));
}

الآن أنا لا أشعر مثل الذهاب الحوض الصغير جميع واص و القيام بذلك يدويا.هل هناك طريقة لجعل هذه القاعدة العامة التي ينبغي تطبيقها على جميع Linq SP المكالمات لدي الآن و في المستقبل ؟

أيضا, هل هناك شيء آخر يجب أن يكون الهروب إلى منع هجمات حقن SQL?

تحرير:

تم إضافة السؤال:سوف تعطي هذا مشاكل مع SPs التي لا تشمل ديناميكية sql ؟ أعني عندما تضيف هذا الاسم في قاعدة البيانات ، سيتم تخزين [ن"ل]?أنا فقط أدركت أن هذه ربما تكون الحالة وبعد ذلك سوف تضطر إلى القيام به يدويا على كل حال

هل كانت مفيدة؟

المحلول 2

أنا ذاهب لإعطاء (ممكن) الإجابة على سؤالي.(اسمحوا لي أن نعرف في التعليقات إذا كنت توافق)

يبدو من الصحيح أن هذا يجب أن يتم التعامل معها داخل SP.التطبيق لا يجب أن تقلق بشأن الطقس معينة SP يحتوي على sql ديناميكية أو لا.

نصائح أخرى

وأقترح عليك الابتعاد عن SQL ديناميكية، وهذا هو جذر المشكلة. (وأنا أعلم أن هذا قد يسبب الكثير من القضايا الأخرى رغم ذلك، وربما لا يكون ممكنا.)

وإذا لم تتمكن من ضمان أن SQL ديناميكية كنت بناء آمن، (حتى يمكنك التحكم هذا المنطق داخليا، مع أي شيء يتم تمريرها من خلال من المستخدم)، فإنه سيكون مشكلة.

وماذا سيحدث لو الفلتر يحتوي على \ 'أو -؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top