কম্পিউটার

PHP SQL ইনজেকশন:আপনার যা জানা দরকার

ইনজেকশন আক্রমণের ক্লাসে, PHP SQL ইনজেকশন আক্রমণ অত্যন্ত বিশিষ্ট হয়েছে. বেশিরভাগ ওয়েবসাইট এটির জন্য ঝুঁকিপূর্ণ। গবেষণা অনুসারে, এসকিউএল ইনজেকশন ব্যবহার করে ওয়েবে 50% এরও বেশি আক্রমণ করা হয়েছিল। এই নিবন্ধে, আমরা আলোচনা করব কিভাবে SQL ইনজেকশন করা হয় এবং কিভাবে আমরা PHP অ্যাপ্লিকেশনে এটি প্রতিরোধ করতে পারি।

এসকিউএল ইনজেকশন (SQLi) কি?

প্রথমে আসুন এসকিউএল ইনজেকশন বুঝতে পারি। SQL ইনজেকশন (SQLi) এমন একটি পদ্ধতি যেখানে হ্যাকাররা এক্সিকিউটেড এসকিউএল কমান্ডের মিথ্যে করার মাধ্যমে ব্যাকএন্ডে চলমান SQL স্টেটমেন্ট পরিবর্তন করে। এই ধরনের ইনজেকশন ফর্মের ইনপুট ক্ষেত্রগুলির মাধ্যমে সঞ্চালিত হয় এবং ডাটাবেসে ভয়াবহ পরিণতি ঘটায়। এটি অবশেষে ডাটাবেস থেকে অত্যন্ত সংবেদনশীল তথ্য প্রকাশের দিকে নিয়ে যায়। যেহেতু হ্যাকার এসকিউএল কমান্ড ইনজেকশনের মাধ্যমে ডাটাবেসের উপর নিয়ন্ত্রণ লাভ করে, সে ডাটাবেস থেকে ডেটা সন্নিবেশ, আপডেট বা এমনকি মুছে ফেলার অধিকার পায়৷

এসকিউএল ইনজেকশন আক্রমণ ঘটে যখন কোডটি সুরক্ষিত ফ্যাশনে লেখা হয় না। তাদের মধ্যে কিছু আপাতদৃষ্টিতে সুরক্ষিত কোডিং-এ লেখা, কিন্তু তারপরও SQLi-কে পথ দেয়:

  • স্পেস অক্ষরের ভুল পরিস্রাবণ এবং টাইপ হ্যান্ডলিং
  • ডাটাবেসে অস্বাস্থ্যকর, ভুলভাবে এনকোড করা ডেটা পাস করা
  • কোড এবং ডেটার মিশ্রণ
  • স্ট্রিংগুলিকে সীমাবদ্ধ করতে উদ্ধৃতি চিহ্নের ব্যবহার

সংক্ষেপে, যখন ব্যবহারকারীর ইনপুট সঠিকভাবে যাচাই করা হয় না, তখন এটি ব্যবহারকারীর ডেটাকে ডাটাবেস দ্বারা দূষিতভাবে ব্যাখ্যা করার দিকে পরিচালিত করে। যদি ব্যবহারকারীর ইনপুট সরাসরি ফ্রন্ট-এন্ড থেকে আনা হয় এবং ক্যোয়ারীতে ঢোকানো হয়, তাহলে এটি একটি সমঝোতার দিকে পরিচালিত করবে।

অন্য একটি সমস্যা যা SQLi-এর দিকে নিয়ে যায় তা হল যে ত্রুটিগুলি ব্যবহারকারীর কাছে প্রদর্শিত হয় যা একটি দূষিত ব্যবহারকারী ডাটাবেসের ধরন এবং সংস্করণ সম্পর্কে বিশদ বিবরণ পেতে অপব্যবহার করতে পারে এবং এইভাবে এসকিউএল ইনজেকশন আক্রমণের কারণ হতে পারে এমন শোষণ স্থাপন করে৷

PHP SQL ইনজেকশন কি?

অনিরাপদ কোডের উদাহরণ

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

<?php

