سؤال

يتيح القول على قاعدة بيانات MySQL (إذا كان يهم).

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

المحلول

لا, أنت لن تكون آمنة تماما.كما ذكر آخرون, استعلامات بمعلمات هي دائما وسيلة للذهاب -- مهما كنت الوصول إلى قاعدة البيانات.

انها قليلا من أسطورة حضرية مع procs كنت آمنة.أعتقد أن السبب الناس تحت هذا الوهم لأن معظم الناس تفترض أن اتصل procs مع استعلامات بمعلمات من التعليمات البرمجية الخاصة بك.ولكن إذا كنت لا ، على سبيل المثال إذا كنت تفعل شيئا مثل أدناه ، أنت على مصراعيه:

SqlCommand cmd = new SqlCommand("exec @myProc " + paramValue, con);
cmd.ExecuteNonQuery();

لأنك باستخدام فلتر المحتوى من المستخدم النهائي.مرة أخرى كل ما عليك القيام به هو إنهاء خط ( " ;") ، إضافة خطرة الأوامر و الازدهار ... أنت مسقي.

(بوصفها جانبا, إذا كنت على شبكة الإنترنت ، لا تأخذ فلتر السريعة من سلسلة الاستعلام من المتصفح-أن يجعل بعبثية سهل للغاية الأشياء السيئة إلى البيانات الخاصة بك.)

إذا كنت parameterize الاستعلامات, أنت في أفضل شكل.بيد أن آخرين هنا قد ذكر ، إذا proc لا يزال توليد ديناميكية SQL تنفيذ ذلك ، قد تكون هناك مشكلات.

أود أن أشير إلى أنني لست ضد بروك.Procs يمكن أن تكون مفيدة جدا من أجل حل بعض المشاكل مع الوصول إلى البيانات.ولكن procs هي لا "الفضة-الرصاص حل حقن SQL.

نصائح أخرى

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

إذا استدعاء إجراء مخزن، مضيفا أن الحجج التي كتبها سلسلة، لا يزال يمكنني إضافة استعلام عشوائي في نهاية واحدة من حقول الإدخال - على سبيل المثال، إذا كان لديك CALL CheckLoginusername = '$ اسم المستخدم'، @ كلمة المرور = '$ كلمة السر'، مع -things $ تمثل المتغيرات ومتسلسلة مباشرة، لا شيء يمنعني من تغيير المتغير $ كلمة المرور لتصبح "؛ DROP DATABASE؛ -".

من الواضح، إذا قمت بتنظيف مدخل مسبقا، وهذا يسهم أيضا في منع حقن SQL، ولكن هذا يمكن أن يحتمل تصفية البيانات التي لم يكن ينبغي تنظيفها.

وهذا يعتمد ما تقوم به procs المخزنة. إذا كانت تولد حيوي SQL استنادا المعلمات الخاصة بهم، ومن ثم تنفيذ ذلك SQL، ثم كنت لا تزال عرضة للخطر. خلاف ذلك، وكنت أكثر من المرجح أن يكون على ما يرام - ولكن أتردد في صوت 100٪ واثق

!

وكلا. إذا كنت بناء SQL يستدعي إجراء مخزن كنت لا تزال هدفا.

ويجب أن تكون على إنشاء استعلامات parametized على جانب العميل.

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

والإجراءات المخزنة ليست ضمانا، لأن ما هو في الواقع عرضة من أي رمز الحيوية، والتي تشمل قانون الإجراءات داخل المخزن والمكالمات ديناميكيا إلى الإجراءات المخزنة.

والاستفسارات معلمات وprocs المخزنة يسمى مع المعلمات على حد سواء غير معرضة للخطر لحقن طالما أنها لا تستخدم مدخلات التعسفي لإنشاء رمز. لاحظ أن هناك الكثير من التعليمات البرمجية الديناميكية التي هي أيضا ليست عرضة للحقن (لمعلمات المثال عدد صحيح في التعليمات البرمجية حيوي).

وفوائد وإلى حد كبير (لست متأكدا 100٪ من الممكن حقا) المخزنة على أساس procs الهندسة المعمارية، ومع ذلك، هو أن حقن يمكن حتى أن يدافع إلى حد ما ضد (ولكن ليس تماما) لرمز ديناميكية في جانب العميل ل :

وتمنح

وأذونات EXEC فقط إلى أي سياق المستخدم التطبيق يتم الاتصال تحت، لذلك أي SELECT، INSERT، UPDATE، DELETE والاستفسارات فشلت ببساطة. وبطبيعة الحال، DROP وما لا ينبغي أن يسمح على أي حال. لذلك فإن أي حقن يجب أن يكون في شكل EXEC، وذلك في نهاية المطاف، سوف فقط العمليات التي عرفتها في طبقة SP الخاص بك حتى تكون متاحة (SQL ليس تعسفيا) لحقن ضد.

وبين العديد من المزايا الأخرى من تحديد خدمات قاعدة البيانات الخاصة بك على أنها مجموعة من الإجراءات المخزنة (مثل أي طبقة تجريد في مجال البرمجيات) هي القدرة على ريفاكتور قاعدة البيانات الخاصة بك تحت دون التأثير على التطبيقات، والقدرة على فهم ورصد أنماط الاستخدام في قاعدة البيانات الخاصة بك مع التعريف، والقدرة على تحسين انتقائي داخل قاعدة البيانات دون الحاجة إلى نشر عملاء جدد.

وبالإضافة إلى ذلك، النظر في استخدام غرامة الوصول الحبيبات قاعدة البيانات، (وتسمى أيضا عموما دور بناء التحكم في الوصول) للمستخدم الرئيسي لقاعدة البيانات الخاصة بك ينبغي أن يكون بالضبط الأذونات اللازمة للقيام بعملها ولا شيء غير ذلك. لا تحتاج إلى إنشاء جداول جديدة بعد تثبيت؟ إبطال هذا الإذن. لم يكن لديك حاجة مشروعة لتشغيل SYSDBA؟ ثم لا! A حقن متستر تعليمات للمستخدم "DROP DATABASE" سيتم وضع حرج إذا كان المستخدم لم يتم منح هذا الإذن. ثم كل ما عليك ما يدعو للقلق هو عبارات SELECT-تسريب البيانات.

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