কখন এবং কেন আমার সেশন_জেনারেট_আইডি () ব্যবহার করা উচিত?


96

session_regenerate_id()পিএইচপি-তে আমি কখন এবং ফাংশনটি ব্যবহার করব ? আমি সবসময় ব্যবহার করার পরে এটি ব্যবহার করা উচিত session_start()? আমি পড়েছি যে সেশন ফিক্সেশন প্রতিরোধের জন্য আমাকে এটি ব্যবহার করতে হবে, এটি কি একমাত্র কারণ?


কারণ সেশন শুরুর পরে তৈরি হয় এবং অন্য পৃষ্ঠায় আপনি যখন সেশন শুরু করেন তখন ভেরিয়েবলগুলি উপস্থিত থাকে: -
এইআরএসএইচ

@ হারআরএস ওও? সেশন_রেনারেট_আইডি পুরানো সেশন আইডিটি সরিয়ে দেয় এবং উদাহরণস্বরূপ এক্সএসএসের মাধ্যমে সেশন হাইজ্যাক করা এড়াতে একটি নতুন তৈরি করে। এটি অন্যান্য নথিতে SESSION ভেরিয়েবলের দৃশ্যমানতার উপর কোনও প্রভাব ফেলবে না।
জাটেনিভ

হ্যাঁ আমি জানি যে আমার অন্যান্য ভেরিয়েবলের উপর আমার কোনও প্রভাব নেই তবে আপনি যদি সেখানে পৃষ্ঠায় সেশন শুরু না করেন তবে ভেরিয়েবলটি মূল পিএইচপি তে সেই পৃষ্ঠায় উপস্থিত না থাকে
এইআরআরএসএইচ


উত্তর:


98

কী session_regenerate_id()?

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

এটার কাজ কি?

এটি মূলত সেশন স্থিরকরণ আক্রমণ প্রতিরোধে সহায়তা করে। সেশন ফিক্সেশন আক্রমণগুলি যেখানে একটি দূষিত ব্যবহারকারী অন্য ব্যবহারকারীর সেশন আইডি (এসআইডি) ফিক্সেট (সেট) করার সিস্টেমে দুর্বলতা কাজে লাগানোর চেষ্টা করে। এটি করার মাধ্যমে, তারা আসল ব্যবহারকারী হিসাবে সম্পূর্ণ অ্যাক্সেস পাবেন এবং এমন কাজগুলি করতে সক্ষম হবেন যা অন্যথায় প্রমাণীকরণের প্রয়োজন হবে।

এই জাতীয় আক্রমণ প্রতিরোধ করতে, ব্যবহারকারী session_regenerate_id()যখন সফলভাবে সাইন ইন করেন (বা প্রতিটি এক্স অনুরোধের জন্য) ব্যবহার করে একটি নতুন সেশন আইডি নির্ধারণ করুন । এখন কেবলমাত্র তার সেশন আইডি রয়েছে এবং আপনার পুরানো (স্থির) সেশন আইডি আর বৈধ নয়।

আমার কখন ব্যবহার করা উচিত session_regenerate_id()?

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

আরও পড়া:


4
এবং হ্যাকার 20 তম কল করলে কী সংযোজন হয়? সেশন আইডি পরিবর্তন করা হয়েছে এবং তিনিই একমাত্র অধিবেশনটির মালিক;))
ফ্রেড 727

@ ফ্রেড 7 If7 হ্যাকার যদি 20 তম কলটিতে যথেষ্ট ভাগ্যবান হয় তবে ব্যবহারকারীর একটি অবৈধ আইডি থাকবে এবং এটি আর প্রমাণীকৃত হবে না। হ্যাকার এবং ব্যবহারকারীর উভয়ই পুনর্জন্ম ছাড়া প্রমাণীকরণ করা হবে।
ব্র্যাডমেজ 24'16

সেশনে সংবেদনশীল তথ্য সংরক্ষণ করার সময় সেশন_রেজেনেরেট_আইড কল করাও দরকারী হতে পারে (কেবলমাত্র প্রমাণীকরণের ট্যানিশনে নয়)
অ্যাডাম

সেশনের তথ্য কোনও কুকিতে না থাকলে সেশনটি স্থির করা সম্ভব? আমি আমার সার্ভারে ফাইলগুলিতে সেশন তথ্য সংরক্ষণ করছি, আইডিটি পুনরায় জেনারেট করার দরকার কি?
গনজালো

"অন্য ব্যবহারকারীর সেশন আইডি (এসআইডি) স্থির করার জন্য" .... এটি ব্যবহারকারীর কম্পিউটারে একটি সেশন আইডি (এসআইডি) ফিক্সেট (সেট) করার জন্য "দিয়ে প্রতিস্থাপন করা উচিত, তারপরে এটি সত্যায়িত হওয়ার পরে এটি ব্যবহার করুন "
অ্যাকাউন্টেন্ট

25

সেশন হাইজ্যাকিং এবং সেশন স্থিরকরণsession_regenerate_id() বন্ধ করার জন্য আপনার ব্যবহার করা উচিত ।

থেকে এই Security.SE উত্তর :

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

