en

‫ برنامه‌نويسي امن با زبان جاوا – عدم استفاده از متد Object.equals() براي مقايسه دو آرايه- قانون EXP02-J


شماره: IRCAR201510277

تاريخ: 20/07/94

سومين موضوعي كه در برنامه نويسي امن با زبان جاوا مورد توجه قرار مي‌گيرد «عبارات» است. در ادامه به سومين قانون (EXP02-J) ذيل اين موضوع پرداخته خواهد شد.

قانون EXP02-J – عدم استفاده از متد Object.equals() براي مقايسه دو آرايه

آرايه‌ها در جاوا از جنس اشياء هستند و از متدهاي شي مانند Object.equals() پشتيباني مي‌كنند. اما آرايه‌ها از هيچ متدي علاوه بر آنهايي كه توسط Object فراهم شده است پشتيباني نمي‌كند. در نتيجه، استفاده از Object.equals() روي هر آرايه فقط ارجاعات (references) آرايه را مقايسه مي‌كند و نه محتواي (contetnts) آنها را. برنامه نويساني كه قصد مقايسه محتواي دو آرايه را دارند بايد از متد استاتيك Arrays.equals() با دو ورودي استفاده كنند. با استفاده از اين متد، زماني دو آرايه برابر هستند كه هر دو آرايه حاوي تعداد يكساني مولفه باشد و تمام جفت مولفه هاي متناظر باهم در هر دو آرايه مطابق با Object.equals() يكسان باشند. به عبارتي ديگر، دو آرايه زماني يكسان هستند كه آنها به ترتيب مولفه‌هاي يكساني داشته باشند. براي تست تساوي ارجاع (reference equality) از عملگرهاي تساوي ارجاع (== و !=)، استفاده كنيد.

به دليل اينكه تاثير استفاده از Object.equals() براي مقايسه دو آرايه، اغلب به اشتباه تعبير به تساوي محتوا مي‌شود و به دليل اينكه جايگزين بهتري در استفاده از عملگرهاي تساوي ارجاع وجود دارد، استفاده از متد Object.equals() براي مقايسه دو آرايه مجاز نيست.


يك نمونه ناسازگار با قانون

اين نمونه ناسازگار، از متد Object.equals() براي مقايسه دو آرايه استفاده مي‌كند:

راه حل سازگار با قانون

اين راه حل سازگاري، محتواي دو آرايه را با استفاده از متد Arrays.equals() با دو ورودي مقايسه مي‌كند:

راه حل سازگار با قانون

اين راه حل سازگاري، ارجاعات آرايه را با استفاده از عملگرهاي تساوي ارجاع (==) مقايسه مي‌كند:

ارزيابي خطر

با استفاده از متد equals() يا عملگرهاي رابطه‌اي براي مقايسه محتواي آرايه نتايج نادرستي به دست مي‌آيد كه مي تواند منجر به آسيب پذيري‌هايي شود.

تشخيص خودكار

تشخيص استاتيك فراخواني هاي Object.equals() آسان است. با اين وجود، اين امكان هميشه وجود ندارد كه بتوان به صورت استاتيك دسته هدف فراخواني متد را پيدا كرد. در نتيجه، تعيين اينكه چه موقع Object.equals() براي نوع آرايه فراخواني شده است هميشه ممكن نيست.

مطالب مرتبط:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

برنامه‌نويسي امن با زبان جاوا – قانون اعلان‌ها و مقدار دهي اوليه- قانون DCL00-J – بخش اول

برنامه‌نويسي امن با زبان جاوا – قانون اعلان‌ها و مقدار دهي اوليه- قانون DCL00-J – بخش دوم

برنامه‌نويسي امن با زبان جاوا – عدم استفاده مجدد از شناسه‌هاي عمومي كتابخانه استاندارد جاوا- قانون DCL01-J

برنامه‌نويسي امن با زبان جاوا – عدم تغيير مولفه‌هاي مجموعه در حين استفاده از عبارت for بهبود يافته- قانون DCL02-J

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

برنامه‌نويسي امن با زبان جاوا – عدم استفاده از null در جايي كه يك شي لازم است- قانون EXP01-J


منبع:

https://www.securecoding.cert.org/


The Wall

No comments
You need to sign in to comment