سؤال

وأنا أبحث لتفقد بيانات SQL في جاوة / رمز جدبك للتأكد من أن SQL ليتم تنفيذها هو من نوعية مقبولة. لا PMD لا يبدو Findbugs أن يكون JDBC أو مزود القواعد. ويمكنني أن استخدام p6spy لتسجيل SQL وإلقاء نظرة على هذا النحو، ولكن هذا هو اليدوي.

وأنا أتساءل عما إذا كانت استراتيجية من استخدام PMD / Findbugs / وغيرها لإنشاء قاعدة أن أي سلسلة التي تم تمريرها إلى PreparedStatement حيث يوجد "=" أو "في" وparametrized فقط فار على الجانب مقارنة.

ولقد فعلت كل هذا؟ أو يتم ذلك عن طريق وسائل أخرى؟

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

المحلول

وهذه مشكلة صعبة. عوامل المقارنة مثل = وIN() بعض الحالات، ولكن هناك أيضا: != <> < <= > >= LIKE

وكيف رصد حالات من التحريف متغيرات التطبيق كما الحرفية في التعبيرات؟

String sql = "SELECT *, " + someJavaVar + " AS constant_column FROM mytable";

هل يمكن البحث عن SQL تحتوي على المحددات سلسلة، ولكن لا يأتي حقن SQL فقط من التحريف سلسلة حرفية.

وكيف رصد حالات من التحريف متغيرات التطبيق عن أمور أخرى من قيم البيانات؟

String sql = "SELECT * FROM mytable ORDER BY " + columnname;

وأنا لا أعرف أي طريقة تلقائية لكشف العيوب حقن SQL. مراجعة التعليمات البرمجية هو وسيلة أكثر فعالية لاكتشافها. في كل بيان SQL يحتوي على متغيرات تطبيق محرف، لديك للتأكد من أن متغيرات التطبيق "آمنة"، وأن التطبيق الخاص بك والتحقق من صحتها بشكل صريح أو حولت لهم حتى أنها لا تحتوي على حمولة خطرة.

نصائح أخرى

هل لديك القدرة على اختبار تماما التطبيق مع مصحح المتصلة به؟

وتعيين نقطة توقف في التطبيق الخاص بك JDBC السائق Connection.createStatement ()، وتشغيل التطبيق ... (أو في حالة استخدام برنامج تشغيل الذي لم يكن لديك شفرة المصدر، وإرسال بريد سائق وهمية أن يدعو المندوبين فقط ل واحد حقيقي، وتسجيل جميع حالات createStatement ())

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