পিএইচপি সেশন আইডিটি কতটা অনন্য


90

পিএইচপি সেশন আইডি কতটা অনন্য? আমি যে বিভিন্ন জিনিস পড়েছি তা থেকে আমি ধারণা পেয়েছি যে দু'জন ব্যবহারকারীর উপর একই সেশেনড না পেয়ে আমার উপর নির্ভর করা উচিত নয়। এটি কোনও জিইডি নয়?

উত্তর:


39

সেশন_আইডি প্রকৃতপক্ষে নকল করা যেতে পারে, তবে সম্ভাবনা খুব কম। যদি আপনার ন্যায্য ট্র্যাফিক সহ কোনও ওয়েবসাইট থাকে, তবে এটি আপনার ওয়েব সাইট লাইফে একবার ঘটতে পারে এবং কেবলমাত্র একটি ব্যবহারকারীকে এক সেশনের জন্য বিরক্ত করবে।

আপনি যদি খুব উচ্চ ট্রাফিক ওয়েবসাইট বা ব্যাংক শিল্পের জন্য কোনও পরিষেবা নির্মাণের প্রত্যাশা না করেন তবে এটি যত্ন করার মতো নয়।


4
আমি এমন সাইটগুলির রিপোর্ট শুনেছি যার সংঘর্ষের অনেক ঘটনা ঘটেছে।
কলিনম 3'12

20
প্রশ্নটি প্রায় 4 বছর আগে জিজ্ঞাসা করা হয়েছে। এটি জানতে আগ্রহী হবে যে সেশন আইডি অ্যালগোরিদম তখন থেকে কোনও উন্নতি করেছে ...
স্লিক

@ কলিনম: এবং এই সাইটগুলিতে 1 মিলিয়ন অনন্য দর্শক / দিন ছিল day
ই-সন্তুষ্ট

4
স্বতঃস্ফূর্তভাবে ব্যবহারকারীর দূরবর্তী ঠিকানা, স্থানীয় সময় এবং কিছু এলোমেলো সংখ্যার (এলসিজি) উপর এটি বর্তমানে ভিত্তিক (MD5 / SHA1 হ্যাশ) ভিত্তিক ।
ক্যারামিরিল

4
আমার মোবাইল ভাঙার দরকার নেই, মোবাইল ক্রমাগত নিজেকে ব্রেক করে। :)
হ্যাক্রে

67

পাঠানো হিসাবে এটি খুব অনন্য নয়। ডিফল্ট কনফিগারেশনে এটি গেটটাইমডে (যা ভয়ঙ্কর অনন্য নয়) এর ফলাফল সহ বিভিন্ন জিনিসের একটি হ্যাশের ফলাফল, তবে আপনি যদি উদ্বিগ্ন হন তবে আপনাকে / 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 এ এই নির্দেশটি ডিফল্টরূপে খালি রেখে দেওয়া হয়েছে। পিএইচপি ম্যানুয়াল


4
হ্যাঁ, যখন আমি কোনও ওয়েবসাইটের চুক্তি ছিলাম যে শত্রু যোদ্ধাদের এবং এরকমের বিরুদ্ধে আল্ট্রাসিকিউর হতে হয়েছিল, তখন আমি আসলে আমার নিজের সেশন হ্যান্ডলারটি তৈরি করেছি এবং এটিকে এন্টারোপি ডেটা সরাসরি এলোমেলো.org থেকে খাওয়াতাম। তবে সেই ব্যবস্থার অংশগুলি কেবল সবচেয়ে মারাত্মক মানুষের সাথে ডাকে / ;
থিওডোর আর স্মিথ

4
@ Thomas-জেনসেন, gettimeofday হয় UNIX টাইমস্ট্যাম্প ছাড়া এটা μsec (কখনও কখনও) প্রকাশ করেছে। উপরে লিঙ্কিত php_session_create_id পদ্ধতি পড়ুন।
djsadinoff

4
এনট্রপির দৈর্ঘ্য পরিবর্তন এলোমেলোভাবে উন্নতি করে তবে হ্যাশ এখনও একই দৈর্ঘ্য হওয়ায় সংঘর্ষের সম্ভাবনা উল্লেখযোগ্যভাবে প্রভাবিত করে না। যাইহোক, সেশন পরিবর্তন.হ্যাশ_ফাংশন আপনাকে উদাহরণস্বরূপ sha512 এর মতো দীর্ঘ হ্যাশ ব্যবহার করতে দেয় to
কলিনম

4
আমি এটি উদ্ভট মনে হয় যে সংঘর্ষ আছে। অবশ্যই এই আইডির অধীনে কোনও বৈধ সেশন রয়েছে কিনা এবং পরবর্তী সময়ে একটি আলাদা আইডি উত্পন্ন করছে কিনা তা খতিয়ে দেখার জন্য পিএইচপি করা উচিত
লূক

