SQL ديناميكي دون حقن
في هذا الدرس 4 موضوعات
هذا الدرس مخطط له. يعرض المخطط أدناه الموضوعات التي سيغطيها، ولم يُنشر الدرس الكامل بعد.
نص الدروس والتمارين باللغة الإنجليزية، بينما تبقى واجهة الموقع وعناوين الدروس بالعربية.
في هذا الدرس
build queries from user input safely.
الموضوعات المخطط لها
- SQL injection: user text becomes part of the SQL command and changes its meaning.
- Values always go through
?placeholders (PreparedStatement); the database never treats them as SQL. - Placeholders cannot be used for column names or
ASC/DESC. - For a user-chosen sort column, use an allow-list (a fixed map from public names to real column names).
- Unknown value: reject it or fall back to a default; never paste it in.
تفاصيل المخطط المبدئي
عرض عملي
private static final Map<String, String> SORTABLE = Map.of("name", "name", "price", "price");
String col = SORTABLE.getOrDefault(sortParam, "name");
String dir = "desc".equalsIgnoreCase(dirParam) ? "desc" : "asc";
String sql = "select id, name, price from product order by " + col + " " + dir;اختبر فهمك
Can you pass a column name as a ? parameter?
أظهر الإجابة
No; use an allow-list.
التطبيق
طبّق هذا الدرس بمختبر الوحدة وتمارينها واختبارها.
تعليم الدرس كمكتمل اختياري ويمكنك التراجع عنه في أي وقت. يبقى تقدمك محفوظًا في هذا المتصفح.