هل هناك فئة أو طريقة في Java تتحقق مما إذا كانت السلسلة عبارة عن كلمة مرور SQL Server؟

أريد شيئًا يمكنه التحقق مما إذا كانت السلسلة "SELECT" و "INSERT" ، إلخ. أنا أشعر بالفضول فقط إذا كان هذا موجودًا.

1

4 إجابة

سهل بما فيه الكفاية لإضافة:

    HashSet  sqlKeywords    =
     new HashSet(Arrays.asList(
       new String[] { ... cut and paste a list of sql keywords here ..  }));
4
وأضاف

إذا كنت تحاول منع إدخال SQL ، فمن الأفضل الاستفادة من الميزات المدمجة في JDBC ، مثل البيانات المعدة. بشكل عام ، استخدام سلسلة string لتشكيل عبارة SQL أمر خطير. من Preventing SQL Injection in Java :

Prepared Statements:

String selectStatement = "SELECT * FROM User WHERE userId = ? ";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
prepStmt.setString(1, userId);
ResultSet rs = prepStmt.executeQuery();
3
وأضاف

DatabaseMetaData.getSQLKeywords سيعود الكلمات الرئيسية لقواعد البيانات غير الموجودة في SQL-2003 (يمكن العثور على الكلمة الأساسية SQL-2003 في المعيار). هناك طرق أخرى داخل هذه الواجهة للحصول على أنواع مختلفة من أسماء الدوال وما شابه.

كما ذكر تشيس سيبيرت ، لا تعتقد أن هذه طريقة فعالة لحظر هجمات حقن SQL.

1
وأضاف

لماذا لا تبدأ بـ هذا المخزن الإجراء وتعديله ليناسب احتياجاتك ، وربما حتى تحويله إلى جافا باستخدام hashmap كما اقترح ستيف.

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

1
وأضاف