4
@ থিওডোর-আর-স্মিথ, প্রকাশ্যে উপলভ্য উত্স থেকে এনট্রপি নেওয়া সত্যিই খারাপ অভ্যাস। আপনার ধরে নেওয়া উচিত আপনার "শত্রু যোদ্ধারা" র্যান্ডম.আরজেও অ্যাক্সেস পেয়েছে ...
এভ্রি

12

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

  1. ক্লায়েন্টের আইপি ঠিকানা
  2. বর্তমান সময়
  3. পিএইচপি লিনিয়ার কনগ্রুয়েন্স জেনারেটর - একটি সিউডো এলোমেলো নম্বর জেনারেটর (পিআরএনজি)
  4. ওএস-নির্দিষ্ট এলোমেলো উত্স - যদি ওএসের একটি র্যান্ডম উত্স উপলব্ধ থাকে (যেমন / ডিভ / ইউরানডম)

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

সেশন সনাক্তকরণ উত্পাদন সহ লক্ষ্যটি হ'ল:

  1. একই মান সহ দুটি সেশন আইডি তৈরির সম্ভাবনা হ্রাস করুন
  2. এলোমেলো কী তৈরি করা এবং ব্যবহারের জন্য একটি হিট করতে কম্পিউটারকে খুব চ্যালেঞ্জিং করে তুলুন

এটি পিএইচপি'র সেশন জেনারেশনের পদ্ধতির দ্বারা অর্জন করা হয়েছে।

আপনি একেবারে স্বতন্ত্রতার গ্যারান্টি দিতে পারবেন না , তবে একই হ্যাশকে দু'বার আঘাত করার সম্ভাবনাগুলি এত কম যে এটি সাধারণত বলছেন, উদ্বিগ্ন হওয়ার মতো নয়।


11

আপনি যদি আইডিটি উত্পন্ন করার পদ্ধতিটি কাস্টমাইজ করতে চান তবে এটি একটি ডিফল্টরূপে এমডি 5 এর মাধ্যমে তৈরি একটি 128 বিট নম্বর) হ্যাশ জেনারেশন ফাংশন ইনস্টল করতে পারেন। Http://www.php.net/manual/en/session.configration.php#ini.session.hash-function দেখুন

পিএইচপি সেশন সম্পর্কে আরও তথ্যের জন্য, এই দুর্দান্ত নিবন্ধটি http://shiflett.org/articles/the-truth-about-sessions চেষ্টা করুন যা সেশন স্থিরকরণ এবং হাইজ্যাক সম্পর্কিত অন্যান্য নিবন্ধগুলির সাথেও লিঙ্ক করে।


4
সঠিক হতে, পিএইচপি 5.3 এর জন্য "সেশন.হ্যাশ_ফানশান = sha512" সেট করুন এবং 512 বিট হ্যাশ পর্যন্ত যান। এই কৌতুক করতে হবে। পূর্বনির্ধারিতগুলির সাথে, সংঘর্ষের ঘটনাটি হাই ট্রাফিক সাইটগুলিতে সাধারণ।
কলিনম

5


সেশন_আইডি এর আকার ধরে নিও যে সায়শন_আইডটি সমানভাবে বিতরণ করা হয়েছে এবং এর আকার = 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-বিট-আকার যথেষ্ট বড় হওয়া উচিত। অন্যান্য মন্তব্যে যেমন উল্লেখ করা হয়েছে, সেশন_ম্যানেজার এটিও পরীক্ষা করতে পারে যে নতুন সেশন_আইড ইতিমধ্যে বিদ্যমান নেই।

এলোমেলোতার জন্য
আমি যে বড় প্রশ্নটি মনে করি তা হ'ল সেশন_আইডি: গুলি ভাল ছদ্ম এলোমেলোভাবে তৈরি করা হয়েছে কিনা। তারপরে আপনি কখনই নিশ্চিত হতে পারবেন না, তবে আমি এই উদ্দেশ্যে একটি সুপরিচিত, এবং ঘন ঘন ব্যবহৃত মান সমাধান ব্যবহার করার পরামর্শ দিচ্ছি (যেমন আপনি সম্ভবত ইতিমধ্যে করেছেন)।

এমনকি যদি চেক করার কারণে সংঘর্ষগুলি এড়ানো যায় তবে সেশন_আইডি-র আকার এবং এলোমেলোতা গুরুত্বপূর্ণ, যাতে হ্যাকাররা না পারেন, কোনওভাবেই যোগ্য অনুমান করতে এবং সক্রিয় সেশন_আইডি: এর সর্বাধিক সম্ভাবনার সাথে সন্ধান করুন।


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

