ঠিক আছে, দুটি পৃথক তবে সম্পর্কিত সমস্যা আছে এবং প্রতিটি পৃথকভাবে পরিচালনা করা হয়।
সেশন স্থিরকরণ
এখানেই কোনও আক্রমণকারী কোনও ব্যবহারকারীর জন্য একটি সেশনের সেশন সনাক্তকারীকে স্পষ্টভাবে সেট করে। সাধারণত পিএইচপি-তে এটি একটি ইউআরএল দেওয়ার মতো করে সম্পন্ন হয় http://www.example.com/index...?session_name=sessionid
। একবার আক্রমণকারী ক্লায়েন্টকে url দেয়, আক্রমণটি একটি সেশন হাইজ্যাকিং আক্রমণ হিসাবে সমান same
অধিবেশন নির্ধারণের কয়েকটি উপায় রয়েছে (সেগুলি সব করুন):
session.use_trans_sid = 0
আপনার php.ini
ফাইল সেট করুন। এটি পিএইচপি কে ইউআরএলটিতে সনাক্তকারী অন্তর্ভুক্ত না করার এবং সনাক্তকারীদের জন্য ইউআরএল না পড়তে বলবে tell
session.use_only_cookies = 1
আপনার php.ini
ফাইল সেট করুন। এটি পিএইচপি কে সেশন শনাক্তকারীদের সাথে কখনও ইউআরএল ব্যবহার করতে বলবে।
সেশনের স্থিতি পরিবর্তনের সময় সেশন আইডি পুনরায় তৈরি করুন। এর অর্থ নীচের যে কোনও একটি:
- ব্যবহারকারী প্রমাণীকরণ
- সেশনে সংবেদনশীল তথ্য সংরক্ষণ করা হচ্ছে
- অধিবেশন সম্পর্কে কিছু পরিবর্তন
- ইত্যাদি ...
সেশন হাইজ্যাকিং
এই স্থানে আক্রমণকারী একটি সেশন শনাক্তকারীকে ধরে রাখে এবং অনুরোধগুলি প্রেরণ করতে সক্ষম হয় যেন তারা সেই ব্যবহারকারী। এর অর্থ হ'ল যেহেতু আক্রমণকারীর শনাক্তকারী রয়েছে তাই তারা সার্ভারের সাথে বৈধ ব্যবহারকারীর কাছ থেকে পৃথক পৃথক।
আপনি সরাসরি সেশন হাইজ্যাকিং প্রতিরোধ করতে পারবেন না। তবে এটি ব্যবহার করা খুব কঠিন এবং আরও শক্ত করার জন্য আপনি পদক্ষেপ রাখতে পারেন।
একটি শক্তিশালী অধিবেশন হ্যাশ শনাক্তকারী ব্যবহার করুন: session.hash_function
মধ্যে php.ini
। যদি পিএইচপি <5.3, এটি session.hash_function = 1
SHA1 এর জন্য সেট করুন । যদি পিএইচপি> = 5.3 হয় তবে এটিকে সেট করুন session.hash_function = sha256
বা session.hash_function = sha512
।
একটি শক্তিশালী হ্যাশ পাঠান: session.hash_bits_per_character
ইন php.ini
। এটি সেট করুন session.hash_bits_per_character = 5
। যদিও এটি ক্র্যাক করা আরও কঠিন করে তোলে না, আক্রমণকারী যখন সেশন শনাক্তকারীটি অনুমান করার চেষ্টা করে তখন কিছুটা পার্থক্য আসে। আইডিটি ছোট হবে, তবে আরও অক্ষর ব্যবহার করবে।
আপনার ফাইলের সাথে session.entropy_file
এবং একটি অতিরিক্ত এনট্রপি সেট করুন। উদাহরণস্বরূপ, এনট্রপি ফাইল থেকে পড়া হবে এমন বাইটের সংখ্যার জন্য পূর্বের এবং পরবর্তীটি সেট করুন ।session.entropy_length
php.ini
session.entropy_file = /dev/urandom
session.entropy_length = 256
ডিফল্ট PHPSESSID থেকে সেশনের নাম পরিবর্তন করুন। এটি কল session_name()
করার আগে প্রথম প্যারামিটার হিসাবে আপনার নিজের সনাক্তকারী নাম দিয়ে কল করার মাধ্যমে সম্পন্ন হয় session_start
।
আপনি যদি সত্যিই অচল হয়ে পড়ে থাকেন তবে আপনি সেশনটির নামটিও ঘোরান could তবে আপনার ব্যবহারের উপর নির্ভর করে এটি একটি বিকল্প হতে পারে ...
আপনার সেশন সনাক্তকারীটি প্রায়শই ঘোরান। আমি এই প্রতিটি অনুরোধটি করব না (যদি না আপনার সত্যিকারের সেই স্তরের সুরক্ষা প্রয়োজন হয়) তবে এলোমেলো ব্যবধানে। আপনি এটি প্রায়শই পরিবর্তন করতে চান যেহেতু কোনও আক্রমণকারী যদি একটি সেশন হাইজ্যাক করে তবে আপনি চান না যে তারা এটিকে খুব বেশি দিন ব্যবহার করতে সক্ষম হবেন।
সেশন থেকে ব্যবহারকারী এজেন্ট$_SERVER['HTTP_USER_AGENT']
অন্তর্ভুক্ত করুন । মূলত, যখন সেশন শুরু হয়, তখন এটি এমন কোনও কিছুতে সঞ্চয় করুন $_SESSION['user_agent']
। তারপরে, প্রতিটি পরবর্তী অনুরোধে এটি মিলছে কিনা তা পরীক্ষা করে দেখুন। নোট করুন যে এটি নকল হতে পারে তাই এটি 100% নির্ভরযোগ্য নয়, তবে এটির চেয়ে ভাল।
সেশনে ব্যবহারকারীর আইপি ঠিকানা$_SERVER['REMOTE_ADDR']
অন্তর্ভুক্ত করুন । মূলত, যখন সেশন শুরু হয়, তখন এটি এমন কোনও কিছুতে সঞ্চয় করুন $_SESSION['remote_ip']
। এটি এমন কিছু আইএসপি থেকে সমস্যাযুক্ত হতে পারে যা তাদের ব্যবহারকারীদের জন্য একাধিক আইপি ঠিকানা ব্যবহার করে (যেমন এওএল করত ব্যবহৃত)। তবে আপনি যদি এটি ব্যবহার করেন তবে এটি অনেক বেশি সুরক্ষিত হবে। কোনও আক্রমণকারীর আইপি ঠিকানাকে নকল করার একমাত্র উপায় হ'ল আসল ব্যবহারকারী এবং আপনার মধ্যে নেটওয়ার্কের মধ্যে কিছু সময় আপস করা। এবং যদি তারা নেটওয়ার্কের সাথে আপস করে তবে তারা ছিনতাইয়ের চেয়েও খারাপ করতে পারে (যেমন এমআইটিএম আক্রমণ ইত্যাদি)।
আপনি বৃদ্ধি এবং প্রায়শই তুলনা করে অধিবেশন এবং ব্রাউজারগুলির পাশে একটি টোকেন অন্তর্ভুক্ত করুন। মূলত, প্রতিটি অনুরোধের জন্য $_SESSION['counter']++
সার্ভারের পাশে করুন। ব্রাউজারগুলির পাশের জেএসেও কিছু করুন (স্থানীয় সঞ্চয়স্থান ব্যবহার করে)। তারপরে, আপনি যখন কোনও অনুরোধ প্রেরণ করবেন, কেবল একটি টোকেনের নোকস নিন এবং যাচাই করুন যে সার্ভারে ননসটি একই the এটি করে আপনি হাইজ্যাক হওয়া অধিবেশনটি সনাক্ত করতে সক্ষম হবেন কারণ আক্রমণকারীটির সঠিক কাউন্টারটি নেই, বা যদি তাদের কাছে আপনার কাছে একই গণনা প্রেরণকারী 2 টি সিস্টেম রয়েছে এবং একটি জাল হয়েছে তা বলতে পারেন। এটি সমস্ত অ্যাপ্লিকেশনগুলির জন্য কাজ করবে না, তবে সমস্যাটির বিরুদ্ধে লড়াইয়ের একটি উপায়।
দুজনের একটি নোট
সেশন ফিক্সেশন এবং হাইজ্যাকিংয়ের মধ্যে পার্থক্যটি কেবলমাত্র সেশন সনাক্তকারীকে আপোস করা হয় সে সম্পর্কে about স্থিরকরণে, শনাক্তকারী এমন একটি মানতে সেট করা থাকে যা আক্রমণকারীর হাতের আগে জেনে যায়। হাইজ্যাকিংয়ে এটি ব্যবহারকারীর কাছ থেকে অনুমান করা বা চুরি করা হয়। অন্যথায় দু'জনের প্রভাব একই সাথে শনাক্তকারীকে আপোস করা হয়।
সেশন আইডি পুনর্জন্ম
আপনি যখনই session_regenerate_id
পুরানো সেশনটি ব্যবহার করে সেশন আইডেন্টিফায়ারটি পুনরায় জেনারেট করে মুছে ফেলা উচিত। মূল সেশন হ্যান্ডলারের সাথে এটি স্বচ্ছভাবে ঘটে। তবে কিছু কাস্টম সেশন হ্যান্ডলারগুলি এটি ব্যবহার করেsession_set_save_handler()
না এবং এটি পুরানো সেশন শনাক্তকারীদের আক্রমণ করার জন্য উন্মুক্ত। নিশ্চিত হয়ে নিন যে আপনি যদি কাস্টম সেশন হ্যান্ডলারটি ব্যবহার করছেন, আপনি যে শনাক্তকারীটি খোলেন তার উপর নজর রাখেন এবং যদি আপনি এটি সংরক্ষণ না করেন তবে আপনি সেই স্পষ্টতই পুরানোটির শনাক্তকারীটিকে মুছে ফেলা (বা পরিবর্তন) করতে পারবেন।
ডিফল্ট সেশন হ্যান্ডলারটি ব্যবহার করে, আপনি কেবল কল করেই ঠিক আছেন session_regenerate_id(true)
। এটি আপনার জন্য পুরানো সেশনের তথ্য সরিয়ে দেবে। পুরানো আইডি আর বৈধ নয় এবং যদি আক্রমণকারী (বা অন্য কোনও ব্যক্তি) এটি ব্যবহার করার চেষ্টা করে তবে একটি নতুন অধিবেশন তৈরির কারণ ঘটবে। কাস্টম সেশন হ্যান্ডলারগুলির সাথে সতর্ক থাকুন যদিও ....
একটি অধিবেশন ধ্বংস
আপনি যদি কোনও সেশন নষ্ট করতে চলেছেন (উদাহরণস্বরূপ লগআউটে), নিশ্চিত হয়ে নিন যে আপনি এটি পুঙ্খানুপুঙ্খভাবে ধ্বংস করেছেন। এর মধ্যে কুকিকে আনসেট করা অন্তর্ভুক্ত। ব্যবহার session_destroy
:
function destroySession() {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
session_destroy();
}