رشتههای C: یک اشتباه ۵۰ ساله
رشتههای null-terminated در زبان C پنجاه سال پیش طراحی شدن و از همون ابتدا با مشکلات امنیتی و حافظهای دست و پنجه نرم کردن. بافر اورفلو، فرسایش حافظه و آسیبپذیریهای امنیتی متعددی ریشه در همین ساختار دارن. بحث اخیر در جامعه برنامهنویسان نشون میده که این مشکل هنوز حل نشده باقی مونده.
چرا مهمه؟
ساختار رشتهها در زبان C بر پایه کاراکتر null پایانیابنده شکل گرفته؛ ساختاری که هیچ مکانیزم ذاتی برای جلوگیری از نوشتن فراتر از مرز حافظه ارائه نمیدهد. میلیونها خط کد در سیستمعاملها، مرورگرها و نرمافزارهای حیاتی هنوز با همین ساختار کار میکنن و همین باعث شده آسیبپذیریهایی مثل Heartbleed و وانمایکرونز و شلکدها همچنان سر برآرن. هر توسعهدهندهای که با C یا C++ کار میکنه، لازمه بفهمه چرا این طراحی قدیمی هنوز تهدید جدی به حساب میاد.
به درد کی میخوره؟
برنامهنویسان C و C++ متخصصان امنیت نرمافزار مهندسان سیستم و توسعهدهندگان هسته لینوکس دانشجویان علوم کامپیوتر
تو عمل چی کار کنیم؟
اگه با C یا C++ برنامهنویسی میکنی، بهتره از تابعهای ایمنتر مثل strncpy و snprintf استفاده کنی یا به سمت زبانهای مدرنتری مثل Rust مهاجرت کنی. کدهای قدیمیتری که نگهداری میکنی رو هم باید از نظر آسیبپذیریهای مرتبط با رشتهها بررسی کنی. شناخت این مشکل بهت کمک میکنه تصمیم بهتری در انتخاب ابزار و زبان بگیری.
نظر Blue IT News
پنجاه سال از معرفی این ساختار گذشته و هنوز کد جدیدی با بافر اورفلو نوشته میشه. Rust با قرضگرفتن اجباری و بررسی مرز حافظه در زمان اجرا، جایگزین جدیای برای این مشکل قدیمی به شمار میاد.