আসলে কোন অনুমান নেই। উপরের গণনাটি একটি সরল অনুমান, যেখানে আমরা অনুমান করি যে সেশন_আইডি এনআর i এর জন্য একটি সংঘর্ষের সম্ভাবনা = = 1/2 82 (এটি = টাইপো হলেও 1/2 92 হওয়া উচিত )। বাস্তবে সম্ভাব্যতা (i-1) / 2 128 যতক্ষণ না পূর্বের কোনও সংঘর্ষ ঘটেছে। 1/2 92 কেবলমাত্র শেষ সেশন_আইডির জন্য।
মিঃজে

3

আমি এ সম্পর্কে একটি নিশ্চিতকরণ খুঁজে পাইনি তবে আমি বিশ্বাস করি যে এই আইডিটি তৈরির আগে একটি সেশন আইডি ইতিমধ্যে উপস্থিত রয়েছে কিনা php চেক করে।

কেউ যখন সক্রিয় ব্যবহারকারীর সেশন আইডিটি খুঁজে পান তখন সেশন হাইজ্যাকিংয়ের বিষয়টি নিয়ে লোকেরা চিন্তিত। এটি বিভিন্নভাবে প্রতিরোধ করা যেতে পারে, আরও তথ্যের জন্য আপনি এই পৃষ্ঠাটি php.net এবং সেশন ফিক্সেশনে এই কাগজটি দেখতে পাবেন


4
... তবে আপনি যদি বেশ কয়েকটি ব্যাংকে কেবল একটি পিএইচপি সার্ভার হন তবে স্যাসিওনআইডি এখনও ব্যবহৃত হয়েছে কিনা তা জানার জন্য সার্ভারের পর্যাপ্ত জ্ঞান রয়েছে কিনা তার কোনও গ্যারান্টি নেই।
djsadinoff

আমি 2 টি আলাদা আলাদা পিএইচপি সার্ভারে একই সেশনের আইডি পেয়েছি তা কেন ব্যাপার? 2 টি আলাদা ডোমেন ধরে, সেশনের কুকি প্রতিটি ডোমেইন থেকে কেবল অ্যাক্সেসযোগ্য ...?
ডেরিমন

4
মাল্টি-সার্ভার পরিবেশে দ্বিধা রোধ করার সহজতম উপায় হ'ল মেমক্যাচড সেশন হ্যান্ডলারের মাধ্যমে সেশনগুলি মেমচেচে সংরক্ষণ করা। সমস্যার সমাধান হয়েছে এবং আপনার ব্যবহারকারীরা ডাব্লু / ও তাদের স্টাফগুলি হারাতে বিভিন্ন সার্ভারের কাছাকাছি আসতে পারেন।
থিওডোর আর স্মিথ

@ ডারেমন তিনি একটি ডোমেনের জন্য একাধিক সার্ভারের কথা বলছেন।
জিটিডি

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

2

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


4
সম্ভবত সার্ভার-সাইড স্টোরেজ কোনওভাবেই স্বতন্ত্রতার গ্যারান্টি দেয় না। স্বতন্ত্রতা একটি জিনিস - যদি সংঘর্ষ হয় তবে এটি সেশনটি কোথায় সংরক্ষণ করা হবে তা নির্বিশেষে এটি সংঘর্ষ করবে।

আমার দ্বারা নয়, আমি আপনার প্রতিক্রিয়ার (পাশাপাশি অন্যদের) প্রশংসা করি। - জলভ
জলভ

4
সেশন আইডি সার্ভার এবং ক্লায়েন্ট উভয় পক্ষেই সংরক্ষণ করা হয়। সেশনের সামগ্রীগুলি সার্ভারের পাশেই সঞ্চিত থাকে। এবং সত্যটি বেশ সেশন আইডির স্বতন্ত্রতার সাথে সম্পর্কিত নয়।
যুধিবিদিতাম

0

আপনি ডিএতে এএ ডিবি অনন্য ক্ষেত্র তৈরির সাথে বিভিন্ন সেশনটি সংরক্ষণ করতে পারেন; দুটিকে মার্জ করুন এবং এটি একটি সেশন ভেরিয়েবলে সংরক্ষণ করুন, তারপরে সেশন আইডির পরিবর্তে এটি পরীক্ষা করুন।


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

@ নোহবয়েগলি অন্যান্য সমাধান আরও জটিল পদ্ধতিতে পরামর্শ দিয়েছেন।
ক্ষতিকর

-4
<?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>

যদি আপনার ব্যবহারকারীর নামটি আলাদা বা অনন্য হয় তবে আপনি এই কোডটি সেশনের জন্য ব্যবহার করতে পারেন

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