কিভাবে MySQL sql ইনজেকশন প্রতিরোধ করে? এসকিউএল ইনজেকশন নীতি এবং প্রতিরোধ

মাইএসকিউএলকিভাবে এসকিউএল ইনজেকশন প্রতিরোধ করবেন? এসকিউএল ইনজেকশন নীতি এবং প্রতিরোধ

মাইএসকিউএল এবং এসকিউএল ইনজেকশন

আপনি যদি একটি ওয়েব পৃষ্ঠার মাধ্যমে ব্যবহারকারীর প্রবেশ করা ডেটা গ্রহণ করেন এবং এটি একটি ঢোকানমাইএসকিউএল ডাটাবেস, তারপর SQL ইনজেকশন নিরাপত্তা সমস্যা হতে পারে.

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

তথাকথিত SQL ইনজেকশন হল ডোমেইন নাম বা পৃষ্ঠার অনুরোধের ক্যোয়ারী স্ট্রিং জমা দিতে বা ইনপুট করার জন্য ওয়েব ফর্মে SQL কমান্ড সন্নিবেশ করে ক্ষতিকারক SQL কমান্ড চালানোর জন্য সার্ভারকে প্রতারিত করা।

আমাদের কখনই ব্যবহারকারীর ইনপুটকে বিশ্বাস করা উচিত নয়, আমাদের অবশ্যই ধরে নিতে হবে যে ব্যবহারকারীর ইনপুট ডেটা অনিরাপদ, এবং আমাদের সকলকে ব্যবহারকারীর ইনপুট ডেটা ফিল্টার করতে হবে।

নিম্নলিখিত উদাহরণে, প্রবেশ করা ব্যবহারকারীর নামটি অবশ্যই অক্ষর, সংখ্যা এবং আন্ডারস্কোরগুলির সংমিশ্রণ হতে হবে এবং ব্যবহারকারীর নামটি অবশ্যই 8 থেকে 20 অক্ষরের মধ্যে হতে হবে:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

এসকিউএল পরিস্থিতির দিকে নজর দেওয়া যাক যখন কোন বিশেষ অক্ষর ফিল্টার করা হয় না:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

উপরের ইনজেকশন স্টেটমেন্টে, আমরা $name-এর ভেরিয়েবল ফিল্টার করিনি। SQL স্টেটমেন্ট যা আমাদের প্রয়োজন নেই তা $name-এ ঢোকানো হয়েছে, যা ব্যবহারকারীদের টেবিলের সমস্ত ডেটা মুছে দেবে।

PHP-তে mysqli_query() একাধিক SQL স্টেটমেন্ট এক্সিকিউট করার অনুমতি নেই, কিন্তু SQLite এবং PostgreSQL একই সময়ে একাধিক SQL স্টেটমেন্ট এক্সিকিউট করতে পারে, তাই আমাদের এই ব্যবহারকারীদের ডাটা কঠোরভাবে যাচাই করতে হবে।

এসকিউএল ইনজেকশন প্রতিরোধ করতে, আমাদের নিম্নলিখিত পয়েন্টগুলিতে মনোযোগ দিতে হবে:

  • 1. ব্যবহারকারীর ইনপুটকে কখনই বিশ্বাস করবেন না।ব্যবহারকারীর ইনপুট পরীক্ষা করুন, আপনি নিয়মিত অভিব্যক্তি ব্যবহার করতে পারেন, বা দৈর্ঘ্য সীমাবদ্ধ করতে পারেন; একক উদ্ধৃতি রূপান্তর করুন এবং ডবল "-", ইত্যাদি।
  • 2. কখনই ডায়নামিক অ্যাসেম্বলি এসকিউএল ব্যবহার করবেন না, আপনি প্যারামিটারাইজড এসকিউএল ব্যবহার করতে পারেন বা ডেটা কোয়েরি এবং অ্যাক্সেসের জন্য সরাসরি সঞ্চিত পদ্ধতি ব্যবহার করতে পারেন।
  • 3. প্রশাসকের বিশেষাধিকারের সাথে কখনই ডাটাবেস সংযোগ ব্যবহার করবেন না, প্রতিটি অ্যাপ্লিকেশনের জন্য সীমিত সুবিধা সহ পৃথক ডাটাবেস সংযোগ ব্যবহার করুন৷
  • 4. গোপনীয় তথ্য সরাসরি সংরক্ষণ করবেন না, পাসওয়ার্ড এবং সংবেদনশীল তথ্য এনক্রিপ্ট বা হ্যাশ আউট করবেন না।
  • 5. অ্যাপ্লিকেশনের ব্যতিক্রম তথ্য যতটা সম্ভব কম ইঙ্গিত দিতে হবে, এবং মূল ত্রুটি তথ্য মোড়ানোর জন্য কাস্টম ত্রুটি তথ্য ব্যবহার করা ভাল
  • 6. এসকিউএল ইনজেকশন সনাক্তকরণ পদ্ধতি সাধারণত অক্জিলিয়ারী গ্রহণ করে软件অথবা ওয়েবসাইট প্ল্যাটফর্ম সনাক্ত করতে, সফ্টওয়্যার সাধারণত sql ইনজেকশন সনাক্তকরণ টুল jsky ব্যবহার করে, ওয়েবসাইট প্ল্যাটফর্মে Yisi ওয়েবসাইট নিরাপত্তা প্ল্যাটফর্ম সনাক্তকরণ টুল আছে। MDCSOFT SCAN et al.MDCSOFT-IPS ব্যবহার করে কার্যকরভাবে SQL ইনজেকশন, XSS আক্রমণ ইত্যাদির বিরুদ্ধে রক্ষা করতে পারে।

