وقتی ما هر زبان برنامه نویسی رو فرا میگیریم باید کدنویسی امن آن را هم مسلط شویم چون در دنیای امروز بحث امنیتی یکی از مهمترین مباحث در حوزه برنامه نویسی می باشد. در این مطلب میخواهیم کتاب آموزش برنامه نویسی امن در سی پلاس پلاس را که توسط مرکز مدیریت امداد و هماهنگی عملیات رخدادهای رایانه ای منتشر شده است رو معرفی کنیم و برای دانلود قرار دهیم. این کتاب توسط مرکز ماهر با عنوان کتاب آموزش کد نویسی امن در سی پلاس پلاس در قالب ۳۲۷ صفحه نگارش شده است. اگر می خواهید کدنویسی امن رو در این زبان یاد بگیرید به نظرم این کتاب یکی از بهترین منابع آموزشی حال حاضر به زبان فارسی می باشد. پس همراه ما باشید تا بیشتر با این منبع آموزش آشنا شویم.
سی پلاس پلاس
سی پلاس پلاس یک زبان برنامه نویسی همه منظوره، سطح میانی و شی گرا است. امروزه در جهان بیشتر نرم افزارهای سیستمی از طریق سی پلاس پلاس نوشته می شوند.
نکته جالب : سی پلاس پلاس یک زبان سطح میانی محسوب می شود ولی دارای قابلیت زبان های سطح بالا و پایین بهصورت همزمان است.
آیا سی پلاس پلاس همان سی است ؟
سی پلاس پلاس بسط یافته زبان سی و خیلی قدرتمند تر از سی است. سی پلاس پلاس یک زبان مجزا از سی است. زبان سی پلاس پلاس توسط لابراتوار Bell یا همان Bell Labs به عنوان یک نسخه جدید از زبان برنامه نویسی C طراحی و پیاده سازی شد.
نکته ۱ : برنامه نویسی سی پلاس پلاس نسبت به زبان سی قدرت بیشتری دارد. با زبان سی پلاس پلاس میتوان کارهایی رو انجام داد که با زبان سی نیاز به زحمت بسیار بالای دارد.
نسبت به زبان سی، در زبان سی پلاس پلاس امکاناتی template ها ، class ها ، توابع مجازی یا virtual function ها و operator overloading اضافه شده اند. باید این رو نیز در نظر گرفت که در سی پلاس پلاس قابلیت های Type Checking بیشتری اضافه شده است.
نکته ۲: مدیریت خطاها یا Exception Handling و همچنین ارث بری چندگانه یا multiple inheritances در برنامه نویسی ++C معرفی شدند.
نکته ۳: کامپایلر زبان سی پلاس پلاس قادر است برنامه هایی که به زبان سی نوشته شده اند رو نیز کامپایل کند.
توجه: اگر می خواهید با زبان سی پلاس پلاس بیشتر آشنا شوید پیشنهاد میکنم مقاله سی پلاس پلاس چیست؟ رو مطالعه کنید.
کتاب آموزش برنامه نویسی امن در سی پلاس پلاس
کتاب آموزش کد نویسی امن در سی پلاس پلاس در ۱۰ فصل در قالب ۳۲۷ صفحه نگارش و تهیه شده است. همانطور که در بخش بالا صحبت کردیم این کتاب، بهترین منبع آموزشی برای یادگیری کد نویسی امن در سی پلاس پلاس می باشد.
با گسترش روز افزون نرم افزارها روی پلتفرم های مختلف، امنیت نرم افزار بیش از پیش مورد توجه قرار گرفته است. وجود آسیب پذیری در یک نرم افزار می تواند اهداف یک مهاجم را تحقق بخشد؛ این اهداف می توانند شامل دسترسی به اطلاعات شخصی یک فرد در رایانه، دسترسی به شبکه خصوصی یک شرکت، سرقت اطلاعات موجود در تلفن همراه، مختل سازی یک سرور و صدها هدف دیگر باشند. شاید یک برنام های به ظاهر، کم اهمیت و ساده جلوه داده شود اما وجود آسیب پذیری در آن ممکن است به خطری جدی برای کاربران آن تبدیل شود. زیرا وجود آسیب پذیری مذکور، به تنهایی برای برآورده ساختن اهداف یک مهاجم کافی است. از این روی، برنامه نویسی ایمن یک برنامه در هر سطح و ابعادی، امری ضروری به شمار می رود.
با توجه به اهمیت امنیت نرم افزار، شرکت های بزرگ دنیا به ارائه راهکارهایی همچون طراحی زبان ها و محیط های برنامه نویسی، مفسر، و مترجم هایی با قابلیت های کنترل امنیتی و نیز، راهکارهای امنیتی روی سیستم عامل و بسیاری از راهکارهای دیگر پرداخته اند، اما با توجه به عدم توانایی راهکارها در کنترل تمامی موارد امنیتی، عدم امکان پیاده سازی راهکارهای امنیتی روی برخی ساختارها، ایجاد محدودیت برای دسترسی به برخی منابع و امکانات، و سایر مشکلات کوچک و بزرگ موجود، برنامه نویسی امن یک برنامه، بهترین راهکار برای محافظت از آن برنامه به شمار می رود.
یکی از زبان هایی که علاوه بر محبوبیت فراوان در میان برنامه نویسان، همیشه از زبان های پر بحث در برنامه نویسی ایمن بوده است، خانواده زبان C و به خصوص در میان آنها زبان سی پلاس پلاس است. در این زبان ها، عمده مدیریت منابع به برنامه نویس واگذار شده است، که در صورت عدم مدیریت درست آنها، آسیب پذیری های مختلفی رخ میدهد. کتاب آموزش برنامه نویسی امن با زبان سی پلاس پلاس به این حوزه می پردازد که در ادامه سرفصل هیا این کتاب عنوان شده است.
سرفصل های کتاب آموزش برنامه نویسی امن در سی پلاس پلاس
در بخش زیر تمام سرفصل های کتاب آموزش کد نویسی امن در سی پلاس پلاس را به صورت کامل و ریز مورد بررسی قرار میدهیم تا شما دوستان بیشتر با مطالب ارائه شده در این کتاب آشنا شوید.
فصل اول: مقدمه
- مقدمه
- رشد آسیب پذیری نرم افزارها
- ضرورت برنامه نویسی امن
- راهنمای سند مورد مطالعه
- کاربرد
- شناسه ها
- رفتار تعریف نشده
- نمونه کدهای ناسازگار و راه حل های سازگار
- استثنائات
- ارزیابی خطر
فصل دوم: اعلان ها و مقداردهی اولیه (DCL)
- DCL50-CPP یک تابع variadic سبک C تعریف نکنید
- DCL51-CPP یک شناسه ذخیره شده را اعلان یا تعریف نکنید
- DCL52-CPP هرگز مرجع را از نوع const یا volatile توصیف نکنید
- DCL53-CPP اعلاناتی را که از نظر نحوی مبهم هستند، ننویسید
- DCL54-CPP توابع تخصیص و آزاد سازی را به عنوان خروجی در یک حوزه، سربار کنید
- DCL55-CPP از نشت اطلاعات هنگام گذر از یک شی کلاس در حیطه یک مرز اعتماد، جلوگیری نمایید
- DCL56-CPP از ایجاد چرخه ها در مقداردهی اولیه اشیای ایستا بپرهیزید
- DCL57-CPP به استثنائات اجازه ندهید از توابع مخرب یا آزادساز فرار کنند
- DCL58-CPP فضاهای استاندارد را تغییر ندهید
- DCL59-CPP یک فضای بدون نام را در یک فایل سرآیند تعریف نکنید
- DCL60-CPP از قانون تک توصیفی پیروی کنید
فصل سوم: اصطلاحات (EXP)
- EXP50-CPP به ترتیب ارزیابی برای تأثیرات جانبی وابسته نباشید
- EXP51-CPP یک آرایه را توسط یک اشاره گر نادرست حذف نکنید
- EXP52-CPP در عملوند های ارزیابی نشده، به تاثیرات جانبی وابسته نباشید
- EXP53-CPP حافظه مقدارده اولیه نشده را نخوانید
- EXP54-CPP پس از طول عمر یک شی، به آن دسترسی پیدا نکنید
- EXP55-CPP به یک شی cv-qualified توسط یک شی cv-unqualified دسترسی پیدا نکنید
- EXP56-CPP یک تابع را توسط یک پیوند زبانی نامنطبق فراخوانی نکنید
- EXP57-CPP اشاره گرهای کلاس های ناقص را تبدیل و یا حذف نکنید
- EXP58-CPP از یک شی نوع درست به va_start گذر کنید
- EXP59-CPP از offsetof در ارتباط با انواع و اعضای معتبر استفاده کنید
- EXP60-CPP شی نوع لای های غیراستاندارد را از مرزهای اجرا عبور ندهید
- EXP61-CPP نباید یک شی لاندا بیشتر از اشیایی رجوع شده به خود، عمر کند
- EXP62-CPP به بیت های یک ارائه شی، که بخشی از ارائه مقدار شی نیست، دسترسی پیدا نکنید
- EXP63-CPP به مقدار یک شی انتقال یافته تکیه نکنید
فصل چهارم: اعداد صحیح (INT)
- INT50-CPP به مقدار شمارشی خارج از محدوده تبدیل نکنید
فصل پنجم: کاراکترها و رشته ها (STR)
- STR50-CPP تضمین کنید که ذخیرهسازی برای رشته ها، دارای فضای کافی برای داده های کاراکتری و کاراکتر تهی است
- STR51-CPP اقدام به ساخت یک std::string از یک اشاره گر تهی نکنید
- STR52-CPP از ارجاعات، اشاره گرها و تکرارکننده های معتبر برای ارجاع به عناصر یک basic_string استفاده کنید
- STR53-CPP دسترسی به مولفه بررسی را محدوده بندی کنید
فصل ششم: مدیریت حافظه (MEM)
- MEM50-CPP به حافظه آزاد دسترسی پیدا نکنید
- MEM51-CPP منابع تخصیص یافته را درست آزاد کنید
- MEM52-CPP خطا های تخصیص حافظه را تشخیص دهید و به آنها رسیدگی کنید
- MEM53-CPP وقتی طول عمر اشیا به صورت دستی مدیریت می شود، به صراحت اشیا را بسازید و از بین ببرید
- MEM54-CPP توسط اشاره گر مرتب مناسب، جایابی جدید را برای ظرفیت ذخیره سازی کافی فراهم کنید
- MEM55-CPP به نیازمندی های مدیریت ذخیره سازی پویای جایگزینی اولویت دهید
- MEM56-CPP یک مقدار اشاره گر از پیش مالکیت یافته را در یک اشاره گر هوشمند غیر مرتبط ذخیره نکنید
فصل هفتم: ورودی و خروجی (FIO)
- FIO50-CPP به طور متناوب و بدون مداخله یک فراخوانی مکانیابی، از یک جریان فایل، ورودی و خروجی نگیرید
- FIO51-CPP وقتی دیگر به فایل ها نیاز ندارید، آنها را ببندید
فصل هشتم: اداره کردن استثنائات و خطاها (ERR)
- ERR50-CPP به یکباره برنامه را خاتمه ندهید
- ERR51-CPP تمامی استثنائات را اداره کنید
- ERR52-CPP از setjmp() یا longjmp() استفاده نکنید
- ERR53-CPP به کلاس های پایه و یا اعضای دادهای کلاس را در یک اداره کنندهی بلاک try سازنده یا مخرب ارجاع ندهید
- ERR54-CPP اداره کنندگان catch باید انواع پارامتری خود را از بیشترین اشتقاقی تا کمترین اشتقاقی، مرتب کنید
- ERR55-CPP به مشخصات استثنا اولویت دهید
- ERR56-CPP ایمنی استثنا را تضمین کنید
- ERR57-CPP هنگام اداره استثنائات، منابع را نشت ندهید
- ERR58-CPP پیش از آغاز اجرای main() تمامی استثنائات را اداره نمایید
- ERR59-CPP استثنایی را خارج از مرزهای اجرا ایجاد نکنید
- ERR60-CPP اشیای استثنا نباید از طریق کپی قابل ساخت، ایجاد شوند
- ERR61-CPP استثنا ها را به وسیله ارجاع مقدار سمت چپ بگیرید
- ERR62-CPP خطاها را هنگام تبدیل یک رشته به یک عدد تشتخیص دهید
فصل نهم: برنامه نویسی شی گرا (OOP)
- OOP50-CPP توابع مجازی را از طریق سازنده ها یا مخرب ها فراخوانی نکنید
- OOP51-CPP اشیای اشتقاقی را نبُرید
- OOP52-CPP یک شی چند ریختی را بدون مخرب مجازی حذف نکنید
- OOP53-CPP مقداردهنده های اولیه اعضای سازنده را به ترتیب استاندارد بنویسید
- OOP54-CPP به خوبی به تخصیص خود کپی رسیدگی کنید
- OOP55-CPP برای دسترسی به اعضایی که وجود ندارند، از عملگرهای اشاره گر به عضو استفاده نکنید
- OOP56-CPP به نیازمندی های نگهدارنده جایگزینی احترام بگذارید
- OOP57-CPP توابع عضو خاص و عملگرهای دچار سربارشده را به توابع کتابخانهی استاندارد C ترجیح دهید
- OOP58-CPP عملیات های کپی نباید شی منبع را جهش دهند
فصل دهم: همزمانی (CON)
- CON50-CPP یک میوتکس قفل شده را از بین نبرید
- CON51-CPP مطمئن شوید که قفل های برگزار شده فعال، در شرایط استثنایی آزاد می شوند
- CON52-CPP به هنگام دسترسی به فیلدهای بیتی چندین نخ، از رقابت های دادهای بپرهیزید
- CON53-CPP با قفل کردن به ترتیب از پیش تعیین شده، از بن بست اجتناب کنید
- CON54-CPP توابعی را که ممکن است به صورت جعلی در یک حلقه پدیدار شوند، بپوشانید
- CON55-CPP هنگام استفاده از متغیرهای شرطی، ایمنی و حیات نخ را حفظ کنید
- CON56-CPP یک میوتکس غیربازگشتی را که متعلق به فراخوانی نخ است، قفل نکنید
برای دانلود کتاب آموزش برنامه نویسی امن در سی پلاس پلاس از جعبه دانلود زیر استفاده کنید.