$username = $_POST[‘uname'];

$pass = $_POST[‘password'];

$sql = "SELECT * FROM user_table WHERE username='".$username."' AND userpwd='".$pass"';";

?>

উপরের কোডটি কোনো বৈধতা ছাড়াই সরাসরি ব্যবহারকারীর ইনপুট গ্রহণ করে এবং ডাটাবেসের উপর চালানো হবে এমন SQL কোয়েরিতে সরাসরি সন্নিবেশ করে। একজন হ্যাকার এতে লজিক্যাল কোয়েরিও সন্নিবেশ করতে পারে যা একটি ফলাফল সত্য প্রদান করবে যেমন যদি $password ভেরিয়েবলটি ” বা ‘1’=’1′ হিসাবে মান পায় তাহলে মানটি 1=1 হয়ে যায় যা সর্বদা সত্য। এটি অবশেষে একটি সফল লগইনের দিকে নিয়ে যাবে যা একটি গুরুতর নিরাপত্তা সমঝোতার দিকে নিয়ে যাবে৷

এছাড়াও, অন্য একটি পরিস্থিতি বিবেচনা করুন যেখানে ত্রুটিটি ব্যবহারকারীর কাছে প্রদর্শিত হয়

<?php

elseif($mysqli->error)

{

print($mysqli->error);

}

?>

এই পরিস্থিতিতে, ব্যবহারকারীর স্ক্রিনে ত্রুটির লগগুলি প্রিন্ট করার পরিবর্তে, একটি ডাটাবেস রাখা একটি ভাল অভ্যাস হবে যেখানে ত্রুটি লগগুলি জমা করা যেতে পারে এবং পরে ওয়েবসাইটটি কতবার র শিকার হয়েছে তা পরীক্ষা করতে ব্যবহার করা যেতে পারে। SQLi .

নিরাপদ কোডের উদাহরণ

PHP SQL ইনজেকশন এড়াতে নিরাপদ কোডিংয়ের একটি উদাহরণ নিম্নলিখিত পদ্ধতিতে এই ধরনের যৌক্তিক প্রশ্নের জন্য ব্যবহারকারীর নাম এবং পাসওয়ার্ড যাচাই করা যেতে পারে:

<?php

Function checkUserInput($str)

{

return

str_replace(array("‘",""", "'", ‘"‘),array("‘","&quot;"'","&quot;",$str));

}

$username = checkUserInput($_POST[‘uname']);

$pass = checkUserInput($_POST[‘password']);

?>

এই পদ্ধতিতে, একটি এসকিউএল কোয়েরিতে যুক্ত হওয়ার আগে ব্যবহারকারীর ইনপুট যাচাই করা যেতে পারে। পিএইচপি এসকিউএল ইনজেকশন প্রতিরোধ করার আরেকটি পদ্ধতি হল প্রস্তুত বিবৃতি (পিএইচপি ডেটা অবজেক্ট (পিডিও)) ব্যবহার করা। এটি একটি দক্ষ পদ্ধতি যেখানে SQL স্টেটমেন্ট বারবার কার্যকর করা যেতে পারে। PDO এমন পদ্ধতিগুলি সরবরাহ করে যা প্যারামিটারাইজড প্রশ্নগুলি ব্যবহার করা সহজ করে তোলে। এটি কোডের পঠনযোগ্যতা এবং বহনযোগ্যতাও বাড়ায় এবং শুধুমাত্র MySQL ডাটাবেস নয় অন্যান্য ধরনের ডাটাবেসের সাথেও কাজ করে। PDO সংজ্ঞায়িত করে কোন অংশটিকে ব্যবহারকারীর ইনপুট এবং অবশিষ্ট অংশটিকে ডাটাবেস কমান্ড হিসাবে বিবেচনা করা হবে৷

MySQL ডাটাবেসের জন্য PDO-এর জন্য একটি উদাহরণ কোড স্নিপেট হল:

//DB credentials

define(‘DB_HOST','localhost');

define(‘DB_USER','John_Reaper');

define(‘DB_PASS','admin@wsxdn.com@$$w0rd$');

define(‘DB_NAME','users');

if(isset($_GET[‘id']))

{

$id = $_GET[‘id'];

if(is_numeric($id) == true)

{

try

{

$dbh = new PDO(‘DBHOST;DB_NAME','DB_USER','DB_PASS');

$dbh->setAttribute(PDO::AFTER_ERRMODE, PDO::ERRMODE_EXCEPTION);

$q = "SELECT username FROM users WHERE id = :id";

$sth = $dbh->prepare($q);

$sth->bindParam(‘:id',$id);

$sth->execute();

$sth->setFetchMode(PDO::FETCH_ASSOC);

$res = $sth->fetchColumn();

print(htmlentities($res));

$dbh = null;

}

catch(PDOException $e)

{

error_log(‘PDOException - ‘.$e->getMessage(),0);

http_response_code(500);

die(‘Connection to database unsuccessful');

}

}

else

{

http_response_code(400);

die(‘Error processing malformed request');

}

}

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

এইভাবে, আপনি নিম্নলিখিত সর্বোত্তম অনুশীলনগুলি প্রয়োগ করে আপনার ওয়েবসাইটগুলিকে SQL ইনজেকশন থেকে সুরক্ষিত করতে পারেন:

  1. জাভাস্ক্রিপ্ট ব্যবহার করে সামনের প্রান্তে বা পিএইচপি ব্যবহার করে ব্যাকএন্ডে ব্যবহারকারীর ইনপুট যাচাই করা।
  2. ব্যবহারকারীর কাছে ত্রুটি প্রদর্শন করা হচ্ছে না। পরিবর্তে, একটি ফাইলে ত্রুটিগুলি লগ করা এবং এটিকে আক্রমণকারীর কাছে অ্যাক্সেসযোগ্য করে তোলা। এছাড়াও, ব্যবহারকারীর কাছে প্রদর্শিত ত্রুটি বার্তাটি অবশ্যই খুব সাধারণ হতে হবে এবং ডাটাবেস সম্পর্কে কোনও তথ্য প্রকাশ করবে না৷
  3. একটি প্যারামিটারাইজড ক্যোয়ারী ব্যবহার করে যা এসকিউএল কোয়েরির অংশটি নির্দিষ্ট করে যা ব্যবহারকারীর ইনপুট হিসাবে বিবেচনা করা প্রয়োজন৷
  4. অব্যবহৃত সঞ্চিত পদ্ধতিগুলি সরানো কারণ সেগুলি সহজেই শোষণযোগ্য এবং এইভাবে এসকিউএল ইনজেকশন প্রতিরোধ করে৷
  5. আক্রমণকারীরা প্রমাণীকরণকে বাইপাস করলে কোনো আপস এড়াতে সঠিক ব্যবহারকারীদের যথাযথ অধিকার প্রদান করা।

PHP SQL ইনজেকশন থেকে চূড়ান্ত সুরক্ষা

Astra এর মত ফায়ারওয়াল ব্যবহার করলে SQLi এর প্রতি আপনার রোগ প্রতিরোধ ক্ষমতা বৃদ্ধি পায়। SQLi ছাড়াও, Astra Security Suite একটি ওয়েবসাইটকে 100+ আরও আক্রমণ থেকে রক্ষা করে, যার মধ্যে কিছু খারাপ বট, XSS, CSRF ইত্যাদি।

PHP SQL ইনজেকশন:আপনার যা জানা দরকার

আমাদের ম্যালওয়্যার স্ক্যানার 10 মিনিটেরও কম সময়ে একটি ওয়েবসাইট স্ক্যান করতে পরিচিত। এবং পরবর্তী স্ক্যানের জন্য আরও কম সময় লাগে (<1 মিনিট)। আমাদের সিকিউরিটি অডিট এবং পেন্টেস্টিং অফারের অধীনে, অ্যাস্ট্রার ইঞ্জিনিয়াররা নিরাপত্তাকে দুর্ভেদ্য করতে আপনার ওয়েবসাইটের দুর্বলতাগুলি খুঁজে পেতে এবং সংশোধন করতে কোডের প্রতিটি লাইন ম্যানুয়ালি স্ক্যান করে৷

PHP SQL ইনজেকশন:আপনার যা জানা দরকার

আজ একটি Astra ডেমো নিন!


  1. অ্যান্টিভাইরাস সম্পর্কে আপনার যা জানা দরকার

  2. 5G সম্পর্কে আপনার যা জানা দরকার

  3. BIM সম্পর্কে আপনার যা জানা দরকার

  4. বীকন প্রযুক্তি সম্পর্কে আপনার যা জানা দরকার