ایمنی حافظه: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
هیچ یک از معیارهای حذف سریع را ندارد
بدون خلاصۀ ویرایش
خط ۱:
 
'''امنیت حافظه''' یک نگرانی در توسعه نرم‌افزار است که قصد دارد ازاشکالاتاز اشکالات نرم افزاری که باعث آسیب پذیری‌های امنیتی در برخورد با دسترسی به حافظه دسترسی تصادفی (RAM)است می شود جلوگیری کند، مانند انوع buffer Overflow و اشاره گر آویزان.
زبان کامپیوتر مانند C و C + + است که پشتیبانی از اشاره گر دلخواه حساب، ریخته گری، معمولا حافظه امن است. چندین روش مختلف برای پیدا کردن خطاهای موجود در زبان‌هایی وجود دارد، نگاه کنید به بخش تشخیص زیر.
 
زبان سیکلون با استفاده از یک روش ترکیبی، از جمله «اشاره گر چربی" (اشاره گر که حمل ابرداده خود را به طور مستقیم دارد) و مناطق را به برنامه نویسان برخی از کنترل سطح پایین در حالی که هنوز به اطمینان از ایمنی از حافظه‌است.
بالا ترین سطح زبان‌های برنامه نویسی اجتناب از مشکل را با رد کردن حساب
 
اشاره‌گر و ریخته‌گری به طور کامل، و با اجرای ردیابی زباله به عنوان مجموعه‌ای در این طرح تنها مدیریت حافظه‌است.
 
یک زبان می‌تواند حساب، ریخته گری اشاره گر را بدون به خطر انداختن امنیت حافظه با استفاده از اثبات قضیه خودکار
به عنوان یک شکل از تجزیه و تحلیل کد ایستا پشتیبانی می‌کند. ESC / جاوا و نشان دادن دو راه‌است که برنامه نویسان می‌توانند از ویژگیهای خود را در راه اعلام است که می‌تواند توسط prover قضیه درک شود.
 
==انواع خطاهای حافظه==
سطر ۱۵ ⟵ ۷:
انواع مختلفی از خطاهای حافظه می‌تواند رخ دهد، بسته به نوع زبان برنامه نویسی استفاده می‌شود.
 
*'''[[سرریز بافر]]:'''
*'''سرریز بافر:'''در خارج از محدود می‌نویسد، می‌تواند محتوای اشیاء مجاور، یا داده‌های داخلی مانند اطلاعات حسابداری برای پشته و یا آدرس بازگشت را فاسد کند.
*'''خطاهای حافظه:'''
*'''خطاهای حافظه:''' مدیریت حافظه و اشاره گرها نادرست درجه معلق اشاره‌گر - اشاره‌گر ذخیره آدرس یک شی است که حذف شده‌است.
*'''درجه دو آزاد:'''
*'''درجه دو آزاد:''' تماس‌های مکرر برای آزادی جسم در حال حاضر آزاد شده‌است. می‌تواند باعث freelist مبتنی بر allocators به شکست است.
*'''درجه نامعتبر:'''
*'''درجه نامعتبر:'''پس از گذشت یک آدرس نامعتبر به رایگان می‌توانید توده را فاسدکنید. و یا گاهی اوقات منجر به رفتار تعریف نشده‌است.می‌تواند دسترسی به اشاره گر نول درجه یک استثنا یا خاتمه برنامه در بسیاری از محیطها را ایجاد کند، اما همچنین می‌تواند باعث فساد در مغز سیستم عامل و یا سیستم بدون حفاظت از حافظه، و یا زمانی که استفاده از اشاره گر تهی شامل افست‌های بزرگ و یا منفی است.
* متغیرهای مقداردهی نشده
* متغیرهای مقداردهی نکردن یک متغیر است که تعیین یک مقدار استفاده شده‌است. ممکن است ناخواسته و یا در بعضی زبان‌ها، ارزش‌های فاسد داشته باشد.
*اشاره گر وحشی
*خطاهای خارج از خطاهای حافظه
 
