স্টেটলেস (অধিবেশন-কম) এবং কুকি-কম প্রমাণীকরণ কীভাবে করবেন?


107

কিছু অর্জনের জন্য বব একটি ওয়েব অ্যাপ্লিকেশন ব্যবহার করে। এবং:

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

কিছু গুরুত্বপূর্ণ নোট:

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

এখন, আমরা কীভাবে ববকে (প্রতিটি অনুরোধে) প্রমাণীকরণ করব? এই জাতীয় জিনিস কার্যকর করার কোন যুক্তিযুক্ত উপায় হতে পারে?

  • এইচটিএমএল ফর্মের গোপন ক্ষেত্রগুলির মাধ্যমে শংসাপত্রগুলির সাথে টেনিস খেলে ... বলটিতে শংসাপত্রগুলি ( ব্যবহারকারীর নাম এবং পাসওয়ার্ড ) থাকে এবং দুটি র‌্যাকেট যথাক্রমে ব্রাউজার এবং ওয়েব অ্যাপ্লিকেশন। অন্য কথায়, আমরা কুকিজের পরিবর্তে ফর্ম ক্ষেত্রগুলির মাধ্যমে ডেটা পিছনে পিছনে পরিবহন করতে পারি। প্রতিটি ওয়েব অনুরোধে, ব্রাউজার শংসাপত্রগুলি পোস্ট করে। যদিও, একক পৃষ্ঠার অ্যাপ্লিকেশনটির ক্ষেত্রে , এটি টেনিস খেলার পরিবর্তে রাবারের প্রাচীরের বিরুদ্ধে স্কোয়াশ খেলার মতো দেখাতে পারে , কারণ শংসাপত্রগুলি সহ ওয়েব ফর্মটি ওয়েব পৃষ্ঠার পুরো জীবনকালকে জীবিত রাখতে পারে as (এবং সার্ভারটি শংসাপত্রগুলি ফেরত না দেওয়ার জন্য কনফিগার করা হবে)।
  • পৃষ্ঠার প্রসঙ্গে ব্যবহারকারী নাম এবং পাসওয়ার্ড সংরক্ষণ করে - জাভাস্ক্রিপ্ট ভেরিয়েবল ইত্যাদি etc. একক পৃষ্ঠা এখানে প্রয়োজনীয়, আইএমএইচও।
  • এনক্রিপ্ট করা টোকেন - ভিত্তিক প্রমাণীকরণ। এই ক্ষেত্রে, লগ-ইন ক্রিয়াকলাপের ফলে এনক্রিপ্ট করা সুরক্ষা টোকেন (ব্যবহারকারীর নাম + পাসওয়ার্ড + অন্য কিছু) তৈরি হবে। এই টোকেনটি ক্লায়েন্টকে ফিরিয়ে দেওয়া হবে এবং আগত অনুরোধগুলি টোকেনের সাথে আসবে। এটা কোনো কিছু হলো? আমাদের ইতিমধ্যে এইচটিটিপিএস ...
  • অন্যান্য...
  • শেষ অবলম্বন: সেশনে শংসাপত্রগুলি এটি করবেন না! সেশন ভাল। কুকিজ সহ বা ছাড়াই।

পূর্বের বর্ণিত ধারণাগুলির কোনও সম্পর্কে কি কোনও ওয়েব / সুরক্ষা উদ্বেগ আপনার মনে আসে? উদাহরণ স্বরূপ,

  • টাইম আউটিং - আমরা শংসাপত্রগুলির সাথে একটি টাইমস্ট্যাম্প রাখতে পারি (টাইম স্ট্যাম্প = বব তার শংসাপত্রগুলি যে সময় প্রবেশ করেছিল)। যেমন এখন যখন - টাইমস্ট্যাম্প> থ্রেশহোল্ড , আমরা অনুরোধটি অস্বীকার করতে পারি।
  • ক্রস-সাইট স্ক্রিপ্টিং সুরক্ষা - কোনওভাবেই আলাদা হওয়া উচিত না, তাই না?

এটি পড়ার জন্য সময় দেওয়ার জন্য আপনাকে অনেক ধন্যবাদ :)


1
আপনি প্রতিটি ইউআরএল একটি টোকেন সংযোজন করতে পারে। এটি করার জন্য এএসপি.নেটের একটি (লিগ্যাসি) মোড রয়েছে। এটি প্রমাণ করতে পারে যে এটি কাজ করতে পারে।
usr ডিরেক্টরির

1
যেখানে সবাই? :)
টারডুস-মেরুলা

2
আমি মনে করি যে উপলব্ধ অপশনগুলি সম্পর্কে আপনার কাছে বেশ ভাল ধারণা আছে। নিজের যুক্তিতে বিশ্বাস করুন এবং নিজেই সিদ্ধান্ত নিন।
usr ডিরেক্টরির

ফ্ল্যাশ সিলভারলাইট মত একটি প্লাগইন একটি বিকল্প?
Giu

