شہری اینڈمپ؛ اسٹرکچرل انجینئری؛
بہتر چیزوں کو حاصل کرنے کے لئے ہمیں اِس میں سے کچھ کو محفوظ رکھنا چاہئے ۔
Table of Contents
بفر ینجرہم نے سی پروگرامنگ میں سب سے زیادہ مستقل اور خطرناک حفاظتی سرگرمیوں میں سے ایک رہائے گا. کئی دہائیوں سے اچھی کارکردگی کے باوجود، وہ ڈیٹا فسادات، نظام خراب ہونے اور دور تک کوڈ کی کارکردگی جیسے سنگین مسائل کا سبب بنتے رہے. محفوظ C کوڈ ان کو روکنے کے لیے ایک گہری سمجھ درکار ہے کہ کس طرح Buffer onstruction اور ایک struction کے لیے ایک وسیع تر مضمون تحریر، بنیادی کوڈ، بنیادی تکنیکوں، جدید حفاظتی تکنیکوں اور جدید اقدامات کو ڈھالنے کے لیے
بہتر سمجھتے ہوئے کہ اُنہیں کیا کرنا چاہئے
جب کوئی پروگرام بفر کو یاد رکھنے والے شخص کی نسبت ایک شخص کو زیادہ ڈیٹا لکھ لیتا ہے تو اُسے محفوظ رکھنے کیلئے اسٹاک یا اضافی یادداشت میں رہنے کیلئے ہی کافی حد تک رہائش دی جاتی ہے ۔
اسکے نتائج کا انحصار اس بات پر ہے کہ اسٹاک پر دوبارہ سے حاصل ہونے والے نتائج پر ہوتا ہے.
سٹیک-باسپ سے زیادہ کیلوے
ڈیٹا واپس آ جاتا ہے اور ڈیٹا واپس آ جاتا ہے
زیادہ سے زیادہ پانی
[ فٹنوٹ ] [ فٹنوٹ ] ، [ فٹنوٹ ] پر رہنے والے ڈھیروں پر رہنے والے ممالک میں رہنے والے لوگ ، نقصاندہ metadata کو تباہ کر سکتے ہیں یا پھر بغیر کسی نقصان کے تباہکُن حملوں کے تباہکُن ہو سکتے ہیں ۔
عام طور پر ہنگامی صورتحال اور ان کے محفوظ متبادلات
سی معیاری لائبریری کئی ایسے کام کرتی ہے جو حدود کو جائز نہیں بناتے ۔
اسٹرنگ کاپی اور کنیکٹیکٹیشن
- — غیر محفوظ: نقلیں جب تک کوئی باطل، لمبائی نہیں ہوتی.
[Safe متبادل:] [T] [T] کاپیوں پر نقل نہیں کرتا، بلکہ یہ اب تک کے نہیں ہوتی تو اب تک کے نام سے کہیں زیادہ دستیاب نہیں ہوتا۔ - بہتر یہ کہ اب تک: — بی ایس ڈی اور بہت سے لینکس سسٹم پر دستیاب ہے؛ ہمیشہ باطلت اور عارضی طور پر متحرک ہونے کے لیے ماخذ کی لمبائی واپس لے جاتے ہیں۔
- — بے پناہ حد۔
[FLT] میں زیادہ تر حروف پر موجود اور ہمیشہ باطل استعمال ہوتا ہے۔
اُن کی پرورش
- — غیر محفوظ : فارمیٹ بغیر چیک کرنے کے کسی بھی قسم کے بفر کو لکھنے کے لیے تشکیل شدہ پیداوار
[FLT] کی حدود] [fob] [fougl/fgnstanc/fr/fg.]]] [FLTTT] — اخذ شدہ دوبارہ شروع ہونے والی حدود - [1] [1] [حوالہ درکار] — اسی طرح کے خطرے سے دوچار؛ استعمال کریں.
- [1] — بے حد خطرناک؛ C11 معیار سے ہٹا. استعمال کریں.
- [حوالہ درکار][1] — کوئی حدیث چیک. یا استعمال کریں جس میں میدانی عرض البلد (Phite) کے ساتھ ساتھ ساتھ زرعی حجم (fLT) بھی شامل ہے۔
سبق کاپی اور نقل و حمل
- — اگر نن کو منزلِ بفر سے زیادہ حجم حاصل نہ ہو تو محفوظ.
[fffr onsper:] [spt] [slT:]] [strict] [strict]]] [strict:f:]] [fLTT:1]] [s tanct]] [s tanc tablestablestable tablestablestable]] اور ہمیشہ کے لیے قابلِ وقوع کو یقینی بنایا گیا ہے۔ - کچھ پلیٹ فارمز اینیکس ک سے (C11 میں)، لیکن منظوری محدود ہے۔
دودھ پلانے اور حجم کا انتظام
محفوظ کاموں کے ساتھ ساتھ آپکو لمبے لمبے قد ، مناسب بفرے اور ممکنہ عارضی طور پر کام کرنے کی ضرورت ہے ۔
انتہائی حساس
بیرونی اندراج (یعنی بیرونی ان پٹ، نیٹ ورک ڈیٹا، فائل مواد) نقل کرنے سے قبل، اس کی زیادہ سے زیادہ قابل قبول لمبائی اور رد عمل یا troncate data جو اس سے تجاوز کرتی ہے، مثلاً:
#define MAX_INPUT 255
char buffer[MAX_INPUT + 1]; // +1 for null
if (strlen(user_input) > MAX_INPUT) {
// Handle error: reject or truncate
fputs("Input too long", stderr);
return -1;
}
strncpy(buffer, user_input, sizeof(buffer) - 1);
buffer[sizeof(buffer) - 1] = '\0';
معروف حدیث کے ساتھ ساتھ فِکسڈ بِفِّر کا استعمال کریں۔
جب بھی ممکن ہو، بفروں کو کوڈ میں ایک مستقل سائز سے متعین کریں اور اسے تمام کوڈ میں درج کریں.
ایک دوسرے کی مدد کریں
[FLT:PT:Adj] اور دوبارہ سے حاصل ہونے والی واپسی قدر معلوم کر سکتے ہیں اور فیصلہ کریں کہ اگر عارضی ڈیٹا کو قابل قبول کیا جائے یا غلطی کی جائے تو میں باقاعدہ طور پر غیر متوقع حالت میں بفرنس کو چھوڑ سکتا ہوں۔
کومپلر سیکورٹی فلس اور بھاگوتی تحفظات ہیں۔
جدید زمانے کے کاریگر ایسے جھنڈ پیش کرتے ہیں جو بغیر کوڈ کی تبدیلی کے بھی شامل کئے جاتے ہیں ۔
- / — Incres stannies (random values). اگر واپس پتوں میں تبدیلی سے پہلے کسی شخص نے واپس آنے سے پہلے کینری کو لکھ کر دیا ہو تو پروگرام مکمل ہونے سے پہلے ہی استعمال ہونے والے استعمال سے پہلے ہی استعمال شدہ نتائج پر دوبارہ لکھ دیتا ہے۔
- — [1] [flT] اور کے ساتھ ساتھ ایسے نسخے بھی دریافت کرتے ہیں جن پر تحقیق کی جاتی ہے کہ اگر منزل بہت چھوٹی ہو تو یہ بہت چھوٹی ہے. یا بلند تر ہے.
- — فارمیٹ کے بارے میں آگاہی جو بفرگڑھ یا معلوماتی مراکز کا باعث بن سکتی ہے۔
- — Address Saniter (Asan) آلات کوڈ کو جانچنے کے لیے استعمال کیا جاتا ہے تاکہ وقت گزرنے کے بعد بفری، استعمال اور دیگر یادداشتوں کی غلطیاں معلوم کی جا سکیں۔
- [1] — احتیاط سے چیک چیک کرنے سے گریز کریں ( استعمال کریں)۔
نظام تحفظات
سٹیک کینری محض ایک تہ ہیں. جدید اوس میں ایکسچینج ٹیکنالوجی شامل ہیں:
- ] Data Execution accons (DEP) / NXt — مارکز اسٹاک اور ڈھیر بطور غیر منافع بخش، شیلوڈ کی کارروائی کو روکنے کے لیے.
- space Layout Randomization (ASLR) — Randomizes یادداشت کے پتوں (stack, spaper divisions) کو نشانہ بنانے میں مشکل پیدا کرنے کے لیے کافی مشکل کام کرتا ہے۔
- ریختہ ریڈار- صرف (RLRO) — زیادہ سے زیادہ تحریروں سے تحفظات (Global Obet Table)۔
ان حفاظتی (عام طور پر ڈیٹنگ) کے لیے بار کو بلند کرنا مگر محفوظ کوڈ کی جگہ نہیں کرتا۔
کوڈ Audits اور Static Analysis
انسانی جائزہجات کو ایک دوسرے سے مختلف طریقوں سے حاصل کرنے کے لئے استعمال کِیا جاتا ہے ۔
- [Manial code تجزیے — غیر فعال کام، گم شدہ سائز چیک اور انفنٹری کے استعمال کے لیے تلاش کریں جو بفر حدوں سے آگے لکھتے ہیں۔
- Static census[1] — [stor]، ، اور پتہ لگایا جا سکتا ہے ممکنہ طور پر قابل استعمال، خطرناک اعمال اور غیر ذمہ دار غلطیوں کا پتہ چلتا ہے۔
- [Fuzzing — LebFuzer, AFL یا دیگر hazers کا استعمال کریں تاکہ وہ غیر متوقع اعداد و شمار سے خودبخود خودبخود خودبخود دستبردار ہو جائیں ۔
محفوظ کوڈ کی عملی مثالیں
حفاظتی چیک کے ساتھ کاپی چلانا
#include <stdio.h>
#include <string.h>
int safe_string_copy(char *dest, size_t dest_size, const char *src) {
if (!dest || !src || dest_size == 0) {
return -1; // Invalid parameters
}
size_t src_len = strlen(src);
if (src_len >= dest_size) {
// Source too large; truncation or error
// Option: copy what fits and null-terminate
strncpy(dest, src, dest_size - 1);
dest[dest_size - 1] = '\0';
return 1; // Truncation occurred
}
strncpy(dest, src, dest_size);
// strncpy fills remaining with null, so dest_size fits; no need to null-terminate if src shorter
return 0; // Success, no truncation
}
بفر حجم کیلئے محفوظ انڈر ہینڈلنگ
اگر آپ کو لگے کہ آپ کو پتہ چل جائے کہ آپ کو پتہ چل رہا ہے تو آپ کو کیا کرنا چاہئے ؟
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
void *safe_malloc_array(size_t nmemb, size_t size) {
if (nmemb == 0 || size == 0) {
return NULL; // Or handle zero-size allocation
}
if (nmemb > SIZE_MAX / size) {
// Integer overflow would occur
errno = ENOMEM;
return NULL;
}
return malloc(nmemb * size);
}
اسپنج کو استعمال کرتے ہوئے اسٹوپے کو
char log_message[256];
int ret = snprintf(log_message, sizeof(log_message),
"User %s logged in from %s", username, ip_address);
if (ret < 0) {
// Output error
} else if ((size_t)ret >= sizeof(log_message)) {
// Truncation occurred; handle if needed
}
بہترین مشقیں
- [intialize Buffers — ہمیشہ صفر-inities Buffers کو غیر ذمے دارانہ ذیابیطس سے بچنے کے لیے.
- [Ancres گہرے گہرائی سے دوبارہ مل کر — — سٹیک کی دریافت گہری رد عمل سے ہو سکتی ہے ؛ اسے استعمال کریں یا محدود گہرائی استعمال کریں ۔
- [Chalifier — کی مدد کرتا ہے کہ وہ کوائلر کو اپنے شکار میں لے سکتا ہے اور یہ کہ وہ براہ راست طور پر ان مسائل کو پکڑنے سے بچ سکے ۔
- -conssness —
- [1] ایمرجنسی غلطی ہاتھیوں کا ہاتھ بٹانے[1:1] — [1] واپسی اقدار کو ، ، ، ۔
مزید سیکھنے کیلئے وسائل
- [SEI CCCC Coding Standard — کوم ورکر سی کوڈ کے لیے کوم کوڈ کے اصول ۔
- CWE-120: Buffer نقل کیا بغیر چیکنگ آف ان پٹ — MITR کی کلاسز آف بوفئر کی کمزوریوں کی شناخت۔
- [FLAP Buffer Properfo/ — اوپن ویب ایپلیکیشن سیکورٹی پروجیکٹ سے عملی ہدایت۔
- GNU C Library Manual: Straing and Aray Utilities — محفوظ متحرک عمل کے لیے دستاویزات ۔
- — ایک تیز رفتار یادداشت غلطی کا تجزیہ کرنے والا.
کُنَّا
سی میں بفر نگاری کو روکنے کی بنیادی ذمہ داری نہیں ہے بلکہ یہ کسی بھی ترقی یافتہ شخص کی ذمہ داری ہے جو زبان کے ساتھ کام کرتا ہے ۔جس کو سمجھنے سے کہ محفوظ طریقے سے کام کرنا ، حفاظتی تدابیر اور پیمانے پر حفاظتی تدابیر پیدا کرنا ، ان کی حفاظت اور جانچ پڑتال کرنا ، حقیقت میں کوئی شخص ان کفیلی تکنیکوں کا خطرہ کم نہیں کر سکتا ، انتہائی حفاظتی نظام کے ساتھ ساتھ ساتھ ساتھ ساتھ ساتھ ساتھ ساتھ انتہائی مضبوط حفاظتی نظاموں کو بھی درست کرنا اور بہتر طور پر سمجھنے کے لئے آپ کے لئے حفاظتی نظام کو بہتر بنانا مشکل ثابت کرنا ہوگا