مطالبی توسط تیم 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 GalleryUnsafe at any speed: Memcpy() banished in RedmondGood hygiene and Banned APIsA Look Inside the Security Development Lifecycle at Microsoft