۱۰ خطای رایج برنامه نویسی !

برنامه نویسی cheyab.ir

عموما برنامه نویسان در هنگام نوشتن کد با مشکلات متدوال و مشابهی روبرو می‌شوند؛ که این مشکلات ممکن است مختص یک دسته زبان برنامه نویسی خاص مانند c و c++ باشند. همچنین ممکن است خطاهای برنامه نویسی مربوط به زبان‌های Java، JavaScriptو Python باشد.

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

برنامه نویسی cheyab.ir

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

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

مثال: زبان c

دوره های اموزشی برنامه نویسی
char array[6] = "hello";

strcat(array, ", Bye"); /* buffer overflow!!! */

۲- SQL Injection

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

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

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

// The following is a parameter value with SQL injection
String username = "joe'; delete from user where username like '%";
Connection con = ...; // create connection to database

// When this statement is executed, all users are deleted from the database.
con.createStatement().execute("update user set logged_in = 1 where username = '" + username + "'");

۳- OS Command Injection

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

۴- Integer Overflow

خطای  Integer Overflow زمانی رخ می‌دهد که شما تلاش می‌کنید یک مقدار بزرگ‌تر از حد را در یک متغیر صحیح ذخیره کنید. هنگامی که این اتفاق رخ می‌دهد، مقدار بزرگ‌تر ناقص و تکه تکه می‌شود و این عملیات منجر به ایجاد و تولد یک نتیجه‌ی غیرقابل‌ پیش‌بینی می‌شود. برای مثال، یک متغیر ۲ بایتی بدون علامت از نوع short می‌تواند حداکثر مقدار ۶۵۵۳۵ را در خود ذخیره کند. اکنون فرض کنید که دو مقدار از نوع short مانند ۶۵۵۳۰ و ۱۰ را با هم جمع کنیم و نتیجه را در یک متغیر دیگر از نوع short ذخیره کنیم؛ نتیجه ۶۵۵۴۵ خواهد بود و برای یک متغیر از نوع short نامناسب و بزرگتر از ظرفیت متغیر است.درنتیجه یک مقدار غیرقابل ‌پیش‌بینی در متغیری که نتیجه در آن قرار می‌گیرد، ایجاد می‌شود. وقتی که از این متغیر در عملیات و دستورات دیگری استفاده شود، یک سری نتایج غیرقابل پیش‌بینی در طی اجرای کد تولید می‌شود که این نتایج اشتباه، نتیجه‌ی کل پروژه را ممکن است تغییر دهد.

مثال: زبان c

short a = 65530, b = 10;

short c = a + b;

// on my computer, c has the unexpected value: 4

۵- اعتبارسنجی نادرست Index یا شاخص یک آرایه

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

برنامه نویسی cheyab.ir

 6- تخصیص منابع بدون هیچ‎گونه محدودیت

تخصیص حافظه یا memory allocation یک خطای رایج برنامه نویسی است و در زبان‌های C و C + + بسیار رایج است؛ چون تمام مدیریت حافظه در این زبان‌ها به صورت دستی است. تخصیص حافظه بدون دانستن اندازه‌ی اختصاص‌ داده ‌شده می‌تواند باعث بروز خطا و شکست در ایجاد متغیر و تخصیص حافظه به آن شود. هنگامی که نتیجه‌ی این تخصیص حافظه بررسی نشود و به طور مستقیم استفاده ‌شود، منتظر ایجاد یک فاجعه باشید!این نوع خطا در زبان‌های بدون مدیریت حافظه دستی مانند جاوا، جاوا اسکریپت و پایتون  نیز در زمان اختصاص آرایه امکان پذیر است. بنابراین تخصیص آرایه در زبان‌های مزبور نیازمند دقت مضاعفی از سوی برنامه نویس است.این خطا ممکن است به دلیل چک نکردن صحت و درستی پس از ایجاد منابع دیگر؛ مانند فایل‌ها یا اتصالات نیز ایجاد شود. وقتی کارتان با این ارتباطات تمام می‌شود، به درستی این منابع را ببندید. این معمول‌ترین راه است که محدودیتی برای منابع به ارمغان می‌آورد.

۷- اشاره‌گر فاسدشده

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

کامنت

۸- اشاره‌گر Null

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

۹- خطای مقداردهی اولیه یا Missing Initialization

متغیرهای محلی به آن‌ دسته از متغیرهایی می‌گویند که در یک تابع (یا بلوک) ایجاد می‌‌شوند و پس از اتمام تابع دیگر وجود ندارند. این متغیرها در حافظه‌ی استک  ایجاد و نگهداری می‌شوند. به عنوان یک برنامه نویس این وظیفه‌ی شماست که هر چه زودتر یک مقدار مناسب برای این متغیرها تعیین کنید و به آن‌ها اختصاص دهید. استفاده از آن‌ها قبل از چنین مقداردهی اولیه‌ای منجر به ایجاد خطای Initialization Missing می‌شود و قطعا باعث ایجاد اخلال و یا crash در برنامه می‌شود.

مثال: زبان c

int pos;
char buffer[] = "hello world";

// this line may print garbage and/or may crash the program since pos is not initialized.
printf("Value of character at pos %d is: %c\n", pos, buffer[pos]);

۱۰- رمزنگاری پرخطر

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

برنامه نویسی cheyab.ir

چندکلام با چ یاب:

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

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

اگر تجربه‌ای در این زمینه دارید که احساس می‌کنید جالب است و ممکن است به دیگران کمک کنید، در قسمت نظرات با ما در میان بگذارید. منتظر نظرات، انتقادات و پیشنهادات شما دوستان هستیم…

برای مطلع شدن از آخرین اخبار و آموزش‌های ما می‌توانید در کانال تلگرام چ یاب عضو شوید.

متولد خوزستان | فارغ‌التحصیل رشته مهندسی کامپیوتر 💻 | علاقه‌مند به عکاسی 📸، فوتبال ⚽ و برنامه‌نویسی