কল্পনাপ্রসূত দুর্বলতা এবং তাদের কোথায় পাবেন (পর্ব 1) - জ্যাঙ্গো ফর্ম ত্রুটিগুলি সহ ক্রস-সাইট স্ক্রিপ্টিং

এক্সএসএস স্ক্রিপ্টিং দুর্বলতা

ক্রস-সাইট স্ক্রিপ্টিং (এক্সএসএস) এখনও ওয়েবে সবচেয়ে সাধারণ দুর্বলতা কেন? এক্সএসএস শনাক্ত করার তত্ত্বটি বেশ সহজ। এটি সনাক্ত করার জন্য অনেকগুলি স্থিতিশীল বিশ্লেষণ সরঞ্জাম রয়েছে এবং এখনও অনেকগুলি অনাবৃত দুর্বলতা রয়েছে। তাহলে কি হবে?

ঠিক আছে, এর অন্যতম কারণ হ'ল traditionalতিহ্যবাহী প্রোগ্রাম বিশ্লেষণ পদ্ধতিগুলি প্রায়শই একটি নির্দিষ্ট কোডের অংশের উদ্দেশ্য সনাক্ত করতে ব্যর্থ হয়। উদাহরণস্বরূপ, কোনও সরঞ্জামে প্রোগ্রামে কী কী সামগ্রীতে ব্যবহারকারীর ইনপুট থাকতে পারে তা নির্ধারণ করতে অসুবিধা হতে পারে।

আমার আগের পোস্টে, আমি বর্ণনা করেছি যে কীভাবে আমরা এমন একটি সিস্টেম তৈরি করে এই সমস্যাটির সমাধান করেছি যা হাজার হাজার ওপেন সোর্স প্রকল্পগুলির সুরক্ষা বিশদকরণগুলি শেখায় এবং তাদেরকে সত্যিকারের সুরক্ষা গর্তগুলি সন্ধান করতে ব্যবহার করে। আমি এটি কী শিখেছি তার কয়েকটি দুর্দান্ত উদাহরণ ভাগ করে নেওয়ার প্রতিশ্রুতি দিয়েছিলাম।

আমি জ্যাঙ্গোর সাথে প্রকল্পগুলির সম্ভাব্য সমস্যার একটি আকর্ষণীয় এবং বরং অপ্রত্যাশিত উত্স দিয়ে শুরু করার সিদ্ধান্ত নিয়েছি। এই পোস্টটি জ্যাঙ্গো ফর্মগুলিতে বৈধতা সংক্রান্ত ত্রুটিগুলি ব্যবহার করে এক্সএসএস দুর্বলতাগুলি সনাক্ত এবং তাদের কীভাবে ব্যবহার করা যায় সে সম্পর্কে একটি গাইড। এখানে একটি বাস্তব উদাহরণ: https://github.com/mozilla/pontoon/pull/1175।

আসুন এখনই শুরু করা যাক এবং একটু কুইজ দিয়ে শুরু করি। নীচের স্নিপেটের মতো আপনি কতবার কোড লিখেছেন / দেখেছেন?

এই সম্পর্কে কি?

অথবা এটা?

সবগুলিই আপনি সাধারণভাবে ব্যবহারকারীকে কীভাবে বলবেন যে প্রদত্ত ইনপুটটি অবৈধ, তাই না? ইনপুটটি HTTP অনুরোধের পরামিতিগুলি থেকে নেওয়া হয়েছে এবং খুব সুন্দরভাবে একটি MyForm অবজেক্টে বিভক্ত হয়ে গেছে। যদি ক্ষেত্রগুলির কোনওটিতে অবৈধ ইনপুট থাকে (উদাহরণস্বরূপ, কেউ একটি সংখ্যাসূচক ক্ষেত্রে "foobar" প্রবেশ করিয়েছে), ত্রুটি বর্ণনাকারী 400 অবৈধ অনুরোধগুলির একটি পৃষ্ঠা ফিরে আসে। স্নিপেটের মধ্যে পার্থক্য হ'ল ফিরে আসা ত্রুটির ফর্ম্যাট - একটি এইচটিএমএল তালিকা, সরল পাঠ্য বা জেএসএন।

এখন মিলিয়ন ডলারের প্রশ্ন - এর মধ্যে কোন স্নিপেটগুলি আপনার ওয়েব অ্যাপ্লিকেশনকে এক্সএসএস-সক্ষম করে?

এর উত্তরের জন্য, দুটি কোণ থেকে জ্যাঙ্গো ফর্ম এপিআই পরীক্ষা করা যাক:

  1. আক্রমণকারী কী ব্যবহারকারীর ব্রাউজারে প্রদর্শিত ওয়েব পৃষ্ঠায় দূষিত ইনপুট sertোকাতে পারে?
  2. এই দূষিত ইনপুটটি কি ব্যবহারকারীকে ফিরিয়ে দেওয়ার আগে সর্বদা সঠিকভাবে লুকানো থাকে?

