যদি আপনি ব্যবহার স্ট্রিপচার ব্যবহারকারীর ইনপুট পরিষ্কার করার জন্য, আপনি একা নন। অনেক ডেভেলপার এই ধরনের পদ্ধতির উপর নির্ভর করে। ইনপুট স্যানিটাইজেশন ইনজেকশনের প্রচেষ্টা ঠেকানোর জন্য। প্রথম দৃষ্টিতে এটি যৌক্তিক মনে হয়, বিপজ্জনক অক্ষরগুলো সরিয়ে দিলে পেলোড অদৃশ্য হয়ে যায়। তবে, এই পদ্ধতিটি নিরাপত্তার একটি ভ্রান্ত ধারণা দেয়। প্রকৃতপক্ষে, আক্রমণকারীরা সাধারণ ফিল্টারগুলোকেও বাইপাস করতে পারে, যেমন— স্ট্রিপচার ব্যবহার অস্পষ্ট পেলোডএনকোডিং, বা চতুর কনটেক্সট সুইচিং। এই কারণেই স্মার্ট ডেভেলপাররা এখানেই থেমে থাকেন না। পরিবর্তে, তারা ব্যবহার করেন প্যারামিটারাইজড প্রশ্নযা রুটে ইনজেকশন আক্রমণ প্রতিরোধ করে।
এই পোস্টে আপনি জানতে পারবেন কেন স্ট্রিপচার বাস্তব পরিস্থিতিতে এগুলো কীভাবে ব্যর্থ হয়, আক্রমণকারীরা কীভাবে এই ফিল্টারগুলোর অপব্যবহার করে এবং কোন নিরাপদ বিকল্পগুলো আসলেই কার্যকর। আমরা কোডের উদাহরণের মাধ্যমে আলোচনা করব, প্রচলিত বাইপাস কৌশলগুলো দেখাব এবং ব্যাখ্যা করব কীভাবে... ইনপুট স্যানিটাইজেশন সর্বদা কাঠামোগত সুরক্ষার সাথে যুক্ত থাকতে হবে যেমন প্যারামিটারাইজড প্রশ্ননতুবা আপনি অরক্ষিত থেকে যাবেন।
কি স্ট্রিপচার আসলে করে (এবং করে না)
অনেক ডেভেলপার ব্যবহার করেন stripchar অথবা ব্যবহারকারীর ইনপুট থেকে অনিরাপদ অক্ষর অপসারণ করার জন্য অনুরূপ ফাংশন। সাধারণত, এটি বিরামচিহ্ন, বিশেষ প্রতীক, বা বর্ণ ও সংখ্যা ছাড়া অন্য যেকোনো কিছু বাদ দেয়। প্রথমত, এটা শুনতে মনে হতে পারে ইনপুট স্যানিটাইজেশনকিন্তু এটা প্রকৃত সুরক্ষা নয়।
চলুন বিষয়টি ভেঙে দেখি। এইরকম একটি ফাংশন:
অক্ষরগুলি সরিয়ে দেয় যেমন ', ", বা ;সুতরাং, যদি আপনি প্রবেশ করেন:
এটি হয়ে যায়:
ব্যবহারকারীর ইনপুট দেখতে পরিষ্কার মনে হলেও, আক্রমণকারীরা শুধুমাত্র লজিক ব্যবহার করেই SQL পেলোড প্রবেশ করাতে পারে, বিশেষ করে যখন অ্যাপ্লিকেশনটি স্ট্রিং সংযুক্তকরণের মাধ্যমে কোয়েরি তৈরি করে। SQL ইনজেকশনকে সত্যিকার অর্থে প্রতিরোধ করতেআপনাকে অবশ্যই প্যারামিটারাইজড কোয়েরি এবং কনটেক্সট-অ্যাওয়ার ইনপুট হ্যান্ডলিং ব্যবহার করতে হবে। ক্যারেক্টার ফিল্টার যেমন stripchar() শুধু যথেষ্ট নয়।
অবশ্যই, প্রথম নজরে কোড-মুক্ত ইনপুটকে নিরাপদ মনে হতে পারে। তবে, এই পদ্ধতি ক্ষতিকারক লজিককে নিষ্ক্রিয় করে না, এটি কেবল তার লেখার ধরণ পরিবর্তন করে। প্রকৃতপক্ষে, আক্রমণকারীরা প্রায়শই পেলোড এনকোড করে, হোয়াইটস্পেস যোগ করে, অথবা আপনার ফিল্টারকে সম্পূর্ণরূপে বাইপাস করার জন্য কৌশলগতভাবে অপসারিত অক্ষর ব্যবহার করে এর সুযোগ নেয়।
এছাড়া স্ট্রিপচার এতে গুরুত্বপূর্ণ প্রেক্ষাপটের অভাব রয়েছে। এটি জানে না যে ইনপুটটি কোনো ডেটাবেস, শেল, নাকি ব্রাউজারের জন্য পাঠানো হচ্ছে। এর মানে হলো, এটি সঠিক এস্কেপিং বা এনকোডিং প্রয়োগ করতে পারে না। গন্তব্য না জেনে ইনপুটকে পরিশুদ্ধ করাটা অনেকটা এইচটিএমএল এস্কেপ করার মতো, যখন আসল হুমকিটি হলো... এসকিউএল.
শেষে, স্ট্রিপচার এটি কোনো কিছু ব্যাখ্যা বা সুরক্ষিত করে না, শুধু স্ট্রিং সম্পাদনা করে। আর সম্পাদনা করা কোনো সুরক্ষা নয়। আপনি যদি সত্যিকারের সুরক্ষা চান, তবে স্ট্রাকচার্ড, ভ্যালিডেটেড এবং প্যারামিটারাইজড কোয়েরি ব্যবহার করুন। ব্যস।
পার্থক্যটি আরও স্পষ্ট করার জন্য, এখানে দেখানো হলো কীভাবে stripchar-কে প্যারামিটারাইজড কোয়েরিগুলোর সাথে পাশাপাশি তুলনা করা যায়:
স্ট্রিপচার বনাম প্যারামিটারাইজড কোয়েরি: কোনটি আসলে আপনার কোডকে বেশি সুরক্ষিত রাখে?
| বৈশিষ্ট্য | stripchar() | প্যারামিটারাইজড প্রশ্ন |
|---|---|---|
| সুরক্ষা স্তর | স্ট্রিংয়ের প্রাথমিক পরিষ্করণ। এনকোডিং বা লজিক ট্রিকের মাধ্যমে এটি সহজেই এড়ানো যায়। | সব ধরনের SQL ইনজেকশনের বিরুদ্ধে শক্তিশালী সুরক্ষা। |
| প্রসঙ্গ সচেতনতা | প্রসঙ্গ নির্বিশেষে (যেমন SQL, HTML, শেল ইত্যাদি) সব জায়গায় একই নিয়ম প্রযোজ্য। | সম্পূর্ণরূপে প্রসঙ্গ-সচেতন। প্রতিটি এনভায়রনমেন্টের জন্য যথাযথ এস্কেপিং ব্যবহার করে। |
| ডেভেলপার প্রচেষ্টা | বাস্তবায়নে দ্রুত হলেও দীর্ঘমেয়াদী ব্যবহারের জন্য নির্ভরযোগ্য নয়। | সঠিক সমন্বয় প্রয়োজন, তবে এটি মজবুত এবং ভবিষ্যৎ-উপযোগী। |
| বাইপাস প্রতিরোধ | কম — আক্রমণকারীরা হোয়াইটস্পেস, এনকোডিং বা লজিক ব্যবহার করে সহজেই নিজেদের মানিয়ে নেয়। | উচ্চ — কোডকে ডেটা থেকে পৃথক করে এবং নির্ভরযোগ্যভাবে ইনজেকশন প্রতিরোধ করে। |
| নিরাপত্তা আস্থা | নিরাপত্তার মিথ্যা অনুভূতি — সমস্যাটির সমাধান না করে তা আড়াল করতে পারে। | বিশ্বস্ত শিল্প standard নিরাপদ কোয়েরি সম্পাদনের জন্য। |
আক্রমণকারীরা কীভাবে ইনপুট স্যানিটাইজেশন এড়িয়ে যায়
ডেভেলপাররা যখন নির্ভর করে তখন একটি সাধারণ ঝুঁকিপূর্ণ ফ্লো দেখতে এইরকম হয়। স্ট্রিপচার ইনপুট স্যানিটাইজেশনের জন্য:
আক্রমণকারীদের আপনার ফিল্টার ভাঙার দরকার নেই, তাদের শুধু প্রয়োজন... তাদের পাশ কাটিয়ে যানযখন ডেভেলপাররা নির্ভর করে স্ট্রিপচার ইনপুট স্যানিটাইজেশনের জন্য, তারা প্রায়শই ধরে নেয় যে উদ্ধৃতি চিহ্ন বা সেমিকোলনের মতো অক্ষরগুলি সরিয়ে দিলে ইনজেকশনের প্রচেষ্টাগুলি ব্লক হয়ে যাবে। তবে, আক্রমণকারীরা দ্রুত নিজেদের মানিয়ে নেয়। তারা কৌশল তৈরি করে অস্পষ্ট পেলোড যেগুলো রেজেক্স-ভিত্তিক ফিল্টার এড়িয়ে যায়, বিশেষ করে যখন সেই ফিল্টারগুলোতে প্রাসঙ্গিকতার অভাব থাকে।
উদাহরণস্বরূপ, ধরা যাক আপনি ইনপুটকে এইভাবে পরিমার্জন করার চেষ্টা করছেন:
ব্যবহারকারী ক্লাসিক জমা দিতে না পারলেও ' OR 1=1 --তারা ইউনিকোডের কৌশল, স্ট্রিং সংযোজন, বা ত্রুটিপূর্ণ সিনট্যাক্স ব্যবহার করতে পারে যা তারপরও চলে। এই ধরনের পেলোড প্রায়শই কাজ করে:
বা:
যদি আপনার ফাংশনটি শব্দ নয় এমন অক্ষর বাদ দেয়, তাহলে আপনি দুর্ঘটনাক্রমে বৈধ SQL কমান্ড পুনর্গঠন করুনআরও খারাপ ব্যাপার হলো, আক্রমণকারীরা এমনভাবে মান এনকোড করতে পারে যা আপনার ফিল্টার পার করে গেলেও টার্গেট সিস্টেমে ডিকোড হয়ে যায়।
SQL ইনজেকশন ছাড়াও, স্ট্রিপচার এটি অন্যান্য ক্ষেত্রেও ব্যর্থ হয়, যেমন শেল কমান্ড, ফাইল পাথ, বা এমনকি জাভাস্ক্রিপ্ট এক্সিকিউশন। যেহেতু ইনপুটটি কোথায় ব্যবহৃত হবে সে সম্পর্কে এর কোনো ধারণা নেই, তাই এটি সঠিক এস্কেপিং বা ভ্যালিডেশন প্রয়োগ করতে পারে না।
ফলস্বরূপ, ইনপুট স্যানিটাইজেশন সঙ্গে স্ট্রিপচার এড়িয়ে যাওয়া সহজ। প্রকৃত নিরাপত্তা আসে প্রসঙ্গ-সচেতন নিয়ন্ত্রণবিশেষ করে প্যারামিটারাইজড প্রশ্ন যা লজিক ইনজেকশনকে সম্পূর্ণরূপে প্রতিরোধ করে।
কেন আপনার পরিবর্তে প্যারামিটারাইজড কোয়েরি ব্যবহার করা উচিত
যদি আপনি ইনজেকশন আক্রমণ সত্যি সত্যি বন্ধ করতে চান, তাহলে আপনাকে যা করতে হবে তা হলো স্ট্রিং দিয়ে কোয়েরি তৈরি করা বন্ধ করুন। সেখানেই প্যারামিটারাইজড প্রশ্ন ভিতরে আসুন। ভিন্ন। স্ট্রিপচারতারা ফিল্টার করে না, তারা ডেটা থেকে কোড আলাদা করুন ইঞ্জিন স্তরে।
চলুন ত্রুটিপূর্ণ কোয়েরিটি পুনরায় পর্যালোচনা করা যাক:
এটি বিপজ্জনক, কারণ ইনপুটটি সরাসরি SQL-এ প্রবেশ করানো হয়। অক্ষর বাদ দিলেও, আপনি এমন একটি স্ট্রিং তৈরি করছেন যা অপব্যবহার হতে পারে। এর পরিবর্তে, এইরকম একটি প্যারামিটারযুক্ত কোয়েরি ব্যবহার করুন:
এখানে, ডাটাবেস ড্রাইভার জানে যে userInput ডেটা নির্বাহযোগ্য নয় এমন কোডএটি স্বয়ংক্রিয়ভাবে এস্কেপ করে এবং ইনজেকশন ব্লক করে, এমনকি যদি ইনপুটে কোটেশন চিহ্ন, সেমিকোলন বা হেক্স-এনকোডেড পেলোড থাকে।
পাইথনে:
পিএইচপি-তে পিডিও সহ:
এই সমস্ত উদাহরণ জুড়ে, প্যারামিটারাইজড প্রশ্ন কোন অক্ষরগুলো বিপজ্জনক হতে পারে তা অনুমান করার প্রয়োজন ছাড়াই ইনজেকশন প্রতিরোধ করুন। আপনার প্রয়োজন নেই স্ট্রিপচার, আপনার কাঠামোগত ও প্রসঙ্গ-সচেতন কোয়েরি নির্মাণ প্রয়োজন।
এছাড়াও, এই কৌশলটি দুর্বোধ্য পেলোড, ইউনিকোড কৌশল এবং এনকোডিং বাইপাসকে প্রতিহত করে, যা একই ধরনের এড়ানোর কৌশল হিসেবে পাওয়া যায় XSS দুর্বলতাXygeni-এর মতো টুলগুলো এই হুমকিগুলো আগেভাগেই শনাক্ত করে। SAST বিশ্লেষণ.
সংক্ষেপে, প্রকৃত প্রতিরক্ষা ব্যবস্থা ফিল্টারের উপর নির্ভর করে না। এগুলো প্রোটোকল, বিশ্বস্ত এপিআই এবং সম্পূর্ণ প্রেক্ষাপটের উপর নির্ভর করে। আপনি যদি ফ্রেমওয়ার্ক বা ডাইনামিক সার্ভিস ইনজেকশন ব্যবহার করেন, তবে আপনার কোডবেসে ইনপুটগুলো কীভাবে ছড়িয়ে পড়ে সে সম্পর্কে সচেতন থাকুন। নিরাপদ নির্ভরতা ইনজেকশন এটি নিশ্চিত করে যে এমনকি জটিল প্রবাহও নতুন আক্রমণের সুযোগ তৈরি করবে না।
নির্ভর করবেন না স্ট্রিপচারবাস্তব প্রতিরক্ষা জোরদার করতে জাইজেনি ব্যবহার করুন
এমনকি যদি আপনি ব্যবহার করেন প্যারামিটারাইজড প্রশ্নআপনার পুরো কোডবেস যে একই নিয়ম অনুসরণ করবে তার কোনো নিশ্চয়তা নেই। standardপুরোনো লজিক, থার্ড-পার্টি স্ক্রিপ্ট, বা একটি পুল রিকোয়েস্টের (PR) কিছু উপেক্ষিত লাইন এখনও ইনজেকশনের ঝুঁকি তৈরি করতে পারে। ঠিক এখানেই জাইজেনি (Xygeni) সাহায্য করে।
জাইজেনি আপনার সোর্স কোড স্ক্যান করে, pull requestsএবং সিআই pipelineধরার জন্য:
- কনক্যাটেনেশনের মাধ্যমে SQL গঠনকারী কোয়েরি স্ট্রিং
- দুর্বল বা দেশীয় ফিল্টার যেমন স্ট্রিপচার
- সন্দেহজনক যুক্তি যা পরিচিত অস্পষ্ট পেলোডের সাথে মিলে যায়
আপনার প্রতিটি লাইন খুঁটিয়ে দেখার দরকার নেই। জাইজেনি (Xygeni) অনিরাপদ প্যাটার্নগুলো আগেভাগেই চিহ্নিত করে এবং প্রয়োগ করে। স্বয়ংক্রিয় ফিক্স যেখানে সম্ভব, এবং কাস্টমাইজযোগ্য উপায়ে ঝুঁকিপূর্ণ মার্জ ব্লক করতে পারে। Guardrails.
সংক্ষেপে, জাইজেনি নিশ্চিত করে যে প্যারামিটারাইজড কোয়েরি শুধু একটি উত্তম অনুশীলনই নয়, বরং বৃহৎ পরিসরে তা কার্যকর করা হয়। আর কোনো অনুমান নয়। কোনো ফিল্টার বাদ পড়বে না। শুধু প্রকৃত সুরক্ষা।
জাইজেনি কীভাবে আপনার কোডে অসুরক্ষিত কোয়েরি খুঁজে বের করে তা দেখতে চান?
মূল বিষয়সমূহ: যা মনে রাখতে হবে স্ট্রিপচার এবং ইনজেকশনের ঝুঁকি
- স্ট্রিপচার এটি কোনো নিরাপত্তা ফাংশন নয় এটি অক্ষর সংখ্যা কমায়, ঝুঁকি নয়।
- ইনপুট স্যানিটাইজেশন যথেষ্ট নয় যখন আপনি স্ট্রিং সংযুক্তি ব্যবহার করে কোয়েরি তৈরি করছেন
- প্যারামিটারাইজড কোয়েরিই সঠিক প্রতিরক্ষা।এবং প্রতিটি আধুনিক ভাষা বা ফ্রেমওয়ার্ক এগুলো সমর্থন করে।
- অস্পষ্ট পেলোড ফিল্টার এড়িয়ে যেতে পারেবিশেষ করে যদি এনকোডিং কৌশল জড়িত থাকে।
- স্থির বিশ্লেষণ (SASTযন্ত্র এমন কিছু ধরে যা মানুষ ধরতে পারে না।যার মধ্যে লিগ্যাসি কোডে লুকিয়ে থাকা অনিরাপদ প্যাটার্নও অন্তর্ভুক্ত।
- জাইজেনি সনাক্তকরণ, অগ্রাধিকার নির্ধারণ এবং এমনকি প্রতিকারকেও স্বয়ংক্রিয় করে তোলে। যাতে আপনার দল দুর্বলতা খোঁজার পরিবর্তে ফিচার লেখার উপর মনোযোগ দিতে পারে।
উপসংহার: ফিল্টার বিশ্বাস করবেন না। নকশাগতভাবেই সুরক্ষিত।
ফাংশনগুলির উপর নির্ভর করে যেমন স্ট্রিপচার এগুলোকে একটি দ্রুত সমাধান বলে মনে হতে পারে, কিন্তু এগুলো এক ধরনের ভ্রান্ত নিরাপত্তার অনুভূতি তৈরি করে। আক্রমণকারীরা স্ট্রিং ফিল্টারের চেয়েও দ্রুত বিবর্তিত হয়। ইনজেকশন আক্রমণ বন্ধ করার একমাত্র নির্ভরযোগ্য উপায় হলো নকশা অনুযায়ীই নিরাপদ কোড লেখা এবং সেই নকশা সর্বত্র প্রয়োগ করা।
Xygeni-এর মতো টুল আপনাকে তা স্বয়ংক্রিয়ভাবে করতে সাহায্য করে। pull request থেকে pipelineআপনার ফিল্টার যা ধরতে পারে না, তারা তা ধরে ফেলে এবং উৎপাদনে পৌঁছানোর আগেই ঠিক করে দেয়।




