برنامه نویسی پُر خطر؛ خطاهای پر تکرار!

اگر در ابتدای راه برنامه نویسی هستید این خطاها را به خوبی مورد بررسی قرار دهید تا کد شما در امان بماند! اما اگر در نیمه‌ی راه این حرفه‌ی هوشمندانه هستید، احتمالا تا کنون با اکثر خطاهای برنامه نویسی مواجه شده‌اید بهتر است بدانید که اکثر کدنویسان چنین مشکلی را تا کنون تجربه کرده‌اند، پس تنها نیستید! بهتر است از همین حالا با دقت بیشتری کد خود را بنویسید و با صرف وقت اندکی از یک فاجعه‌ی بزرگ در برنامه‌ی خود جلوگیری کنید!

در ادامه 4 مورد از خطاهای رایجی که هنگام کد نویسی ممکن است تجربه کنید را معرفی کرده‌ام؛ اگر مایل هستید با خطاهای بیشتری آشنا شوید مطالعه‌ی پست خطاهای متداول هنگام برنامه نویسی را به شما توصیه می‌کنم.





Buffer Overflow یا سرریز بافر

سرریز بافر یک خطای رایج برنامه نویسی است و زمانی رخ می‌دهد که داده‌ها در یک بافر نوشته شوند و تمام فضای بافر را اشغال کنند و هنوز هم داده‌هایی باقی بمانند که در بافر ذخیره نشده‌اند؛ یا به عبارت ساده‌تر حجم داده‌ها از مقدار فضای خالی بافر تجاوز کند. این اتفاق ممکن است ناشی از محاسبات غلط، پیرامون موقعیت نوشتن داده‌ها باشد. یا حتی نوشتن مداوم و پیوسته در بافر بدون چک کردن طول آن. این خطا به هر دلیلی ممکن است رخ دهد. این خطا یکی از معمولی‌ترین و متداول‌ترین خطاهای برنامه نویسی است. برخی از مخرب‌های سیستم مانند کرم اینترنت موریس در سال ۱۹۸۸، کرم Nimda در سال ۲۰۰۱ و خطای Sendmail در سال ۲۰۰۳ با تکیه بر این خطای رایج برنامه‌ نویسی تولید شده‌اند.


مثال: زبان c


char array[6] = &quothello&quot
strcat(array, &quot, Bye&quot); /* buffer overflow!!! */




خطای SQL Injection

SQL Injection یک تکنیک مخصوص برای تزریق دستورهای SQL به ورودی کاربر است؛ به طوری که این دستورها به طور مستقیم توسط پایگاه‌داده اجرا شوند. این کار به هکرها و متجاوزان اجازه می‌دهد تا اقدامات مخربی مانند حذف جدول‌ها، drop کردن یا به عبارتی همان حذف کردن پایگاه‌داده، سرقت داده‌ها و بسیاری موارد دیگر را به راحتی انجام دهد.

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


مثال: زبان جاوا


// The following is a parameter value with SQL injection
String username = &quotjoe'; delete from user where username like '%&quot
Connection con = ...; // create connection to database
// When this statement is executed, all users are deleted from the database.
con.createStatement().execute(&quotupdate user set logged_in = 1 where username = '&quot + username + &quot'&quot);



اشتباه OS Command Injection

OS Command Injection  یا به عبارتی همان تزریق فرمان سیستم‌عامل زمانی بروز پیدا می‌کند، که ورودی مشخص‌شده توسط کاربر برای اجرا مستقیما به سیستم‌عامل تحویل داده ‌شود، بدون انجام هیچ‌گونه بازرسی قبلی! چنین عملیاتی ممکن است توسط یک برنامه، برای استفاده از دستورات موجود در سیستم‌عامل استفاده شود. هنگامی که برنامه کاربر را بدون اعتبارسنجی تایید می‌کند، عملا مسیر را برای یک هکر آسان می‌کند تا با استفاده از ساختاری هوشمند فرمان‌ها و دستورات مخرب خود را به راحتی بر روی سیستم اجرا نماید. برای مثال، این دستورات می توانند جهت حذف فایل‌ها، سرقت داده‌ها، تغییر سطح دسترسی به پرونده‌ها و بسیاری موارد دیگر استفاده شوند.





اشاره‌گر Null

یک اشاره‌گر ممکن است قبل از اینکه مقداردهی اولیه شود و یا بعد از اینکه حافظه آزاد می‌شود مقدار Null داشته باشد. مراجعه و اشاره به این نوع اشاره‌گرها باعث ایجاد خطای اشاره‌گر Null می‌شود. در C، C + + و همچنین جاوا این خطا بسیار رایج است و قطعا در زبان‌های دیگر نیز امکان رخ دادن این خطا وجود دارد. شما به اندازه‌ی کافی هنگام نوشتن کد خود دقیق باشید تا از این نوع خطا در امان بمانید.




اگر نظر و یا تجربه ای دارید، خوشحال میشم برای من و دیگران بنویسید.