سؤال

ما هي الطريقة القوية للحماية من حقن sql لتطبيق asp الكلاسيكي؟

لمعلوماتك أنا أستخدمه مع قاعدة بيانات الوصول.(لم أكتب التطبيق)

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

المحلول

الإجراءات المخزنة و/أو البيانات المعدة:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

هل يمكنني الحماية من حقن SQL عن طريق الهروب من علامات الاقتباس المفردة وإدخال المستخدم المحيط بعلامات الاقتباس المفردة؟

التقاط حقن SQL وطلبات الويب الضارة الأخرى

باستخدام Access DB، لا يزال بإمكانك القيام بذلك، ولكن إذا كنت قلقًا بالفعل بشأن SQL حقن، فأعتقد أنك بحاجة إلى الخروج من Access على أي حال.

فيما يلي رابط للتقنية الموجودة في Access:

http://www.asp101.com/samples/storedqueries.asp

لاحظ أن ما يحمي عادة من الحقن ليس الإجراء المخزن نفسه، ولكن حقيقة أنه ذو معلمات وليس ديناميكيًا.تذكر أنه حتى مقدمي الخدمة الذين يقومون ببناء التعليمات البرمجية الديناميكية يمكن أن يكونوا عرضة للحقن إذا كانوا يستخدمون المعلمات بطرق معينة لإنشاء التعليمات البرمجية الديناميكية.بشكل عام، أفضل SPs لأنها تشكل طبقة واجهة تصل إليها التطبيقات إلى قاعدة البيانات، لذلك لا يُسمح للتطبيقات حتى بتنفيذ تعليمات برمجية عشوائية في المقام الأول.

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

Conn.Execute("EXEC usp_ImOnlySafeIfYouCallMeRight '" + param1 + "', '" + param2 + "'") ;

تذكر أن قاعدة البيانات الخاصة بك تحتاج إلى الدفاع عن محيطها الخاص، وإذا كانت عمليات تسجيل الدخول المختلفة لها حقوق في ذلك INSERT/UPDATE/DELETE في الجداول، قد يمثل أي تعليمة برمجية في تلك التطبيقات (أو التطبيقات المخترقة) مشكلة محتملة.إذا كانت عمليات تسجيل الدخول تتمتع فقط بحقوق تنفيذ الإجراءات المخزنة، فإن هذا يشكل مسارًا يمكنك من خلاله ضمان السلوك الصحيح بسهولة أكبر.(على غرار مفاهيم OO حيث تكون الكائنات مسؤولة عن واجهاتها ولا تكشف عن جميع أعمالها الداخلية.)

نصائح أخرى

فيما يلي بعض البرامج النصية لـ sqlinject التي قمت بإنشائها منذ وقت طويل، نسخة بسيطة ونسخة موسعة:

function SQLInject(strWords) 
dim badChars, newChars, i
badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_") 
newChars = strWords 
for i = 0 to uBound(badChars) 
newChars = replace(newChars, badChars(i), "") 
next 
newChars = newChars 
newChars= replace(newChars, "'", "''")
newChars= replace(newChars, " ", "")
newChars= replace(newChars, "'", "|")
newChars= replace(newChars, "|", "''")
newChars= replace(newChars, "\""", "|")
newChars= replace(newChars, "|", "''")
SQLInject=newChars
end function 


function SQLInject2(strWords)
dim badChars, newChars, tmpChars, regEx, i
badChars = array( _
"select(.*)(from|with|by){1}", "insert(.*)(into|values){1}", "update(.*)set", "delete(.*)(from|with){1}", _
"drop(.*)(from|aggre|role|assem|key|cert|cont|credential|data|endpoint|event|f ulltext|function|index|login|type|schema|procedure|que|remote|role|route|sign| stat|syno|table|trigger|user|view|xml){1}", _
"alter(.*)(application|assem|key|author|cert|credential|data|endpoint|fulltext |function|index|login|type|schema|procedure|que|remote|role|route|serv|table|u ser|view|xml){1}", _
"xp_", "sp_", "restore\s", "grant\s", "revoke\s", _
"dbcc", "dump", "use\s", "set\s", "truncate\s", "backup\s", _
"load\s", "save\s", "shutdown", "cast(.*)\(", "convert(.*)\(", "execute\s", _
"updatetext", "writetext", "reconfigure", _
"/\*", "\*/", ";", "\-\-", "\[", "\]", "char(.*)\(", "nchar(.*)\(") 
newChars = strWords
for i = 0 to uBound(badChars)
Set regEx = New RegExp
regEx.Pattern = badChars(i)
regEx.IgnoreCase = True
regEx.Global = True
newChars = regEx.Replace(newChars, "")
Set regEx = nothing
next
newChars = replace(newChars, "'", "''")
SqlInject2 = newChars
end function

"الطريقة القوية للحماية من حقن SQL لتطبيق ASP الكلاسيكي" هي التحقق من صحة جميع المدخلات بلا رحمة.فترة.

الإجراءات المخزنة وحدها و/أو نظام قاعدة بيانات مختلف لا تساوي بالضرورة أمانًا جيدًا.

قامت MS مؤخرًا بطرح أداة فحص حقن SQL التي تبحث عن مدخلات لم يتم التحقق من صحتها يتم استخدامها في الاستعلام.هذا ما يجب أن تبحث عنه.

إليك الرابط:أداة Microsoft Source Code Analyzer لأداة SQL حقن متاحة للعثور على ثغرات حقن SQL في تعليمات برمجية ASP

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

http://prepared-statement.blogspot.com/2006/02/asp-prepared-statements.html

ولا تثق في الإجراءات المخزنة، فقد تصبح بمثابة ناقل للهجوم أيضًا إذا لم تستخدم البيانات المعدة مسبقًا.

إذا كانت الإجراءات المخزنة ليست خيارا - وحتى لو كانت - التحقق من صحة جميع المدخلات بدقة

مرحبًا، أي قاعدة بيانات جيدة مثل المطور الذي يستخدمها.

لا شيء أكثر ولكن لا أقل.

إذا كنت مطورًا جيدًا، فيمكنك إنشاء موقع للتجارة الإلكترونية باستخدام الملفات النصية كقاعدة بيانات.نعم، لن يكون بنفس جودة موقع الويب الذي يعتمد على Oracle ولكنه سيكون جيدًا للشركات الصغيرة مثل تصنيع المجوهرات المخصصة في المنزل.

وإذا كنت مطورًا جيدًا، فلن تستخدم عبارات SQL المضمنة في صفحات ASP الخاصة بك.حتى في Access لديك خيار إنشاء الاستعلامات واستخدامها.

تعد عمليات التخزين مع التحقق من البيانات، جنبًا إلى جنب مع تشفير html - أفضل طريقة لمنع أي هجمات حقن SQL.

ال محلل كود مصدر Microsoft لأداة حقن SQL متاح للعثور على ثغرات حقن SQL في كود ASP

يعد التبديل إلى SQL Express على الأقل خيارًا رائعًا.سيجعل الأمور أكثر أمانًا.على الرغم من أن استخدام المعلمات والإجراءات المخزنة يمكن أن يساعد بشكل كبير.أوصي أيضًا بالتحقق من صحة المدخلات بعناية للتأكد من مطابقتها لما تتوقعه.

بالنسبة لقيم مثل الأرقام، فمن السهل إلى حد ما استخراج الرقم للتحقق من أنه مجرد رقم بالفعل.الهروب من كافة الأحرف الخاصة لـ SQL.سيؤدي القيام بذلك إلى منع محاولة الهجوم من العمل.

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