Secure coding
সিকিউর কোডিং হল এমনভাবে কম্পিউটার সফ্টওয়্যার বিকাশের অনুশীলন যা নিরাপত্তা দুর্বলতার দুর্ঘটনাজনিত প্রবর্তনের বিরুদ্ধে রক্ষা করে। ত্রুটি, বাগ এবং যুক্তির ত্রুটিগুলি ধারাবাহিকভাবে সাধারণভাবে ব্যবহৃত সফ্টওয়্যার দুর্বলতার প্রাথমিক কারণ। হাজার হাজার রিপোর্ট করা দুর্বলতা বিশ্লেষণের মাধ্যমে, নিরাপত্তা পেশাদাররা আবিষ্কার করেছেন যে বেশিরভাগ দুর্বলতা তুলনামূলকভাবে কম সংখ্যক সাধারণ সফ্টওয়্যার প্রোগ্রামিং ত্রুটি থেকে উদ্ভূত হয়। অনিরাপদ কোডিং অনুশীলনগুলি চিহ্নিত করে যা এই ত্রুটিগুলির দিকে পরিচালিত করে এবং বিকাশকারীদের নিরাপদ বিকল্প সম্পর্কে শিক্ষিত করে, সংস্থাগুলি স্থাপনার আগে সফ্টওয়্যারের দুর্বলতাগুলি উল্লেখযোগ্যভাবে হ্রাস করতে বা নির্মূল করতে সক্রিয় পদক্ষেপ নিতে পারে। কিছু পণ্ডিত পরামর্শ দিয়েছেন যে সাইবার নিরাপত্তা সম্পর্কিত হুমকিকে কার্যকরভাবে মোকাবেলা করার জন্য, যথাযথ নিরাপত্তা ব্যবস্থাগুলিতে কোড করা বা "বেক করা" উচিত। সফ্টওয়্যারে নিরাপত্তা পরিকল্পিত হওয়ার সাথে সাথে এটি নিশ্চিত করে যে অভ্যন্তরীণ আক্রমণের বিরুদ্ধে সুরক্ষা থাকবে এবং অ্যাপ্লিকেশন সুরক্ষার জন্য হুমকি হ্রাস করবে। বাফার-ওভারফ্লো প্রতিরোধ বাফার ওভারফ্লো, একটি সাধারণ সফ্টওয়্যার নিরাপত্তা দুর্বলতা, তখন ঘটে যখন একটি প্রক্রিয়া একটি নির্দিষ্ট দৈর্ঘ্যের বাফারের বাইরে ডেটা সংরক্ষণ করার চেষ্টা করে। উদাহরণস্বরূপ, যদি জিনিসগুলি সংরক্ষণ করার জন্য 8টি স্লট থাকে, তবে 9টি জিনিস সংরক্ষণ করার চেষ্টা করা হলে সমস্যা হবে। কম্পিউটার স্মৃতিতে উপচে পড়া ডেটা পরবর্তী স্থানে ডেটা ওভাররাইট করতে পারে যার ফলে একটি নিরাপত্তা দুর্বলতা (স্ট্যাক স্ম্যাশিং) বা প্রোগ্রাম সমাপ্তি (বিভাজন ত্রুটি) হতে পারে। একটি বাফার ওভারফ্লো প্রবণ সি প্রোগ্রামের একটি উদাহরণ হ 'ল ডার্নাল্ড ফাংশন (চার * লার্জ _ ইউজার _ ইনপুট) {চার ডি. এস. টি [এস. এম. এ. এল. এল]; এস. আর. সি. পি. আই (ডি. এস. টি, লার্জ _ ইউজার _ ইনপুট);} যদি ব্যবহারকারীর ইনপুট গন্তব্য বাফারের চেয়ে বড় হয় তবে একটি বাফার ওভারফ্লো ঘটবে। এই অনিরাপদ প্রোগ্রামটি ঠিক করার জন্য, একটি সম্ভাব্য বাফার overflow.int সিকিউর _ ফাংশন (চার * ইউজার _ ইনপুট) প্রতিরোধ করতে স্ট্র্যাঙ্কপি ব্যবহার করুন {চার ডিএসটি [বিইউএফ _ এসআইজেডই];// সর্বাধিক বিইউএফ _ এসআইজেডই বাইট স্ট্র্যাঙ্কপি (ডিএসটি, ইউজার _ ইনপুট, বিইউএফ _ এসআইজেডই);} আরেকটি নিরাপদ বিকল্প হল malloc.char * সিকিউর _ কপি (চার * এসআরসি) {সাইজ _ টি লেন = স্ট্রলেন (এসআরসি); চার * ডিএসটি = (চার *) ম্যালোক (লেন + 1); যদি (ডিএসটি! = নাল) ফরম্যাট-স্ট্রিং আক্রমণ প্রতিরোধ একটি ফরম্যাট স্ট্রিং আক্রমণ হল যখন কোনও বিদ্বেষপূর্ণ ব্যবহারকারী নির্দিষ্ট ইনপুট সরবরাহ করে যা শেষ পর্যন্ত প্রিন্টএফ ()-এর মতো ফরম্যাটিং সম্পাদনকারী ফাংশনে আর্গুমেন্ট হিসাবে প্রবেশ করানো হবে। আক্রমণটি প্রতিপক্ষকে স্ট্যাক থেকে পড়া বা লেখার সাথে জড়িত। সি প্রিন্টএফ ফাংশন স্টডাউটে আউটপুট লেখে। যদি প্রিন্টএফ ফাংশনের প্যারামিটারটি সঠিকভাবে বিন্যাস করা না হয়, তবে বেশ কয়েকটি নিরাপত্তা বাগ চালু করা যেতে পারে। নীচে একটি প্রোগ্রাম রয়েছে যা একটি বিন্যাস স্ট্রিং attack.int দুর্বল _ প্রিন্ট (চার * দূষিত _ ইনপুট) {প্রিন্টএফ (দূষিত _ ইনপুট);}-এর জন্য ঝুঁকিপূর্ণ যা প্রোগ্রামে পাস করা একটি দূষিত যুক্তি হতে পারে "% s% s% s% s% s% s% s% s% s", যা অনুপযুক্ত মেমরি রিড থেকে প্রোগ্রামটিকে ক্র্যাশ করতে পারে। পূর্ণসংখ্যা-ওভারফ্লো প্রতিরোধ পূর্ণসংখ্যা ওভারফ্লো ঘটে যখন একটি গাণিতিক ক্রিয়াকলাপের ফলে উপলব্ধ স্থানের মধ্যে প্রতিনিধিত্ব করার জন্য খুব বড় একটি পূর্ণসংখ্যা হয়। একটি প্রোগ্রাম যা সঠিকভাবে পূর্ণসংখ্যা ওভারফ্লো পরীক্ষা করে না তা সম্ভাব্য সফ্টওয়্যার বাগ এবং এক্সপ্লোইট প্রবর্তন করে। নীচে সি + +-এ একটি ফাংশন রয়েছে যা নিশ্চিত করার চেষ্টা করে যে x এবং y-এর যোগফল একটি সংজ্ঞায়িত মানের চেয়ে কম বা সমান MAX: bool sumIsValid _ floed (স্বাক্ষরিত int x, স্বাক্ষরিত int y) {স্বাক্ষরিত int sum = x + y; রিটার্ন যোগফল <= MAX;} কোডের সমস্যা হল এটি সংযোজন ক্রিয়াকলাপে পূর্ণসংখ্যা ওভারফ্লো পরীক্ষা করে না। যদি x এবং y-এর যোগফল একটি স্বাক্ষরহীন int-এর সর্বাধিক সম্ভাব্য মানের চেয়ে বেশি হয়, তবে সংযোজন ক্রিয়াটি উপচে পড়বে এবং সম্ভবত MAX-এর চেয়ে কম বা সমান মান হবে, যদিও x এবং y-এর যোগফল MAX-এর চেয়ে বেশি। নীচে একটি ফাংশন রয়েছে যা যোগফলটি x এবং y উভয়ের চেয়ে বড় বা সমান কিনা তা নিশ্চিত করে ওভারফ্লো পরীক্ষা করে। যদি যোগফলটি উপচে পড়ে, তবে যোগফলটি x-এর চেয়ে কম বা y-এর চেয়ে কম হবে। উদাহরণস্বরূপ, একটি স্ক্রিপ্ট বিবেচনা করুন যা একটি ফাইলের নাম নিয়ে একটি নিবন্ধ নিয়ে আসে, যা তারপর স্ক্রিপ্ট দ্বারা পড়া হয় এবং পার্স করা হয়। এই ধরনের স্ক্রিপ্ট কুকুরের খাবার সম্পর্কে একটি নিবন্ধ পুনরুদ্ধারের জন্য নিম্নলিখিত অনুমানমূলক ইউআরএল ব্যবহার করতে পারেঃ https://www.example.net/cgi-bin/article.sh?name=dogfood.html যদি স্ক্রিপ্টে কোনও ইনপুট চেকিং না থাকে, তবে ফাইলের নামটি সর্বদা বৈধ বলে বিশ্বাস করার পরিবর্তে, কোনও দূষিত ব্যবহারকারী ওয়েব সার্ভার থেকে কনফিগারেশন ফাইলগুলি পুনরুদ্ধারের জন্য একটি ইউআরএল তৈরি করতে পারেঃ https://www.example.net/cgi-bin/article.sh?name=./././././etc/passwd স্ক্রিপ্টের উপর নির্ভর করে, এটি/ইত্যাদি/পাসডাব্লুডি ফাইলটি প্রকাশ করতে পারে, যা ইউনিক্স-সদৃশ সিস্টেমে (অন্যদের মধ্যে) ব্যবহারকারীর আইডি, তাদের লগইন নাম, হোম ডিরেক্টরি পাথ এবং শেল রয়েছে। (অনুরূপ আক্রমণের জন্য এসকিউএল ইনজেকশন দেখুন।) আরও দেখুন অ্যাপ্লিকেশন সিকিউরিটি ডিফেন্সিভ প্রোগ্রামিং সিকিউরিটি বাগ ডিফল্ট নোটস রেফারেন্স কম্পিউটার সিকিউরিটি