জ্যাঙ্গোর ডকুমেন্টেশন অনুসারে, ক্ষেত্রের বৈধতা ত্রুটির জন্য গতিশীল ত্রুটি বার্তা উত্পন্ন করার উপায়টি উপযুক্ত বার্তা সহ একটি django.core.exception.ValidationError ব্যতিক্রম নিক্ষেপ করা হয়। ফর্মের বৈধতা ফাংশনগুলির একটি দ্বারা উত্থাপিত এই জাতীয় ব্যতিক্রম (উদাঃ পদ্ধতিগুলি পরিষ্কার () এবং ক্লিন_ () ক্লাসের জাঙ্গো.ফর্মস.বেসফর্ম) বার্তাটি ফর্মের ত্রুটি অভিধানে (জাজানো (জ্যাঙ্গো (form.utils.ErrorDict) সংরক্ষণ করা এবং সম্ভবত পরে ব্যবহারকারীকে প্রদর্শিত হবে)

এই জাতীয় ব্যতিক্রমের সুবিধা নেওয়ার একটি উপায় হ'ল কিছু বিল্ট-ইন ফর্ম ক্ষেত্রগুলি ব্যবহার করা যা ব্যতিক্রম বার্তায় ভুল প্রবেশপথটি সঠিকভাবে প্রতিফলিত করে। আমি এখানে তালিকাভুক্ত সমস্ত জ্যাঙ্গো ফর্ম ক্ষেত্রের প্রকারের চেষ্টা করেছি এবং নিম্নলিখিত তালিকা পেয়েছি: চয়েসফিল্ড, টাইপড চয়েসফিল্ড, মাল্টিপল চয়েসফিল্ড, ফাইলপ্যাথফিল্ড। এই বার্তাগুলির মধ্যে একটি ত্রুটি বার্তা তৈরি করবে যেমন "দয়া করে একটি বৈধ নির্বাচন নির্বাচন করুন।% (মান) গুলি উপলব্ধ বিকল্পগুলির মধ্যে একটি নয় is", যেখানে মানটি ভুল প্রবেশ করান।

দ্বিতীয় বিকল্পটি হ'ল কাস্টম ক্ষেত্র এবং / অথবা যাচাইকরণের পদ্ধতিগুলি গ্রহণ করা। উদাহরণস্বরূপ, নিম্নলিখিত অংশগুলি বিবেচনা করুন (সত্যিকারের প্রকল্প থেকে নেওয়া এবং বংশবৃদ্ধির খাতিরে সংশোধিত):

এখানে একটি ভাল পে-লোড ফু-এর মতো কিছু হবে। ।

হ্যাঁ, আপনি ঠিক বলেছেন, একমাত্র ভ্যালিডেশনআরারের ব্যতিক্রমগুলি আমাদের একটি এক্সএসএস দেয় না। সঠিক দুর্বলতার জন্য আমাদের আরও একটি উপাদান প্রয়োজন - চূড়ান্ত এইচটিএমএল পৃষ্ঠায় ত্রুটি বার্তা সন্নিবেশ করার ক্ষমতা যা ব্যবহারকারীর কাছে ফিরে আসে।

উপরে বর্ণিত ত্রুটিপত্রের শ্রেণিতে ত্রুটি বার্তাগুলি নিষ্কাশনের জন্য নিম্নলিখিত পদ্ধতি রয়েছে:

  1. as_data () - কোন নির্বীজন
  2. get_json_data (এস্কেপ_এইচটিএমএল = মিথ্যা) - Escape_html == মিথ্যা (ডিফল্ট) থাকলে কোনও ক্লিনআপ নেই
  3. as_json (Escape_html = মিথ্যা) Escape_html == মিথ্যা (ডিফল্ট) যদি পরিষ্কার হয় না
  4. as_ul () - নিরাপদ
  5. as_text () - কোন নির্বীজন
  6. __str __ () (as_ul () বলে) নিরাপদ

আসুন এখন আমাদের ছোট কুইজে ফিরে আসি। এটি দেখতে সহজ যে স্নিপেট 1 নিরাপদ কারণ এটি ইনপুট থেকে দূরে থাকা __str __ () পদ্ধতি ব্যবহার করে। তবে, 2 এবং 3 স্নিপেটগুলি বিপজ্জনক এবং এক্সএসএসের দিকে পরিচালিত করতে পারে।

এখানে দুটি গুরুত্বপূর্ণ টেকওয়ে বার্তা রয়েছে। বিকাশকারীদের জন্য মন্ত্রটি হ'ল সর্বদা অবিশ্বস্ত ইনপুট "। সুরক্ষা গবেষকদের জন্য, একটি সাধারণ গ্রেপ -আর "ভ্যালিডেশনআরার" আপনার জন্য আক্রমণ পৃষ্ঠকে প্রসারিত করতে পারে।

যাইহোক, আপনি যদি সম্পূর্ণ পোস্টটি না পড়েই কুইজটি সঠিকভাবে পাস করেন তবে আপনার আমার শ্রদ্ধা আছে।

একটি ওয়েব বা একটি মোবাইল অ্যাপ তৈরি করছেন?

ক্রাউডবোটিক্স একটি অ্যাপ্লিকেশন তৈরি, লঞ্চ এবং স্কেল করার দ্রুততম উপায়।

বিকাশকারী? ক্রাউডবোটিকস অ্যাপ নির্মাতাকে বিভিন্ন জনপ্রিয় ফ্রেমওয়ার্ক ব্যবহার করে দ্রুত অ্যাপ্লিকেশন সেটআপ এবং স্থাপন করতে চেষ্টা করুন।

ব্যস্ত না টেক? ক্রাউডবোটিকস পিএম এবং পাকা বিকাশকারীদের সাথে সফটওয়্যার বিকাশকারী শত শত টিমকে যোগদান করুন Join ক্রডডবোটিকস পরিচালিত অ্যাপ্লিকেশন বিকাশ দিয়ে বিনামূল্যে শিডিউল এবং ব্যয় করতে থাকুন।