IRCAR201404209
تاريخ: 24/01/93
اولين موضوعي كه به طور كلي در برنامه نويسي امن (رجوع شود به مقاله اصول برنامه نويسي امن) و همچنين در برنامه نويسي امن با زبان جاوا مورد توجه قرار مي گيرد مربوط به اعتبار سنجي ورودي و پاكسازي داده ها است. در اين موضوع چهارده قانون معرفي مي گردد كه سطوح امنيتي مختلفي دارند (رجوع شود به مقاله برنامهنويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي دادهها - آشنايي). هفتمين قانون از اين موضوع داراي سطح امنيتي سه (L3) بوده و از اولويت (P4) برخوردار مي باشد.
قانون IDS06-J – ورودي كاربر پاكسازي نشده را از رشته هاي قالب حذف كنيد.
تفسير رشته هاي قالب در جاوا با سخت گيري بيشتري نسبت به زبانهايي همچون c انجام مي گيرد. پياده سازي هاي كتابخانه استاندارد، زماني كه تبديل آرگومان ها به قالب با شكست مواجه مي شود، استثناي مناسب را فراخواني مي كند. اين روش فرصت سوءاستفاده هاي خرابكارانه را كاهش مي دهد. با اين وجود، در صورتي كه ورودي كاربر خرابكار به عنوان يك رشته قالب قبول شود، منجر به نشت اطلاعات يا انكار سرويس مي شود. در نتيجه، ورودي از منابع نامطمئن نبايد به عنوان قالب رشته مورد پذيرش قرار گيرد.
يك نمونه ناسازگار با قانون
اين نمونه ناسازگار كاراكترهاي نامطمئن در نام فايل استفاده شده اند:
classFormat { staticCalendar c = newGregorianCalendar(1995, GregorianCalendar.MAY, 23); publicstaticvoidmain(String[] args) { // args[0] is the credit card expiration date // args[0] can contain either %1$tm, %1$te or %1$tY as malicious // arguments // First argument prints 05 (May), second prints 23 (day) // and third prints 1995 (year) // Perform comparison with c, if it doesn't match print the // following line System.out.printf(args[0] + " did not match! HINT: It was issued on %1$terd of some month", c); } }
هر پلتفرم روش خود را براي نگاشت كاراكترهاي نامطمئن دارا است. براي مثال زماني كه برنامه فوق بر روي يك سيستم لينوكس Ubuntu اجرا شد، نام فايل زير را توليد كرد:
راه حل سازگار با قانون
براي نام فايل تنها از زير مجموعه كاراكترهاي ASCII استفاده شده است.
classFormat { staticCalendar c = newGregorianCalendar(1995, GregorianCalendar.MAY, 23); publicstaticvoidmain(String[] args) { // args[0] is the credit card expiration date // Perform comparison with c, // if it doesn't match, print the following line System.out.printf("%s did not match! " + " HINT: It was issued on %1$terd of some month", args[0],c); } }
ارزيابي خطر
شكست در استفاده از زيرمجموعه اي امن از كاراكترهاي ASCII منجر به تفسير ناصحيح داده ها مي شود.
مطالب مرتبط:
برنامهنويسي امن با زبان جاوا - آشنايي
برنامهنويسي امن با زبان جاوا – نشت اطلاعات حساس
برنامهنويسي امن با زبان جاوا – نشت قابليت ها
برنامهنويسي امن با زبان جاوا – انكار سرويس
برنامهنويسي امن با زبان جاوا – ارتقاي حق دسترسي
برنامهنويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي دادهها – قانون IDS00-J – قسمت اول
برنامهنويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي دادهها – قانون IDS04-J
- 7