পিএইচপি সেশন আইডি কতটা অনন্য? আমি যে বিভিন্ন জিনিস পড়েছি তা থেকে আমি ধারণা পেয়েছি যে দু'জন ব্যবহারকারীর উপর একই সেশেনড না পেয়ে আমার উপর নির্ভর করা উচিত নয়। এটি কোনও জিইডি নয়?
উত্তর:
সেশন_আইডি প্রকৃতপক্ষে নকল করা যেতে পারে, তবে সম্ভাবনা খুব কম। যদি আপনার ন্যায্য ট্র্যাফিক সহ কোনও ওয়েবসাইট থাকে, তবে এটি আপনার ওয়েব সাইট লাইফে একবার ঘটতে পারে এবং কেবলমাত্র একটি ব্যবহারকারীকে এক সেশনের জন্য বিরক্ত করবে।
আপনি যদি খুব উচ্চ ট্রাফিক ওয়েবসাইট বা ব্যাংক শিল্পের জন্য কোনও পরিষেবা নির্মাণের প্রত্যাশা না করেন তবে এটি যত্ন করার মতো নয়।
পাঠানো হিসাবে এটি খুব অনন্য নয়। ডিফল্ট কনফিগারেশনে এটি গেটটাইমডে (যা ভয়ঙ্কর অনন্য নয়) এর ফলাফল সহ বিভিন্ন জিনিসের একটি হ্যাশের ফলাফল, তবে আপনি যদি উদ্বিগ্ন হন তবে আপনাকে / dev / urandom থেকে কিছু এনট্রপি আঁকার জন্য এটি কনফিগার করা উচিত, যেমন
ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");
"php_session_create_id" এ অনুসন্ধান কোড প্রকৃত অ্যালগরিদম তারা ব্যবহার করছেন জন্য।
যোগ করার জন্য সম্পাদিত: এখানে পিডের দ্বারা বর্ধিত একটি ডিএফএ র্যান্ডম-নম্বর জেনারেটর রয়েছে, ইউজিসে সময় মিশ্রিত। এটি বিশেষত সুরক্ষার দৃষ্টিকোণ থেকে দৃ firm় স্বতন্ত্রতার শর্ত নয় । উপরে এনট্রপি কনফিগারেশন ব্যবহার করুন।
হালনাগাদ:
পিএইচপি 5.4.0 সেশন হিসাবে। এন্ট্রপি_ফাইলে / ডিভ / ইউরানডম বা / ডিভ / আরেন্ডম যদি এটি উপলব্ধ থাকে তবে ডিফল্ট হয়। পিএইচপি 5.3.0 এ এই নির্দেশটি ডিফল্টরূপে খালি রেখে দেওয়া হয়েছে। পিএইচপি ম্যানুয়াল
যদি আপনি জানতে চান পিএইচপি কীভাবে ডিফল্টরূপে একটি সেশন আইডি উত্পন্ন করে গিথুবের উত্স কোডটি পরীক্ষা করে দেখুন । এটি অবশ্যই এলোমেলো নয় এবং এই উপাদানগুলির একটি হ্যাশ (ডিফল্ট: এমডি 5) এর উপর ভিত্তি করে (কোড স্নিপেটের লাইন 310 দেখুন):
যদি ওএসের একটি এলোমেলো উত্স উপলব্ধ থাকে তবে সেশন আইডি হওয়ার উদ্দেশ্যে উত্পন্ন আইডির শক্তি বেশি ( / দেব / ইউরেনডম এবং অন্যান্য ওএস র্যান্ডম উত্সগুলি (সাধারণত) ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত পিআরএনজি )। তবে যদি তা না হয় তবে এটি সন্তোষজনক।
সেশন সনাক্তকরণ উত্পাদন সহ লক্ষ্যটি হ'ল:
এটি পিএইচপি'র সেশন জেনারেশনের পদ্ধতির দ্বারা অর্জন করা হয়েছে।
আপনি একেবারে স্বতন্ত্রতার গ্যারান্টি দিতে পারবেন না , তবে একই হ্যাশকে দু'বার আঘাত করার সম্ভাবনাগুলি এত কম যে এটি সাধারণত বলছেন, উদ্বিগ্ন হওয়ার মতো নয়।
আপনি যদি আইডিটি উত্পন্ন করার পদ্ধতিটি কাস্টমাইজ করতে চান তবে এটি একটি ডিফল্টরূপে এমডি 5 এর মাধ্যমে তৈরি একটি 128 বিট নম্বর) হ্যাশ জেনারেশন ফাংশন ইনস্টল করতে পারেন। Http://www.php.net/manual/en/session.configration.php#ini.session.hash-function দেখুন
পিএইচপি সেশন সম্পর্কে আরও তথ্যের জন্য, এই দুর্দান্ত নিবন্ধটি http://shiflett.org/articles/the-truth-about-sessions চেষ্টা করুন যা সেশন স্থিরকরণ এবং হাইজ্যাক সম্পর্কিত অন্যান্য নিবন্ধগুলির সাথেও লিঙ্ক করে।
সেশন_আইডি এর আকার ধরে নিও যে সায়শন_আইডটি সমানভাবে বিতরণ করা হয়েছে এবং এর আকার = 128 বিট রয়েছে। ধরে নিন যে গ্রহের প্রত্যেকটি ব্যক্তি 1000 বছরের জন্য অবিরাম একটি নতুন অধিবেশন দিয়ে দিনে একবার লগ ইন করে।
num_sesion_ids = 1000*365.25 *7*10**9 < 2**36
collission_prob < 1 - (1-1/2**82)**(2**36) ≈ 1 - e**-(1/2**46)
≈ 1/2**46
সুতরাং এক বা একাধিক সংঘর্ষের সম্ভাবনা 70০ হাজার বিলিয়নে একেরও কম। সুতরাং সেশন_আইডির একটি 128-বিট-আকার যথেষ্ট বড় হওয়া উচিত। অন্যান্য মন্তব্যে যেমন উল্লেখ করা হয়েছে, সেশন_ম্যানেজার এটিও পরীক্ষা করতে পারে যে নতুন সেশন_আইড ইতিমধ্যে বিদ্যমান নেই।
এলোমেলোতার জন্য
আমি যে বড় প্রশ্নটি মনে করি তা হ'ল সেশন_আইডি: গুলি ভাল ছদ্ম এলোমেলোভাবে তৈরি করা হয়েছে কিনা। তারপরে আপনি কখনই নিশ্চিত হতে পারবেন না, তবে আমি এই উদ্দেশ্যে একটি সুপরিচিত, এবং ঘন ঘন ব্যবহৃত মান সমাধান ব্যবহার করার পরামর্শ দিচ্ছি (যেমন আপনি সম্ভবত ইতিমধ্যে করেছেন)।
এমনকি যদি চেক করার কারণে সংঘর্ষগুলি এড়ানো যায় তবে সেশন_আইডি-র আকার এবং এলোমেলোতা গুরুত্বপূর্ণ, যাতে হ্যাকাররা না পারেন, কোনওভাবেই যোগ্য অনুমান করতে এবং সক্রিয় সেশন_আইডি: এর সর্বাধিক সম্ভাবনার সাথে সন্ধান করুন।
আমি এ সম্পর্কে একটি নিশ্চিতকরণ খুঁজে পাইনি তবে আমি বিশ্বাস করি যে এই আইডিটি তৈরির আগে একটি সেশন আইডি ইতিমধ্যে উপস্থিত রয়েছে কিনা php চেক করে।
কেউ যখন সক্রিয় ব্যবহারকারীর সেশন আইডিটি খুঁজে পান তখন সেশন হাইজ্যাকিংয়ের বিষয়টি নিয়ে লোকেরা চিন্তিত। এটি বিভিন্নভাবে প্রতিরোধ করা যেতে পারে, আরও তথ্যের জন্য আপনি এই পৃষ্ঠাটি php.net এবং সেশন ফিক্সেশনে এই কাগজটি দেখতে পাবেন
না, সেশন আইডি কোনও জিআইডি নয়, তবে দু'জন ব্যবহারকারীর সার্ভারে যেমন সঞ্চিত থাকে তেমন সেশন আইডিটি পাওয়া উচিত নয়।
আপনি ডিএতে এএ ডিবি অনন্য ক্ষেত্র তৈরির সাথে বিভিন্ন সেশনটি সংরক্ষণ করতে পারেন; দুটিকে মার্জ করুন এবং এটি একটি সেশন ভেরিয়েবলে সংরক্ষণ করুন, তারপরে সেশন আইডির পরিবর্তে এটি পরীক্ষা করুন।
<?php
session_start();
$_SESSION['username']="username";
?>
<!DOCTYPE html>
<html>
<head>
<title>Update</title>
</head>
<body>
<table border="2">
<tr>
<th>Username</th>
<th>Email</th>
<th>Edit</th>
</tr>
<?php
$conn=mysqli_connect("localhost","root","","telephasic");
$q2="select * from register where username = '".$_SESSION['username']."'";
$run=mysqli_query($conn, $q2);
while($row=mysqli_fetch_array($run))
{
$name=$row[1];
$email=$row[2];
?>
<tr>
<td><?php echo $name; ?></td>
<td><?php echo $email; ?></td>
<td><a href="edit.php"> Edit </a></td>
</tr>
<?php } ?>
</table>
</body>
যদি আপনার ব্যবহারকারীর নামটি আলাদা বা অনন্য হয় তবে আপনি এই কোডটি সেশনের জন্য ব্যবহার করতে পারেন