এসকিউএল ইনজেকশন প্রতিরোধ করুন

স্ক্রিপ্টিং ল্যাঙ্গুয়েজ যেমন পার্ল এবং পিএইচপিতে আপনি এসকিউএল ইনজেকশন প্রতিরোধ করতে ব্যবহারকারীর দ্বারা প্রবেশ করা ডেটা এড়িয়ে যেতে পারেন।

PHP-এর জন্য MySQL এক্সটেনশন mysqli_real_escape_string() ফাংশন প্রদান করে বিশেষ ইনপুট অক্ষর এড়ানোর জন্য।

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

লাইক স্টেটমেন্টে ইনজেকশন

ক্যোয়ারী করার সময়, যদি ব্যবহারকারী "_" এবং "%" এর সাথে মান প্রবেশ করে, তাহলে এটি ঘটবে: ব্যবহারকারী মূলত "abcd_" কোয়েরি করতে চেয়েছিলেন, কিন্তু ক্যোয়ারী ফলাফলের মধ্যে "abcd_", "abcde", এবং "abcdf" অন্তর্ভুক্ত রয়েছে " ইত্যাদি; সমস্যাটি তখনও ঘটে যখন ব্যবহারকারী "30%" (দ্রষ্টব্য: ত্রিশ শতাংশ) প্রশ্ন করতে চায়।

একটি পিএইচপি স্ক্রিপ্টে আমরা উপরের পরিস্থিতি পরিচালনা করতে addcslashes() ফাংশন ব্যবহার করতে পারি, যেমনটি নিম্নলিখিত উদাহরণে:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes() ফাংশন নির্দিষ্ট অক্ষরের আগে একটি ব্যাকস্ল্যাশ যোগ করে।

সিনট্যাক্স বিন্যাস:

addcslashes(string,characters)
参数বিবরণ
স্ট্রিংপ্রয়োজন।চেক করার জন্য স্ট্রিং নির্দিষ্ট করে।
অক্ষরঐচ্ছিক।addcslashes() দ্বারা প্রভাবিত অক্ষরের অক্ষর বা পরিসর নির্দিষ্ট করে।

হোপ চেন উইলিয়াং ব্লগ ( https://www.chenweiliang.com/ ) শেয়ার করেছেন "কিভাবে MySQL sql ইনজেকশন প্রতিরোধ করে? SQL ইনজেকশন নীতি এবং প্রতিরোধ" আপনাকে সাহায্য করার জন্য।

এই নিবন্ধটির লিঙ্ক শেয়ার করতে স্বাগতম:https://www.chenweiliang.com/cwl-500.html

সর্বশেষ আপডেট পেতে চেন ওয়েইলিয়াং এর ব্লগের টেলিগ্রাম চ্যানেলে স্বাগতম!

🔔 চ্যানেলের শীর্ষ ডিরেক্টরিতে মূল্যবান "ChatGPT সামগ্রী বিপণন AI টুল ব্যবহারের নির্দেশিকা" পেতে প্রথম হন! 🌟
📚 এই গাইডটিতে বিশাল মূল্য রয়েছে, 🌟এটি একটি বিরল সুযোগ, এটি মিস করবেন না! ⏰⌛💨
ভালো লাগলে শেয়ার এবং লাইক করুন!
আপনার শেয়ার এবং লাইক আমাদের ক্রমাগত অনুপ্রেরণা!

 

发表 评论

আপনার ইমেইল ঠিকানা প্রচার করা হবে না. 必填 项 已 用 * 标注

উপরে যান