এই ওয়েবপৃষ্ঠা থেকে :

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

কখন ব্যবহার করতে হবে

যখন ব্যবহারকারী কোনও গুরুত্বপূর্ণ ইনপুটগুলি সম্পাদনা / আপডেট করছেন (পাসওয়ার্ড, শংসাপত্রগুলি, ভুলে গেছেন পাসওয়ার্ড ইত্যাদি) যা সাইটের সুরক্ষা বা গোপনীয়তা নীতিতে আপস করতে পারে।

আরো দেখুন:

পিএইচপি সুরক্ষা গাইড: সেশনস

সেশন স্থিরকরণ (চমৎকার পড়ে)


22

আমি মনে করি সেশন বিষের বিষয়টি বেশ ভালভাবে কভার করা হয়েছে।

"আমাকে কখন এটি ব্যবহার করা উচিত?" অংশ, পিছনে পদক্ষেপ এবং আপনার অ্যাপ্লিকেশনটি অধিবেশন দিয়ে কী করছে তা বিবেচনা করা গুরুত্বপূর্ণ অথবা, এটি অন্য কোনও উপায়ে বলতে গেলে, আপনার উত্তর দেওয়া দরকার এমন এটিই মূল সুরক্ষা প্রশ্ন

কেউ যদি এই অধিবেশন ধরে রাখে তবে তারা কী লাভ করবে?

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

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

যে কোনও সময় আমরা একটি সেশনে সমালোচনামূলক ডেটা যুক্ত করি আপনার সেশন আইডিটি পুনরায় তৈরি করা বিবেচনা করা উচিত। যদি আপনাকে স্থির বিরুদ্ধে আপনার আবেদনটি শক্ত করতে হয় তবে একটি এলোমেলো পুনর্জন্ম কার্যকর হতে পারে তবে আমি প্রতিটি অনুরোধে পুনরুত্থান করতে চাই না। ডিফল্টরূপে পিএইচপি স্থানীয় ডিস্কে ফাইলগুলিতে সেশনগুলি সঞ্চয় করে। তুলনামূলকভাবে ছোট আক্রমণকারীর ভেক্টরটি হ্রাস করতে আপনি প্রচুর ডিস্ক আই / ও যুক্ত করছেন। আপনার যদি সত্যিই আরও সুরক্ষার প্রয়োজন হয় তবে আমি নিয়মিত ভিত্তিতে পুনরায় জন্মানোর সময় পুরো এইচটিটিপিএসে যাওয়ার পরামর্শ চাই (এইচটিটিপিএস স্থিরকরণটি খুব শক্ত করে তোলে)।


4
এইচটিটিপিএস স্থিরকরণের ক্ষেত্রে কোনও পরিবর্তন করে না।
কেলুনিক

4
তবে এটি স্নিফিং আক্রমণগুলিকে আরও শক্ত করে তোলে যা সেশন আইডি প্রথম স্থানে পেতে ব্যবহৃত হতে পারে।
demkoryu

আমার পিএইচপি অ্যাপটি সেকেন্ডের মধ্যেই লগ আউট করে, পুনর্জন্মটি ব্যবহার করছি, সেশন ফাইলগুলির সীমাবদ্ধতা তৈরি করা যেতে পারে বা পুনর্জাত আইডির কোনও সীমা আছে যা লগআউটের কারণ হতে পারে?
sqlchild

সাধারণত না, না। আপনি এটি সম্পর্কে একটি পৃথক প্রশ্ন পোস্ট করতে চাইতে পারেন
মাচাভিটি

17

আমি কেন ব্যবহার করব session_regenerate_id?

সেশন স্থিরকরণ রোধ করতে আপনার এটি ব্যবহার করা উচিত ।

আমার কখন ব্যবহার করা উচিত session_regenerate_id?

যখনই প্রমাণীকরণের স্থিতি পরিবর্তন হয়, এটি মূলত লগইন এবং লগআউটে থাকে।

উদাহরণ

বব একটি পাবলিক কম্পিউটারে বসে এবং স্ট্যাকওভারফ্লো ডট কম ব্রাউজ করে তিনি সেখানে একটি নতুন অধিবেশন খুললেন। সেশন আইডি একটি কুকিতে সংরক্ষণ করা হয় ( httpOnlyজাভাস্ক্রিপ্টের মাধ্যমে অ্যাক্সেস রোধ করতে পতাকা সহ )। আসুন কল্পনা করুন স্ট্যাক ওভারফ্লোতে এইচটিটিপিএস সর্বদা সক্ষম ছিল এবং secureকুকির জন্য পতাকা সেটও ছিল।

এখন কীভাবে আমরা অধিবেশন চুরি করতে পারি?

সেশন আইডি লিখেছেন বব। সে ব্রাউজারটি বন্ধ না করেই কম্পিউটারটি ছেড়ে দেয়। এখন অ্যালিস এই কম্পিউটারে এসে স্ট্যাক ওভারফ্লো ইতিমধ্যে লোড হওয়া দেখেছে। সে এখন লগ ইন করে।

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


