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

 

شماره:IRCAR201412244
تاريخ: 21/09/93
 
اولين موضوعي كه به طور كلي در برنامه نويسي امن (رجوع شود به مقاله اصول برنامه نويسي امن) و همچنين در برنامه نويسي امن با زبان جاوا مورد توجه قرار مي گيرد مربوط به اعتبار سنجي ورودي و پاكسازي داده ها است. در اين موضوع چهارده قانون معرفي مي گردد كه سطوح امنيتي مختلفي دارند (رجوع شود به مقاله برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها - آشنايي). دهمين قانون از اين موضوع داراي سطح امنيتي دو (L2) بوده و از اولويت (P8) برخوردار مي باشد.
 
قانون IDS09-J – تعيين زبان محلي مناسب در زمان بررسي داده وابسته به زبان محل – قسمت دوم
 
در اين بخش از مقاله به دو نمونه ديگر از كدهاي ناسازگار با قانون و راه‌حل‌هاي سازگار آن خواهيم پرداخت.
 
نمونه ناسازگار با قانونFileReader))
 
جاوا كلاس‌هايي براي بررسي ورودي و خروجي مبتني بر بايت‌ها يا كاراكترها دارد. خانواده I/O بايت از واسط‌ هايInputStream  و OutputStream مشتق مي‌شود و مستقل از زبان محلي يا encoding كاراكتر است. اما، خانواده I/O كاراكتر از Reader و Writer مشتق شده و بايد دنباله‌هاي بايت را به رشته‌ها تبديل كند. بنابراين، اين خانواده‌ها حهت اجراي تبديل، وابسته به encoding خاصي براي كاراكتر هستند. اين encoding بوسيله خصوصيت سيستمي file.encoding –كه بخشي از زبان محلي فعلي است- نشان داده مي‌شود. در نتيجه، فايلي كه با encoding مانند UTF-8 رمز گزاري شده است نبايد توسط متدي كه براي ورودي از encoding متفاوتي مانند UTF-16 استفاده مي‌كند خوانده شود.
برنامه‌هايي كه داده كاراكتر را (مستقيماً با استفاده از Reader و يا غيرمستقيم با استفاده از متدي كه از آرايه بايتي، رشته‌اي را مي سازد) مي‌خوانند بايد از منبع داده آگاه باشند. اگر encoding داده ثابت است (به طور مثال، داده از فايل همراه برنامه است)، اين encoding بايد در برنامه مشخص شود. مهاجم مي‌تواند در صورت مشخص نشدن كدينگ در برنامه encoding را تغيير دهد به شكلي كه برنامه داده را با استفاده از encoding اشتباه بخواند.
اين مساله براي برنامه هايي كه داده هاي شناخته شده را مي خوانند صدق نمي كند. اين داده هاي شناخته شده توسط پلت فرم در حال اجراي برنامه در encoding تعيين مي شوند. به عنوان مثال اگر برنامه اي بايد فايلي كه توسط كاربر آماده شده است را باز كند، بهتر است از encoding پيش فرض استفاده نمايد.
برنامه ناسازگار ذيل، كد منبع خود را خوانده و همراه با اضافه كردن شماره خط به اول هر خط آنرا چاپ مي كند. اگر برنامه با وجود اينكه فايل منبع آن در UTF8 ذخيره شده است با آرگومان Dfile.encoding=UTF16- اجرا شود، زباله اي (داده در هم) در فايل خروجي ذخيره خواهد شد.
 
راه حل سازگار با قانون (Charset)
 
در اين راه حل، فايل‌هاي ورودي و خروجي صريحاً با استفاده از UTF8 كدگذاري مي‌شوند. اين برنامه بدون توجه به  encoding پيش فرض، صحيح عمل مي‌كند.
 
 
نمونه ناسازگار با قانونDate))
 
اگرچه مفاهيم روز و سال‌ جامع و عمومي هستند اما نحوه نمايش تاريخ در ميان فرهنگ‌هاي مختلف متفاوت و مختص به زبان‌هاي محلي است. كد ناسازگار ذيل، تاريخ جاري را بررسي كرده و يكي از دو پيام را برحسب اينكه ماه جاري June است يا خير چاپ مي‌كند.
 
اين برنامه در پلتفرم‌هايي با زبان محلي انگليسي همانطور كه انتظار مي‌رود عمل مي‌كند:
 
 
اما در ساير زبان‌هاي محلي جواب صحيح در خروجي چاپ نمي‌شود. به طور مثال، خروجي در زبان محلي آلماني به شكل زير است:
 
راه حل سازگار با قانون (اشاره صريح به زبان محلي)
 
در اين راه حل، تاريخ به واسطه اشاره صريح به زبان محلي انگليسي و بدون در نظر گرفتن زبان محلي فعلي در قالب انگليسي چاپ خواهد شد.
 
 
 راه حل سازگار با قانون (دور زدن زبان محلي)
 
در اين راه حل، قسمت ماه (MONTH) در تاريخ بدون قالب بندي آن بررسي مي‌شود. اگرچه نحوه نمايش تاريخ در هر فرهنگي مختلف است، محتواي تاريخ تقويمي وابسته به فرهنگ نيست. در نتيجه، اين كد در هر زبان محلي كار خواهد كرد.
 
 
ارزيابي خطر
 
قصور در مشخص كردن زبان محلي هنگام استفاده از متدهاي وابسته به زبان محلي و داده‌هاي وابسته به زبان محلي ممكن است منجر به رفتارهاي غيرمنتظره گردد.
 
 
جزييات پياده سازي در آندرويد
 
توسعه دهنده برنامه مي‌تواند زبان محلي را با استفاده از java.util.Locale در آندرويد مشخص كند.
 
مطالب مرتبط:
برنامه‌نويسي امن با زبان جاوا - آشنايي
برنامه‌نويسي امن با زبان جاوا - اعتبارسنجي ورودي و پاكسازي داده‌ها
برنامه‌نويسي امن با زبان جاوا – نشت اطلاعات حساس
برنامه‌نويسي امن با زبان جاوا – نشت قابليت ها
برنامه‌نويسي امن با زبان جاوا – انكار سرويس
برنامه‌نويسي امن با زبان جاوا – ارتقاي حقدسترسي
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجيورودي و پاكسازي داده‌ها - آشنايي
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS00-J – قسمت دوم
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS00-J – قسمت اول
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS01-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS02-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS03-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS04-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS05-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS06-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS07-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS08-J
برنامه‌نويسي امن با زبان جاوا – قوانين اعتبارسنجي ورودي و پاكسازي داده‌ها – قانون IDS09-J – قسمت اول
 
منبع:
https://www.securecoding.cert.org/

نظرات

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

نوشته

 
تاریخ ایجاد: 22 آذر 1393

دسته‌ها

امتیاز

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