فا

‫ برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS09-J – قسمت اول

شماره:IRCAR201411240
تاريخ:02/08/93
اولين موضوعي كه به طور كلي در برنامه نويسي امن (رجوع شود به مقاله اصول برنامه نويسي امن) و همچنين در برنامه نويسي امن با زبان جاوا مورد توجه قرار مي گيرد مربوط به اعتبار سنجي ورودي و پاكسازي داده ها است. در اين موضوع چهارده قانون معرفي مي گردد كه سطوح امنيتي مختلفي دارند (رجوع شود به مقاله برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها - آشنايي). دهمين قانون از اين موضوع داراي سطح امنيتي دو (L2) بوده و از اولويت (P8) برخوردار مي باشد.
قانون IDS09-J – تعيين زبان محلي مناسب در زمان بررسي داده وابسته به زبان محل
استفاده از متدهاي وابسته به زبان محلي(locale) براي داده وابسته به زبان محلي مي‌تواند نتايج غيرقابل انتظاري را در زمان مشخص نبودن زبان محلي ايجاد كند. شناسه‌هاي زبان برنامه نويسي، كليدهاي پروتكلي(protocol keys) و برچسب‌هاي HTML اغلب در يك زبان محلي خاصي –معمولاً Locale.ENGLISH- مشخص شده‌اند. با اين وجود، كاربر مي‌تواند برنامه را در زبان محلي ديگري اجرا كند به طوريكه برنامه به شكل ديگري اجرا شود. حتي ممكن است فيلترهاي ورودي بوسيله تغيير زبان محلي پيش فرض، دور زده شوند. به همين دليل، زبان محلي بايد در هر برنامه‌اي كه از داده ايجاد شده توسط تابع وابسته به زبان محلي استفاده مي‌كند مشخص باشد.
به طور مثال، كد زير را در نظر بگيريد:
اين كد در زبان انگليسي، همانگونه كه انتظار مي‌رود عمل مي‌كند:
در بيشتر زبان‌هاي اروپايي حرف I به عنوان حرف بزرگِ حرف i در نظر گرفته مي‌شود. اما زبان تركي يك استثنا است: اين زبان يك i نقطه دار (dotted i) دارد كه حرف بزرگ آن (İ) نيز نقطه دارد و يك ıبدون نقطه دارد كه حرف بزرگ آن (I) بدون نقطه است. تغيير نوشتاري حروف بزرگ در بيشتر رشته‌هاي (string) زبان تركي ممكن است نتايج غيرقابل انتظاري ايجاد كند:
برنامه‌هايي كه از توابع وابسته به زبان محلي فقط براي نمايش خروجي‌اي مانند تاريخ استفاده مي‌كنند، داده وابسته به زبان محلي را بررسي نمي‌كنند و ممكن است به زبان محلي پيش فرض اعتماد كنند.
يك نمونه ناسازگار با قانون (toUpperCase())
بسياري از برنامه‌هاي كاربردي وب، مانند نرم افزار وب لاگ نويسي يا فروم، HTML را به عنوان ورودي گرفته و آن را به عنوان خروجي نمايش مي‌دهند. نمايش HTML نامطمئن، مي‌تواند منجر به برنامه تحت وبي شود كه حاوي آسيب پذيري‌هاي تزريق HTML يا XSS شود؛ بنابراين، پاك سازي HTML قبل از ارسال آن به مرورگر وب امري حياتي است.
يك مرحله عمومي در پاك سازي، شناسايي برچسب‌هايي است كه احتمالاً حاوي محتواي مخرب هستند. يكي از اين برچسب‌ها، برچسب <SCRIPT> است؛ اين برچسب نوعاً حاوي كد جاوا اسكريپتي است كه توسط مرورگر كلاينت اجرا مي‌شود. پاك سازي HTML، شامل شناسايي برچسب‌هاي <SCRIPT> و تبديل آنها به مواردي بي‌ضرر، يا حذف كامل آنها است؛ اما شناسايي برچسب‌هاي <SCRIPT> آنقدر هم كه به نظر مي‌رسد ساده نيست.
در HTML، برچسب‌ها حساس به حروف بزرگ و كوچك نيستند و مي‌توانند با استفاده از حروف كوچك، حروف بزرگ يا تركيب اين دو مشخص شوند. كد نمونه ناسازگار زير از متد String.toUpperCase() -كه وابسته به زبان محلي است- براي تبديل برچسب HTML به حروف بزرگ، جهت استفاده در پردازش‌هاي آتي استفاده مي كند. اگر چه زبان محلي انگليسي “script” را به “SCRIPT” تبديل مي‌كند اما زبان محلي تركي “script” را به “SCRİPT” تبديل كرده و منجر به عدم بررسي scriptها در پردازش‌هاي بعدي مي شود.
راه حل سازگار با قانون (اشاره صريح به زبان محلي)
اين راه حل سازگار براي جلوگيري از نتايج غيرمنتظره، زبان محلي را به انگليسي تنظيم مي‌كند.
مشخص كردن Locale.ROOT جايگزين مناسبي است براي شرايطي كه زبان محلي انگليسي مناسب نيستند.
راه حل سازگار با قانون (زبان محلي پيش فرض)
اين راه حل سازگار، زبان محلي پيش فرض را قبل از اجراي عملياتي روي رشته تنظيم مي‌كند.
راه حل سازگار با قانون (String.equalsIgnoreCase())
اين راه حل سازگار، زبان‌هاي محلي را از طريق مقايسه بدون درنظر گرفتن حساسيت به بزرگي و كوچكي حرف دور مي زند. متد String.equalsIgnoreCase() شكل صحيح موقتي از رشته را ايجاد مي‌كند. اينكار ممكن است منجر به ناخوانا شدن رشته شود اما منجر به مقايسه صحيح بدون وابستگي به زبان محلي مي شود.
در بخش بعدي مقاله، به دو نمونه ديگر از كدهاي ناسازگار با قانون و راه‌حل‌هاي سازگار آن خواهيم پرداخت.
مطالب مرتبط:
برنامه‌نويسي امن با زبان جاوا - آشنايي
برنامه‌نويسي امن با زبان جاوا - اعتبارسنجي ورودي و پاكسازي داده‌ها
برنامه‌نويسي امن با زبان جاوا – نشت اطلاعات حساس
برنامه‌نويسي امن با زبان جاوا – نشت قابليت ها
برنامه‌نويسي امن با زبان جاوا – انكار سرويس
برنامه‌نويسي امن با زبان جاوا – ارتقاي حقدسترسي
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجيورودي و پاكسازي داده‌ها - آشنايي
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS00-J – قسمت دوم
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS00-J – قسمت اول
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS01-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS02-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS03-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS04-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS05-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS06-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS07-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS08-J
منبع:
https://www.securecoding.cert.org/

نظرات

بدون نظر
شما برای نظر دادن باید وارد شوید

نوشته

 
تاریخ ایجاد: 23 آبان 1393

دسته‌ها

امتیاز

امتیاز شما
تعداد امتیازها: 0