কিন্তু session_regenerate_id()জারি করা অবধি , অ্যালিস ববসের অ্যাকাউন্টে অ্যাক্সেস করতে পারবে? এটা কি সঠিক?
আকাম

4
@ কাকাম - দেরি হয়ে গেছে, তবে সাড়া দেওয়ার মতো মূল্য ... ১. বব লগ আউট করেন না, অ্যালিস তার লগইনটি ব্যবহার করতে পারে - ২.বব লগ আউট করে, অ্যালিস লগ ইন করে না, অ্যালিস তার সেশন আইডি ব্যবহার করতে পারে তবে তার ডেটা অ্যাক্সেস করার জন্য কোনও সক্রিয় লগইন নেই - ৩. বব লগ আউট করে, এলিস লগ ইন করে, বব সেশন আইডি ব্যবহার করে, একটি সক্রিয় লগইন আছে, বব অ্যালিসের ডেটা অ্যাক্সেস করে। তবে সুনির্দিষ্টভাবে বলা যায়: স্ক্রিপ্টগুলির সুরক্ষার উপর নির্ভর করে সেশন আইডি অগত্যা আপনি লগ আউট ব্যবহারকারীর ডেটা অ্যাক্সেস করতে পারবেন না, তবে সাধারণভাবে বলা হয় এটি একটি সম্ভাব্য এবং উচ্চ ঝুঁকিপূর্ণ।
কোডক্যান্ডিস

15

আপনি এটি আরও ভাল সুরক্ষার জন্য ব্যবহার করতে পারেন।

এইভাবে আপনি এক সময় ব্যবহারের জন্য সেশন আইডি তৈরি করছেন।

আপনার ব্যবহারকারী সেশন আইডি = 3 বলতে দেয়

কিছু হ্যাকার আপনাকে ক্লায়েন্ট হ্যাক করেছে এবং তাদের সেশন_আইডি পেয়েছে। সুতরাং হ্যাকার তাদের সেশনটি ব্যবহার করতে সেই কুকিটি ব্যবহার করতে পারে।

আপনার মত কোড থাকলে

session_start();
session_regenerate_id();

আপনি যখন আপনার ওয়েবসাইটটি ব্যবহার করছেন তখন আপনি তাদের সেশনটি পরিবর্তন করতে পারবেন।

এখন হ্যাকার সেশনড = 3 পেয়েছে

তিনি আপনার ব্যবহারের পরে সেশন পরিবর্তন করেছেন

ব্যবহারকারীর সেশনেশন = 4 // লেখক রয়েছে

হ্যাকারের সেশন = 3 // নাল

তবে এখানে একটি সামান্য বিন্দু রয়েছে যে আপনি পুনর্জন্মের পদ্ধতিটি ব্যবহার করছেন এবং আপনার ক্লায়েন্ট কেবল ওয়েবসাইটটিতে লগইন করেছেন এবং ব্রাউজারটি বন্ধ করুন বা নিষ্ক্রিয় করেছেন। আপনার ক্লায়েন্টের সেশনড = 4 রয়েছে এবং যদি হ্যাকার সেই অংশে কুকি পেয়ে থাকে তবে তাদের একই সেশনেশন থাকবে।

উপরে বর্ণিত হিসাবে আপনি এইভাবে আপনার ক্লায়েন্টকে এক উপায়ে ডেটা সান্ফিং থেকে রক্ষা করতে পারেন, তবে এটি এখনও এই সমস্যার সমাধান করবে না।

আপনি যদি এসএসএল এনক ব্যবহার করেন তবে এটি বেশ সুরক্ষিত হবে।

খারাপ ইংরাজির জন্য দুঃখিত


12

একটি সাধারণ ব্যবহারের কেস:

// User visits a webshop
$shopcart = new Cart();

একটি সেশন শুরু হয় এবং ডাটাবেসে একটি এন্ট্রি করা হয়। ব্যবহারকারীর শপকার্টটি তার সেশন আইডি দ্বারা চিহ্নিত করা হয়।

// User orders items
$shopcart->add('123', 20);
$shopcart->add('124', 18);
$shopcart->add('127', 5);

যুক্ত প্রতিটি পণ্যের জন্য, আমার শপকার্টের টেবিলে একটি রেকর্ড তৈরি করা হয়। সেশন আইডি দ্বারা চিহ্নিত।

// User saves cart in order to use it later
$shopcart->save();

ব্যবহারকারী তার কার্ট সংরক্ষণ করার সিদ্ধান্ত নিয়েছে। এটি এখন তার ব্যবহারকারী আইডিতে সংযুক্ত করা হচ্ছে।

// Regenerate session id for user to be able to make a new cart
session_regenerate_id();

স্যাসিশন আইডিটি নতুনভাবে তৈরি করা হয়েছে এবং ব্যবহারকারী এখন অন্য শপকার্ট তৈরি শুরু করতে পারেন start


4

সেশন_রেজেনারেটে_আইডি (): সেশন আইডি পুনঃজেনার করা যায় না - সেশনটি সক্রিয় নয়

if(session_status() == PHP_SESSION_ACTIVE)
{
    session_regenerate_id();
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.