۱۳۸۸/۰۲/۲۶

banned.h


مطالبي توسط تيم Security Development Lifecycle مايكروسافت منتشر شده مبني بر اينكه آن‌ها هم يك سري از توابع استاندارد زبان C را در كدهاي جديد خود ممنوع كرده‌اند. مستندات آن‌را در مقاله زير مي‌توانيد مشاهده نمائيد:


اخيرا فايل header آن نيز مطابق آخرين به روز رساني‌هاي مورد استفاده منتشر شده است:


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

جديدترين تابعي كه به اين ليست اضافه شده ، تابع memcpy است كه سر منشاء نقايص امنيتي زير بوده است:
MS03-030 (DirectX)
MS03-043 (Messenger Service)
MS03-044 (Help and Support)
MS05-039 (PnP)
MS04-011 (PCT)
MS05-030 (Outlook Express)
CVE-2007-3999 (MIT Kerberos v5)
CVE-2007-4000 (MIT Kerberos v5)
...!

#pragma deprecated (memcpy, RtlCopyMemory, CopyMemory)
در اين حالت زمانيكه كد خود را كامپايل نمائيد با اخطار زير مواجه خواهيد شد:
warning C4995: 'memcpy': name was marked as #pragma deprecated
جايگزين آن تابع memcpy_s معرفي شده است و در اين حالت كد قديمي:
char dst[32];
memcpy(dst,src,len);
بايد به كد زير تبديل گردد:
char dst[32];
memcpy_s(dst,sizeof(dst), src,len);
كه يك آرگومان بيشتر دارد و آن هم اندازه‌ي بافر مقصد مورد نظر است.

براي مطالعه بيشتر
Please Join me in welcoming memcpy() to the SDL Rogues Gallery
Unsafe at any speed: Memcpy() banished in Redmond
Good hygiene and Banned APIs
A Look Inside the Security Development Lifecycle at Microsoft