@ তবে নিশ্চিত হন না যে এটি কোনও ভাল ধারণা কিনা যেন কোনও হ্যাকার আপনার ওয়েবসেভার লগগুলিতে প্রবেশ করে আপনার টোকেনটি চুরি করতে পারে এবং আপনার সিস্টেমে লগইন করতে পারে।
গিব্বোক

উত্তর:


74

আহ, আমি এই প্রশ্নগুলি পছন্দ - একটি অধিবেশন ছাড়া একটি অধিবেশন বজায় রাখা।

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

একটি জনপ্রিয়, যদিও পুরোপুরি স্টেটলেস মেকানিজম নয় (ধরে নিচ্ছেন আপনার জাভা স্ক্রিপ্ট কার্যকর রয়েছে) জাভাস্ক্রিপ্টে সেশন কুকি এম্বেড করা। আমার মধ্যে সুরক্ষিত লোকটি এতে চিৎকার করছে, তবে এটি আসলে কাজ করতে পারে - প্রতিটি অনুরোধের একটি আছেX-Authentication-Tokenশিরোনাম বা এর মতো কিছু এবং আপনি ব্যবহারকারীকে যাচাই করতে ব্যাকএন্ডে একটি ডেটাবেস, মেমরিতে ফাইল-স্টোর ইত্যাদি ম্যাপ করেন। এই টোকনে আপনি যে সময় নির্দিষ্ট করেছেন তার একটি সময়সীমা থাকতে পারে এবং যদি এটির সময়সীমা বেরিয়ে যায় তবে ব্যবহারকারীকে আবার লগ ইন করতে হবে। এটি মোটামুটি স্কেলেবল - আপনি যদি এটি কোনও ডাটাবেসে সঞ্চয় করেন, এর একটি এসকিউএল বিবৃতি কার্যকর হয়েছে এবং সঠিক সূচী দিয়ে, এটি কার্যকর করতে খুব কম সময় নেওয়া উচিত, এমনকি একাধিক যুগপত ব্যবহারকারীদের সাথেও। এখানে লোড টেস্টিং অবশ্যই অবশ্যই সহায়তা করবে। আমি যদি প্রশ্নটি সঠিকভাবে পড়ে থাকি তবে এটি হবে আপনার এনক্রিপ্ট হওয়া টোকেন প্রক্রিয়া - যদিও, আমি দৃ strongly়তার সাথে পরামর্শ দেব যে আপনি 32 টি বর্ণের ক্রিপ্টোগ্রাফিকভাবে এলোমেলো টোকেন ব্যবহার করুন, ব্যবহারকারীর নাম + পাসওয়ার্ড + অন্য যাই হোক না কেন - এইভাবে, এটি স্থির থাকে অপ্রত্যাশিত, তবে আপনি এখনও এটি ব্যবহারকারীর আইডি বা এই জাতীয় কোনও জিনিসের সাথে সংযুক্ত করতে পারেন।

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

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

সুরক্ষার কিছু অন্যান্য উদ্বেগ রয়েছে যা আমি ভাবতে পারি তবে এ পর্যায়ে এগুলি সমাধান করা খুব বিস্তৃত - যদি আপনি সমস্ত ব্যবহার (এবং অপব্যবহার) কেস মাথায় রাখেন তবে আপনার সম্ভবত সম্ভবত একটি মোটামুটি ভাল বাস্তবায়ন করতে সক্ষম হওয়া উচিত এই সিস্টেম।


আপনি না কি প্লে ফ্রেমওয়ার্ক করে এবং ব্যবহারকারীকে একটি স্বাক্ষরিত কুকি পাঠায়? তাহলে কি সেই কুকি পরবর্তী প্রতিটি অনুরোধের জন্য সার্ভারে ফিরে পাঠিয়েছে?
j

8
> তার ব্রাউজারটি ডায়েটে রয়েছে, সুতরাং এটি কুকিজ সমর্থন করে না।
কার্তিক রঙ্গারাজন

4
এই পরামর্শগুলির মধ্যে আসলেই কি রাষ্ট্রবিহীন / দায়রাবিহীন ? আপনার পাঁচটি প্রধান অনুচ্ছেদের মধ্যে (পোস্টের 2013-12-19 সংস্করণ অনুসারে): # 1 প্রারম্ভিক, # 2 অতিরিক্ত-ক্লডজি ওয়েব 2.0 প্রস্তাব করেছে la ™ স্বাদযুক্ত সেশন, # 3 কেবল উপদেশ মাত্র, # 4 এর প্রভাবগুলি নিয়ে আলোচনা করে রাষ্ট্রীয়তার , এবং # 5 হ'ল একটি অস্পষ্ট ধারণা ... এটি কীভাবে গৃহীত হল ?? এটি স্পর্শকাতরভাবে তথ্যগত!
জেমস দ্য আশ্চর্যডুড

1

লগ-ইন বিকল্প সম্পর্কে - আমি মনে করি যে আপনি সাধারণত অতিথিদের জন্য সেশনগুলি সমর্থন করতে চান।

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

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

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


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