সার্ভার লেখার সময় লগইন এবং গেম লজিককে কীভাবে ভাগ করবেন?


9

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


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

আপনি একটি বিভ্রান্তিমূলক উত্তর গ্রহণ করেছেন, আপনার সেই সাবধানতার সাথে পুনর্বিবেচনা করা উচিত, অথবা আপনি আপনার মাথার মধ্যে ভুল ধারণা এবং আপনার কোডটিতে সুরক্ষনের একটি মিথ্যা ধারণা নিয়ে শেষ করবেন।
o0 '

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

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

উত্তর:


3

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

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

এটি কাজ করে কারণ:

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

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

যে কোনও সুরক্ষা ওরিয়েন্টেড হ্যাশিংয়ের মতো, আপনি পেতে পারেন এমন সেরা হ্যাশ ফাংশনটি ব্যবহার করুন - এই মুহুর্তে লোকেরা bcrypt, PBKDF2, এবং স্ক্রিপ্ট পছন্দ করতে পারে - এবং নিশ্চিত করুন যে আপনার গোপন কীটি দীর্ঘস্থায়ী যাতে নিষ্ঠুর বল প্রজননকে আরও কম ব্যবহারিক করে তোলা যায়।


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

এটি কার্যকর হয় না, বা এটি আসলে ফিলিপের উত্তরের একটি লুকানো পুনঃ-বাস্তবায়ন। এটি ব্যর্থ হয়েছে কারণ এটি ধরে নিয়েছে যে লগইন সার্ভার এবং গেম সার্ভার উভয়ই সেই একই গোপন কীটি জানে। যদি তারা উভয়ই কীটি জানেন তবে তাদের মধ্যে একজনকে এটি সরবরাহ করতে অন্যের সাথে যোগাযোগ করতে হবে। অথবা এটি উভয়কেই প্রেরণের জন্য আপনার কোনও তৃতীয় পক্ষের প্রয়োজন। যেভাবেই হোক, এটি আগের মতো স্নিগ্ধ।
o0 '

@ লোহরিস, ধারণাটি হ'ল আপনি লগইন এবং গেম সার্ভার উভয়েরই মালিক এবং এটি গোপন কী সরবরাহ করতে পারেন। যদি আপনি উভয় সার্ভারের মালিক না হন তবে কীভাবে গেম সার্ভার লগইন সার্ভারের প্রমাণীকরণকে বিশ্বাস করতে পারে?
কাইলোটন

@ ইউজার 342580: আমি কোনও ধরণের দীর্ঘ বাক্যাংশ ব্যবহার করব। এটি ব্যবহারকারীর প্রতি পৃথক হতে হবে না, তবে এটি যদি হয় তবে তা ক্ষতি করবে না। যতক্ষণ না ক্রিপ্টো হ্যাশ ফাংশন যথেষ্ট শক্তিশালী হয় এবং আপনি পর্যায়ক্রমে এটি পরিবর্তন করেন তা বিবেচনা করা উচিত নয়।
কাইলোটন

@ কাইলোটন ঠিকঠাক, এবং আপনি কীভাবে তাদের কী সরবরাহ করবেন? আপনি কেন সার্ভার থেকে সার্ভারের থেকে সার্ভারের সাথে সংযোগটি আরও সুরক্ষিত বিবেচনা করবেন?
o0 '

8
  1. ব্যবহারকারী নিজেকে লগইনসভারে প্রমাণীকরণ করার পরে, এটি একটি টোকেন দিন (একটি অনন্য, এলোমেলোভাবে উত্পন্ন স্ট্রিংটি অনুমান করার জন্য খুব দীর্ঘ)।

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

  3. টোকেন এবং গেমসভারের হোস্টনাম ক্লায়েন্টকে প্রেরণ করুন। তারপরে এটি লগইন সার্ভার থেকে সংযোগ বিচ্ছিন্ন করুন।

  4. ক্লায়েন্ট তার গেমসভারের সাথে তার ব্যবহারকারীর নাম এবং টোকেনের সাথে সংযোগ স্থাপন করে।

  5. যখন ক্লায়েন্টের কাছ থেকে টোকেনটি লগইনসভারের দ্বারা সবেমাত্র রিপোর্ট করা একটিটির সাথে মিলে যায়, আপনি এটি গ্রহণ করেন।

নোট করুন যে এটি সুরক্ষিত হওয়ার জন্য, টোকেনগুলি একটি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত এলোমেলো সংখ্যা জেনারেটর থেকে তৈরি করা দরকার, প্রতিটি টোকেন কেবল একবার গেমসर्ভার দ্বারা গ্রহণ করা যেতে পারে এবং অব্যবহৃত টোকেন কয়েক মিনিটের পরে বাতিল করা উচিত।


সুতরাং bcrypt যথেষ্ট ব্যবহার করা হবে? আমি bcrypt ব্যবহার করে সময় + ব্যবহারকারীর নাম + পাসওয়ার্ডের হ্যাশ থেকে একটি টোকেন তৈরি করার কথা ভাবছি।
ব্যবহারকারী 342580

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

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

পাসওয়ার্ডটি অন্য কোনও সাইটে আপস করা হতে পারে, তাই আমি এটি একটি উপযুক্ত গোপনীয়তা অনুমান করে এড়াতে পারি।
শন মিডলডিচ

1
@ সানমিডলিচ পাসওয়ার্ড আপোস করার সময়, সমস্ত সুরক্ষা যাইহোক হারিয়ে যায়। যে আক্রমণকারী পাসওয়ার্ডটি পেয়েছে তার কাছে টোকেন অনুমান করার কোনও কারণ নেই, কারণ সে কেবলমাত্র সাধারণভাবে লগ ইন করে একটি পেতে পারে।
ফিলিপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.