‫ برنامه‌نويسي امن با زبان جاوا – عدم چشم پوشي از مقادير بازگشتي متدها - قانون EXP00-J

شماره:IRCAR201508268
تاريخ: 26/05/94
سومين موضوعي كه در برنامه نويسي امن با زبان جاوا مورد توجه قرار مي‌گيرد «عبارات» است. در ادامه به اولين قانون (EXP00-J) ذيل اين موضوع پرداخته خواهد شد.
قانون EXP00-J – عدم چشم پوشي از مقادير بازگشتي متدها
متدها مي‌توانند مقاديري را براي به روز كردن اشياء يا فيلدهاي محلي يا بدست آوردن اجرا يا عدم اجراي متد برگردانند. مخاطرات امنيتي زماني مي‌تواند بُروز كند كه مقادير بازگشتي متدها ناديده گرفته شود يا متد فراخواني شده قادر به انجام اقدام مناسب نباشد. در نتيجه، برنامه ها نبايد از مقادير بازگشتي متد چشم پوشي كنند.
زماني كه متدهاي دريافت كننده (getter method)، هم نام عملياتي نام گذاري مي‌شوند، برنامه نويس احتمالا متوجه اينكه مقدار بازگشتي‌اي مورد انتظار است نخواهد شد. به طور مثال، تنها منظورِ متد ProcessBuilder.redirectErrorStream()اين است كه از طريق مقدار بازگشتي متد مشخص شود آيا سازنده فرآيند، خطاي استاندارد و خروجي استاندارد را به طور موفقيت آميزي تركيب كرده است يا خير. اين روش كه جريان خطا را هدايت مي كند، همان روش تك آرگوماني ProcessBuilder.redirectErrorStream(boolean) مي باشد.
 
يك نمونه ناسازگار با قانون (حذف فايل)
در اين نمونه ناسازگار، فايلي حذف شده اما موفقيت آميز بودن انجام اينكار چك نمي‌شود:
 
راه حل سازگار با قانون
اين راه حل، مقدار بولين برگردانده شده از متد delete() را بررسي كرده و به هر خطاي منتج رسيدگي مي‌كند:
 
يك نمونه ناسازگار با قانون (جايگزيني رشته)
در اين نمونه ناسازگار، مقدار برگشتي متد String.replace() ناديده گرفته شده و رشته اصلي به روز نمي‌شود. متد String.replace() حالت String را نمي‌تواند تغيير دهد چرا كه اشياء از نوع String تغيير ناپذير (immutable) هستند؛ به جاي اينكار، اين متد ارجاعي را به شي جديدي از نوع String كه حاوي رشته تغييريافته است بر مي‌گرداند.
 
پردازش مقادير بازگشتي از متدهاي شي تغيير ناپذير مهم است. اگر چه بسياري از متدهاي مرتبط با اشياء تغييرپذير از طريق تغيير برخي از حالات دروني شي عمل مي‌كنند، اما متدهاي مرتبط با اشياء تغييرناپذير نمي‌توانند شي را تغيير دهند و اغلب شي جديد تغيير يافته‌اي را بر مي‌گردانند و شي اصلي را تغيير نيافته باقي مي‌گذارند.
 
راه حل سازگار با قانون
در اين راه حل سازگار، رشته original به طور صحيح با مقدار برگشتي متد String.replace() به روز رساني مي‌شود:
 
ارزيابي خطر
ناديده گرفتن مقادير بازگشتي متد مي‌تواند منجر به رفتار غيرمنتظره در برنامه شود.
 
تشخيص خودكار
مطالب مرتبط:
برنامه‌نويسي امن با زبان جاوا – آشنايي
برنامه‌نويسي امن با زبان جاوا – قانون اعلان‌ها و مقدار دهي اوليه- قانون DCL00-J – بخش اول
برنامه‌نويسي امن با زبان جاوا – قانون اعلان‌ها و مقدار دهي اوليه- قانون DCL00-J – بخش دوم
برنامه‌نويسي امن با زبان جاوا – عدم استفاده مجدد از شناسه‌هاي عمومي كتابخانه استاندارد جاوا- قانون DCL01-J
برنامه‌نويسي امن با زبان جاوا – عدم تغيير مولفه‌هاي مجموعه در حين استفاده از عبارت for بهبود يافته- قانون DCL02-J
منبع:
 

نظرات

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

نوشته

 
تاریخ ایجاد: 2 شهریور 1394

دسته‌ها

امتیاز

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