محتويات الدورة

Java / المتقدم / الدرس 17

الحدود الآمنة والمدخلات غير الموثوقة

افصل القيم عن البنية التنفيذية وتحقق من الموارد وقواعد المجال واحم الأسرار وأدلة التشخيص عند حدود تطبيق Java.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تمييز التحقق والتفويض والمعلمات.
  • تقييد التحليل ورفض افتراضات إزالة تسلسل غير آمنة.
  • استخدام التشفير والتشخيص لغرضهما الصحيح.

حدد الثقة وحدود الموارد صراحة

يشمل غير الموثوق الملفات والرسائل والإعداد الخارجي والقيم المخزنة دون ضمان تحقق. افحص النوع والصيغة والمدى والحجم وانتقال الحالة عند الحد المناسب. ليس التحقق تفويضاً؛ فقد يخص معرف صحيح الصيغة حساب شخص آخر. اشتق النطاق من هوية موثوقة وافرضه باتساق.

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

تحقق من الصيغة دون اختراع إصلاح

يقبل المثال رمزاً من خمسة محارف: حرفان لاتينيان كبيران وشرطة ورقمان ASCII. يرفض null وغيره ولا يقص أو يحول أو يستبدل صامتاً. قد يصح التطبيع بعقد آخر لكنه قاعدة مقصودة تتعامل مع التصادم. هذه سياسة منتج لا اسم إنسان.

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

java عقد رمز منتج محدود
public class Main {
static String requireCode(String value) {
 if(value==null || value.length()!=5 || !value.matches("[A-Z]{2}-[0-9]{2}"))
  throw new IllegalArgumentException("invalid product code");
 return value;
}
 public static void main(String[] args) throws Exception {
System.out.println(requireCode("AB-12"));
 }
}
الناتج المتوقع
AB-12

يعاد الرمز المصطنع الصحيح كما هو ويرفض الغائب وغير المطابق بدلاً من اختراعه.

أبعد البيانات عن بنية الأمر

اربط JDBC القيم بمعلمات PreparedStatement ولا تدمجها في SQL. لا تستبدل المعلمات أسماء الجداول أو اتجاه الفرز؛ اختر بنية ديناميكية من خريطة ثابتة معتمدة. ولا تفوض الحساب المختار أو تصحح المعاملة. افصل أسئلة المراجعة.

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

java توضيح ربط JDBC باتصال مخول قائم
try (var statement = connection.prepareStatement(
    "SELECT display_name FROM account WHERE account_id = ?")) {
    statement.setLong(1, accountId);
    try (var rows = statement.executeQuery()) {
        while (rows.next()) {
            System.out.println(rows.getString(1));
        }
    }
}

الاتصال والمعرف مدخلان سياقيان؛ يبقى الجزء غير قابل للتشغيل ولا يتصل بخدمة.

استخدم التجزئة والأسرار وفق ضماناتها

تحسب SHA-256 بصمة محتوى، ولا تصادق التجزئة غير المفتاحية المرسل، وليست التجزئة السريعة تصميماً كاملاً لتخزين كلمات المرور. يبصم المثال نصاً عاماً مصطنعاً ولا يولد أو يحفظ أو يرسل سراً. تحتاج الكلمات تصميماً وسياسة معتمدين يتجاوزان البصمة.

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

java بصمة محتوى عام مصطنع
public class Main {

 public static void main(String[] args) throws Exception {
byte[] digest=java.security.MessageDigest.getInstance("SHA-256")
 .digest("abc".getBytes(java.nio.charset.StandardCharsets.UTF_8));
System.out.println(java.util.HexFormat.of().formatHex(digest));
 }
}
الناتج المتوقع
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

يتحقق من بصمة abc الحتمية ولا يوصي بتجزئة كلمات مرور أو يثبت المرسل.

راجع المحللات الغنية وأدلة الفشل

لا تزل تسلسل كائنات Java أصلية اعتباطية من مصدر غير موثوق. تقيد ObjectInputFilter الأصناف وحدود الشبكة لحالات مدعومة لكنها دفاع لا إذن لقبول أي رسم كائنات. فضّل صيغة صريحة بسيطة بمخطط وحجم وتحقق مجال. تحتاج XML والأرشيف سياسة موارد خارجية وتوسع مراجعة.

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

الأخطاء الشائعة وإصلاحها

SQL injection despite valid-looking input

لماذا يحدث؟
دُمجت القيم ببنية SQL تنفيذية.
كيف تصلحه؟
اربطها وافرض التفويض مستقلاً.
كيف تتجنب تكراره؟
راجع حد أمر JDBC النهائي.

A checksum was treated as sender authentication

لماذا يحدث؟
أُعطي البصم غير المفتاحي ضماناً لا يوفره.
كيف تصلحه؟
استخدم بروتوكول مصادقة أو توقيعاً معتمداً.
كيف تتجنب تكراره؟
وثق غرض كل أداة تشفير.

Sensitive data appeared in logs

لماذا يحدث؟
تجاوز التشخيص حد الكشف.
كيف تصلحه؟
قيّد ونقح ودوّر المكشوف وفق الحادثة.
كيف تتجنب تكراره؟
اختبر الأخطاء بعلامات أسرار مصطنعة.

اختبر فهمك

1. هل يثبت معرف صالح وربطه تفويض قراءته؟

اعرض الحل المشروح

لا؛ يثبت التحقق الصيغة أوالمدى ويحفظ الربط معنى القيمة. اشتق النطاق من هوية موثوقة وتحقق من ملكية الحساب. اختبر معرفاً صالحاً لشخص آخر.

2. استيراد1MB يتمدد إلى5GB. أي حد يهم؟

اعرض الحل المشروح

قيّد المضغوط والموسع وعدد المدخلات والعمل عند الحاجة. لا يقيد حجم المضغوط الذاكرة أو القرص. ارفض قبل تجاوز الميزانية واعزل الجزئي.

أهم ما تعلمته

  • التحقق والربط والتفويض والحدود متكاملة.
  • لا يصادق البصم أو يخزن كلمة مرور بأمان تلقائياً.
  • تحتاج المحللات والتشخيص حدود ثقة واضحة.

المراجع الرسمية