কম্পিউটার সুরক্ষার লোকদের জন্য আপনার ভাষাটিকে বিশ্লেষণযোগ্য / শ্রুতিমধুর করে তুলুন।
সুরক্ষা লোকেরা জাহাজের আগে কোনও প্রোগ্রামে দুর্বলতাগুলি সন্ধান করতে সক্ষম হয়। আদর্শভাবে, আমাদের প্রথম দিকে বলা হয়েছিল এবং কোডবেসটি বিকাশের সাথে সাথে মন্তব্য করতে পারে, তবে প্রায়শই হয় না।
যখন ভাষা বা কোর লাইব্রেরিগুলির একটি নতুন সংস্করণ প্রকাশিত হয়, তখন যে জিনিসগুলি আগে নিরাপদ ছিল সেগুলি আর না থাকতে পারে:
- গ্রন্থাগারগুলি আরও শক্তিশালী হয়ে উঠতে পারে: যেমন ইউআরএল লাইব্রেরি এখন সমর্থন করে
javascript:
- স্ট্রিং বা বাইটগুলিকে কোডে রূপান্তর করার জন্য নতুন উপায় থাকতে পারে: যেমন
eval
বা deserialization লাইব্রেরি
- ভাষার প্রতিবিম্ব কৌশলগুলি আরও শক্তিশালী হয়ে উঠতে পারে: যেমন স্থানীয় ভেরিয়েবলগুলি প্রকাশ করা
এর মধ্যে যে কোনও পরিবর্তন কোনও প্রোগ্রামের আপত্তিজনক কর্তৃত্বের পরিমাণ বাড়িয়ে তুলতে পারে, তবে যেহেতু প্রোগ্রামটি কতটা কর্তৃত্বের পরিমাণ ব্যবহার করে (অ-দূষিত ক্লায়েন্টদের সাথে কথা বলার সময়) পরিবর্তিত হয়নি, তাই সুরক্ষা লোককে কঠোর চাপ দিয়ে চাপ দেওয়া হয় নিবিড় ছাড়াই পুনরায় নিরীক্ষা।
সুতরাং, ভাষাটি ডিজাইন এবং সংস্করণ করার সময় দয়া করে আমাদের সম্পর্কে চিন্তা করুন। নীচে কয়েকটি টিপস দেওয়া হল:
কয়েকটি আদিম সংজ্ঞা দিন যা একটি প্রোগ্রামকে পচে যেতে পারে।
এইচটিএমএল 5 বিশেষভাবে খারাপ। তারা স্পষ্টতই সুরক্ষার জন্য অনেক চিন্তাভাবনা তৈরি করেছে এবং কিছু অতি স্মার্ট লোক রয়েছে, তবে <video>
পুরানো বিষয়গুলির মতো নতুন প্রোগ্রামের উপাদানগুলি নির্দিষ্ট করে বা নতুন <video>
এবং পুরাতন <img>
উভয় ক্ষেত্রেই নির্দিষ্ট করা যেতে পারে এমন একটি সাধারণ বিমূর্ততা তৈরি করার পরিবর্তে <video>
এখনও রয়েছে নিজস্ব সুরক্ষা পরিণতি সহ আরেকটি এক-অফ প্রোগ্রাম উপাদান।
আপনার ভাষা স্থিতিশীল বিশ্লেষণে (এমনকি স্থিতিযুক্ত টাইপ না করে) উপযুক্ত করে তুলুন।
সুরক্ষা লোকেরা প্রায়শই নিদর্শনগুলি খুঁজে পেতে এবং কোনও প্রোগ্রামের অংশগুলি চেষ্টা করার চেষ্টা করে এবং তাদের রায় দেওয়ার জন্য স্থির বিশ্লেষণ ব্যবহার করে যাতে তারা সত্যই কৌতুকপূর্ণ বিটগুলিতে ফোকাস করতে পারে।
এটি স্পষ্ট হওয়া উচিত যা সনাক্তকারীরা স্থানীয় ভেরিয়েবল এবং কোনটি নয়।
উদাহরণস্বরূপ, জাভাস্ক্রিপ্টের পুরানো সংস্করণগুলির মতো একই ভুল করবেন না যা x
নীচে স্থানীয় ভেরিয়েবল রেফারেন্স কিনা তা বলা অসম্ভব করে দিয়েছিল (ফটকের পুরানো সংস্করণের আক্ষরিক পাঠ্য অনুসারে):
if (Math.random() > 0.5) {
Object.prototype.x = 0;
}
function f() {
var x = 1;
(function () {
alert(x); // Might alert 0, might alert 1.
})();
}
ক্ষয়যোগ্য সুরক্ষার জন্য অনুমতি দিন
সুরক্ষিত বৈশিষ্ট্যগুলি সংরক্ষণ করে এমন সুরক্ষিত কার্নেলের চারপাশে প্রচুর সুরক্ষিত সিস্টেম ডিজাইন করা হয়েছে, যাতে সুরক্ষা লোকেরা তাদের সংক্ষেপে কিছুটা সংখ্যক কোড বিশ্লেষণ করতে এবং বেশিরভাগ প্রোগ্রামারকে oy বিরক্তিকর, পেডেন্টিক, বিমূর্ত} সুরক্ষা লোকের সাথে মোকাবেলা থেকে মুক্ত করতে পারে ।
আপনার ভাষায় এ জাতীয় কার্নেল লেখা সম্ভব হবে। যদি আপনার ভাষার কোনও সুরক্ষা বৈশিষ্ট্য, কেবলমাত্র ইউআরএলগুলির একটি নির্দিষ্ট উপসেট আনা হবে তবে কার্নেল লেখকরা তাদের কোডের মাধ্যমে সমস্ত ইউআরএল আনতে চ্যানেল করতে কিছু করতে পারেন? অথবা স্থির বিল্ড চেকগুলি (আমদানির দিকে নজর দেওয়া) একই ফাংশনটি পরিবেশন করতে পারে।
নিউজএইকের মতো কিছু ভাষা কোনও অবজেক্ট সক্ষমতার মডেল ব্যবহার করে। এটি বিস্ময়কর এবং সংক্রামকযোগ্য সুরক্ষা পাওয়ার দুর্দান্ত উপায়।
তবে আপনি যদি এটি না করতে পারেন তবে মডিউল গ্রাফকে স্ট্যাটিক্যালি বিশ্লেষণযোগ্য আর্টিক্ট তৈরি করা আপনাকে বেশ খানিকটা উপকার পেতে পারে। যদি আমি প্রমাণ করতে পারি যে কোনও মডিউল I / O মডিউল (টিসিবির মডিউলে কোড কল করে) ফাইলটি পৌঁছতে পারে না, তবে আমি সেই মডিউলটি থেকে পুরো ক্লাসের সমস্যাগুলি বাতিল করতে পারি।
এম্বেড থাকা স্ক্রিপ্টিং ভাষার কর্তৃত্ব সীমাবদ্ধ করুন
প্রচুর দরকারী সিস্টেমগুলি একটি স্ট্যাটিক কোর হিসাবে সংগঠিত হয় যা গতিশীল (এমনকি কার্যকরী) ভাষায় প্রচুর কোড বন্ধ করে দেয়।
এবং স্ক্রিপ্টিং ভাষা এম্বেড করা কোনও সিস্টেমকে আরও প্রসারিত করতে পারে।
তবে কোনও স্ক্রিপ্টিং ভাষার ভিএম-এর পূর্ণ কর্তৃত্ব থাকা উচিত নয়।
আপনি যদি এম্বেড থাকা স্ক্রিপ্টিং ভাষাগুলিকে মঞ্জুর করতে চান, তবে চালকরা কী করতে পারে তা সীমাবদ্ধ করার পক্ষে সহজ করুন। একটি অবজেক্ট-ক্ষমতার মডেল (উপরে নিউজসাইক মন্তব্য দেখুন) এখানে খুব উপযুক্ত; সুতরাং কোনও স্ক্রিপ্টিং ভাষায় কোড মূল্যায়নের সময়, কলার কার্যকর করতে কোড এবং সেই কোডের জন্য সমস্ত গ্লোবাল ভেরিয়েবল পাস করা উচিত ।
আচরণ eval
একটি ভাষা হিসাবে একটি স্ক্রিপ্টিং ভাষা হিসাবে নিজেকে এম্বেডিং
যদি আপনার ভাষা যদি তার নিজস্ব সংকলককে স্ট্রিংকে কোডে পরিণত করতে অনুরোধ করতে পারে তবে আপনার যেকোন এম্বেডড স্ক্রিপ্টিং ভাষার মতো স্যান্ডবক্সও করার অনুমতি দিন।
একটি সাধারণ সমাবর্তন মডেল ব্যবহার করুন
সুরক্ষা সম্পত্তি রক্ষণাবেক্ষণ করা হয় কিনা তা নির্ধারণের চেষ্টা করার সময় আমরা সুরক্ষার লোকেরা জাতিদের অবস্থার বিষয়ে চিন্তা করতে পছন্দ করি না।
প্রায় অসম্ভব-সুরক্ষিত ডিফল্ট বিকল্প হিসাবে থ্রেডগুলিতে স্থির হওয়ার আগে দয়া করে থ্রেডিংয়ের বিকল্পগুলি বিবেচনা করুন।
একটি সহজ হল ইভেন্ট লুপ সমষ্টি যেমন E, Verilog এবং জাভাস্ক্রিপ্টে পাওয়া যায়।
বিভ্রান্তির উদ্ধৃতি উত্সাহিত করবেন না
কিছু ভাষা আঠালো ভাষা এবং এগুলি বিভিন্ন ভাষায় স্ট্রিংয়ের সাথে ডিল করে।
উদাহরণস্বরূপ, জাভাস্ক্রিপ্ট প্রায়শই এইচটিএমএল, সিএসএস, এক্সএমএল, জেএসএন, এবং এমনকি জাভাস্ক্রিপ্টের স্ট্রিংগুলি রচনা করে। প্রোগ্রামারদের পক্ষে অন্য ভাষাগুলিতে স্ট্রিং তৈরি করার সময় প্লেইন টেক্সট স্ট্রিংগুলি যথাযথভাবে এনকোড করা মনে রাখা খুব কঠিন, তাই জেএস প্রোগ্রামগুলিতে, আশ্চর্যজনকভাবে, সমস্ত ধরণের বিভ্রান্তির সমস্যা রয়েছে: এক্সএসএস সবচেয়ে খারাপ।
আপনি যদি স্ট্রিং রচনা বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করতে চান তবে প্রোগ্রামারের সুরক্ষা বোঝা হ্রাস করার চেষ্টা করুন। ডিএসএল, স্বাস্থ্যকর ম্যাক্রোস এবং এম্বেড থাকা টেম্প্লেটিং ভাষাগুলি লাইব্রেরি বা ভাষা বিকাশকারীদের দিকে যথাযথভাবে পালনের জন্য এবং শেষ বিকাশকারীকে দূরে সরিয়ে নিয়ে যাওয়ার এক দুর্দান্ত উপায় হতে পারে।