درجه سرریز پشته - هنگامی رخ می‌دهد که یک برنامه خارج از فضای پشته اجرا می‌شود، به طور معمول به دلیل از بازگشت بیش از حد عمیقمی‌شود است.
اشاره گر وحشی درجه بوجود می‌آیند که یک اشاره‌گر قبل از مقداردهی اولیه به برخی از دولت شناخته شده استفاده می‌شود. آنها نشان می‌دهد رفتار غیر قابل پیشبینی به عنوان اشاره‌گر آویزان، هر چند آنها هستند، کمتر احتمال دارد برای ماندن غیر قابل تشخیص است.
شکستتخصیص تخصیصشکست - این برنامه تلاش می‌کند تااز حافظه بیش از مقدار موجوداستفاده شود. در برخی از زبانها، این وضعیت را باید بعد از هر تخصیص دستی بررسی شود.
 
*خارج از خطاهای حافظه
 
درجه سرریز پشته - هنگامی رخ می‌دهد که یک برنامه خارج از فضای پشته اجرا می‌شود، به طور معمول به دلیل از بازگشت بیش از حد عمیق است.
شکست تخصیص - این برنامه تلاش می‌کند تااز حافظه بیش از مقدار موجوداستفاده شود. در برخی از زبانها، این وضعیت را باید بعد از هر تخصیص دستی بررسی شود.
 
==اشاره گر معلق==
یک اشاره گر است که اشاره به حافظه شده‌است.
یک اشاره گر آویزان است. در زبان مدیریت حافظه کتابچه راهنمای کاربر، اشاره گر آویزان می‌تواند بوجود بیاید. {{سرخط}}
<syntaxhighlight lang="c">
int *a = new int;
سطر ۳۸ ⟵ ۲۹:
*a = 4; /* Memory error: we may be overwriting another pointer's data */
</syntaxhighlight>
 
وجود ساده از اشاره گرها ی آویزان، خطای حافظه تلقی نمی‌شود. با این حال، خواندن از یا نوشتن به یک اشاره گر آویزان اشتباه‌است، به عنوان حافظه اشاره شده ممکن است در رونویسی و یا جابجا.
==سر ریز بافر==
بافر ناحیه ذخیره سازی موقت داده‌است. سرریز بافر معمول ترین راه برای حمله در خارج از سیستم برای به دست آوردن دسترسی غیر مجاز به سیستم هدف می‌باشد. سرریز بافر وقتی رخ می‌دهد که یک برنامه سعی می‌کند داده‌های بیشتری را در یک بافر از آن برای نگهداری در نظر گرفته شده بود ذخیره کند. از آنجا که بافر حاوی مقدار محدودی از داده‌ها، اطلاعات بیشتری می‌تواند سرریز به بافر مجاور شود، فساد یا جای نوشتن داده‌های معتبر که در them.It برگزار شد اجازه می‌دهد تا حمله به کد روند موجود تداخل اتفاق بیافتد. مهاجم با استفاده از *بافر سرریز پشته انجام می‌دهد،
*سرریز زمینه ورودی، فضای خط فرمان و یا بافر ورودی.
*بازنویسی آدرس بازگشت در پشته با آدرس از کد حمله‌است.
*نوشتن یک کد ساده که مهاجم برای اجرا می‌خواهد.
 
<syntaxhighlight lang="c">
سطر ۶۱ ⟵ ۴۹:
}
</syntaxhighlight>
 
تا زمانی به اندازه این آرایه‌است که کمتر از برنامه ARRAY_SIZE به درستی کار می‌کند.
اگر اندازه آرگومان خط فرمان بزرگتر از ARRAY_SIZE شد سپس آن به درستی کار نمی‌کند.
تابع کار خواهد کرد تا زمانی که برخورد کند با NULL نابودگر (\ ۰) یا تا زمانیکه مواجه شود با NULL نابودگر (\ ۰) یا تا زمانی که برنامه قفل شود.
 
این برنامه دچار مشکل سرریز بافر می‌باشد.
راه حل برای این مشکل، از ویژگی‌های است که اجرای برنامه از کد را در بخش پشته از حافظه اجازه نمی‌دهد.