فا

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

IRCAR201309186
تاريخ: 29/06/92
در مطالب قبلي سلسله مقالات برنامه نويسي امن با زبان جاوا به معرفي مباحث مطرح در اين زمينه پرداختيم. از اين مطلب به بعد قوانين مربوط به هر يك از مباحث مطرح شده را به صورت مفصل توضيح خواهيم داد.
اولين موضوعي كه به طور كلي در برنامه نويسي امن (رجوع شود به مقاله اصول برنامه نويسي امن) و همچنين در برنامه نويسي امن با زبان جاوا مورد توجه قرار مي گيرد مربوط به اعتبار سنجي ورودي و پاكسازي داده ها است. در اين موضوع چهارده قانون معرفي مي گردد كه سطوح امنيتي مختلفي دارند. چهار قانون از آنها از آنها از درجه اهميت بالايي برخوردارند كه با درجه اهميت L1 و رنگ قرمز مشخص شده اند.
در استانداردهاي كدنويسي امن CERT، هر قانون داراي بخشي به نام ارزيابي خطر يا Risk Assessment است كه به برنامه نويسان نشان مي دهد در صورت رسيدگي نكردن به يك آسيب پذيري خاص در كد برنامه، ممكن است چه نتايج بالقوه اي به بار آيد. اين اطلاعات در اولويت بندي آسيب پذيري هايي كه بايد رسيدگي شوند، توسط تيم برطرف كننده آسيب پذيري ها به كار گرفته مي شود.
ناديده انگاشتن هر قانون منجر به ايجاد آسيب پذيري هايي مي شود كه هر كدام از آنها از لحاظ جديت خطر (severity)، احتمال سوءاستفاده (likelihood) و هزينه ترميم (Remediation Cost) متفاوت هستند. در بخش ارزيابي خطر هر قانون، موارد مذكور نشان داده مي شود. در جداول زير دسته بندي هاي مذكور نشان داده شده اند.
جديت يا Severity
احتمال سوءاستفاده يا likelihood
هزينه ترميم

سه مقدار مذكور در يكديگر ضرب خواهند شد تا ميزان اهميت به كارگيري هر قانون را نشان دهند. عدد به دست آمده مقداري بين 1 تا 27 خواهد بود كه تنها ده رقم 1، 2، 3، 4، 6، 8، 9، 12، 18 و 27 مجاز هستند (اين عدد با P مخفف Priority نشان داده مي شود). قوانين و پيشنهاداتي كه داراي اولويت بين 1 تا 4 باشند سطح 3 (L3)، 6 تا 9 سطح 2 (L2) و 12 تا 27 سطح 1 (L1) در نظر گرفته مي شوند..

به دليل ميزان جديت حملات ايجاد شده و احتمال بالاي سوءاستفاده در صورت رعايت نكردن قوانين سطح 1، اين قوانين از اهميت بيشتري برخوردارند.

در زير قوانين موضوع اعتبارسنجي ورودي و پاكسازي داده ها و در ادامه سطوح امنيتي آنها آورده شده است.

قانون IDS00-J. داده هاي نامطمئن را كه از مرزهاي معتمد عبور مي كنند پاكسازي نماييد.
قانون IDS01-J. رشته ها را قبل از اعتبارسنجي نرمال سازي كنيد.
قانون IDS02-J. نام مسيرها را قبل از اعتبارسنجي متمركزسازي كنيد.
قانون IDS03-J. ورودي هاي پاكسازي نشده كاربر را ثبت ننماييد.
قانون IDS04-J. فايلها را به طريقي امن از ZipInputStream استخراج كنيد.
قانون IDS05-J. از زيرمجموعه ASCII براي نام فايل ها و مسيرها استفاده كنيد.
قانون IDS06-J. استفاده از ورودي هاي پاكسازي نشده كاربر را در رشته هاي قالب ممنوع نماييد.
قانون IDS07-J. داده هاي پاكسازي نشده و نامطمئن را به تابع Runtime.exec() ارسال نكنيد.
قانون IDS08-J. داده هاي نامطمئن را كه به regex ارسال مي شوند، پاكسازي نماييد.
قانون IDS09-J. از توابع وابسته به محل بر روي داده هاي وابسته به محل قبل از اينكه به روشني محل مزبور را مشخص كرده باشيد، استفاده نكنيد.
قانون IDS10-J. كاراكترها را بين دو ساختار داده نشكافيد.
قانون IDS11-J. قبل از اعتبارسنجي بخش هايي از برنامه را كه غير كاراكتري هستند حذف نماييد.
قانون IDS12-J. در تبديل داده هاي رشته اي بين رمزنگاري هاي مختلف كاراكترها از روشهايي كه داده ها را از دست نمي دهند استفاده نماييد.
قانون IDS13-J. از رمزنگاري هاي سازگار در هر دو سوي فايل يا ورودي/خروجي شبكه استفاده نماييد.
در مقالات آينده قوانين مذكور به طور مفصل شرح داده خواهند شد.
مطالب مرتبط

نظرات

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

نوشته

 
تاریخ ایجاد: 18 مرداد 1393

دسته‌ها

امتیاز

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