ایمنی حافظه

ایمنی حافظه یک نگرانی در توسعه نرم‌افزار است که قصد دارد از اشکالات نرم‌افزاری که باعث آسیب پذیری‌های امنیتی در برخورد با دسترسی به حافظه دسترسی تصادفی (RAM) می‌شود جلوگیری کند، مانند انوع buffer Overflow و اشاره گر آویزان.

انواع خطاهای حافظه 

انواع مختلفی از خطاهای حافظه می‌تواند رخ دهد، بسته به نوع زبان برنامه نویسی استفاده می‌شود.
 سرریز بافر: 
 خطاهای حافظه: 
 درجه دو آزاد: 
 درجه نامعتبر: 
 متغیرهای مقداردهی نشده
 اشاره گر وحشی 
 خطاهای خارج از حافظه

سرریز پشته - هنگامی رخ می‌دهد که یک برنامه خارج از فضای پشته اجرا می‌شود 
تخصیص شکست - این برنامه تلاش می‌کند تااز حافظه بیش از مقدار موجوداستفاده شود. در برخی از زبانها، این وضعیت را باید بعد از هر تخصیص دستی بررسی شود.

اشاره گر معلق 
یک اشاره گر است که اشاره به حافظه شده‌است.

    int *a = new int;
    int *b = a;
    delete b;
    /* a and b are now dangling pointers */
    *a = 4; /* Memory error: we may be overwriting another pointer's data */

سر ریز بافر 
بافر ناحیه ذخیره‌سازی موقت داده‌است. سرریز بافر وقتی رخ می‌دهد که یک برنامه سعی می‌کند داده‌های بیشتری را در یک بافر از آن برای نگهداری در نظر گرفته شده بود ذخیره کند. 

# include <stdio.h>
# define ARRAY_SIZE 128
int main(int argc, char *argv[])
{
   char arr[ARRAY_SIZE];
   if(argc <2)
       return -1;
   else
   {
       strcpy(arr, argv[1]);
       return 0;
 }
}

این برنامه دچار مشکل سرریز بافر می‌باشد.
راه حل برای این مشکل، از ویژگی‌های است که اجرای برنامه از کد را در بخش پشته از حافظه اجازه نمی‌دهد.
برخی از زبان‌های برنامه نویسی سیستم نسبت به سرریز بافر ایمن هستند.

پرل به صورت خودکار تغییر و تنظیم اندازه آرایه‌ها را انجام می‌دهد، و Ada95 تشخیص و جلوگیری از سرریز بافر را.

منابع 

 http://people.cs.umass.edu/~emery/pubs/fp014-berger.pdf

اشکال‌های برنامه‌نویسی
سوءاستفاده امنیتی از رایانه
موضوعات مربوط به زبان‌های برنامه‌نویسی
پیاده‌سازی زبان برنامه‌نویسی