ব্রাউজারে JWT কোথায় সংরক্ষণ করবেন? কীভাবে সিএসআরএফের বিরুদ্ধে রক্ষা করবেন?


159

আমি কুকি ভিত্তিক প্রমাণীকরণ জানি। এমআইটিএম এবং এক্সএসএস থেকে কুকি-ভিত্তিক প্রমাণীকরণ রক্ষার জন্য এসএসএল এবং এইচটিটিপি কেবল পতাকা ব্যবহার করা যেতে পারে। তবে এটি সিএসআরএফ থেকে রক্ষার জন্য আরও বিশেষ ব্যবস্থা গ্রহণের প্রয়োজন হবে। এগুলি কিছুটা জটিল। ( রেফারেন্স )

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

  1. যদি জেডাব্লুটিটি কুকিতে সঞ্চিত থাকে তবে আমি মনে করি এটি কুকি-ভিত্তিক প্রমাণীকরণের সমান, কুকি / টোকেন যাচাই করার জন্য সার্ভারের সেশনগুলির প্রয়োজন নেই। বিশেষ ব্যবস্থা গ্রহণ না করা হলে এখনও সিএসআরএফ সম্পর্কে ঝুঁকি রয়েছে। JWT কি কুকিতে সংরক্ষণ করা হয় না?

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

  3. এছাড়াও, আমি জেডাব্লুটিটি প্রেরণের জন্য "অনুমোদন শিরোনাম" এবং "বেয়ার" ব্যবহার করার জন্য আরও একটি ব্লগ শো পেয়েছি । ব্লগ যে পদ্ধতি সম্পর্কে কথা বলে আমি তা বুঝতে পারি না। কেউ দয়া করে "অনুমোদন শিরক" এবং "বেয়ারার" সম্পর্কে আরও ব্যাখ্যা করতে পারেন? এটি কি সমস্ত অনুরোধের HTTP শিরোনাম দ্বারা JWT সংক্রমণ করে? যদি হ্যাঁ, তবে সিএসআরএফ সম্পর্কে কীভাবে?

উত্তর:


70

JWT টোকেন জনপ্রিয় যেহেতু তারা মত নতুন অনুমোদন এবং প্রমাণীকরণ প্রোটোকল এ ডিফল্ট টোকেন বিন্যাস হিসাবে ব্যবহৃত হয় OAuth এর 2.0 এবং থেকে OpenID

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

এইচটিটিপি-তে সংজ্ঞায়িত প্রমাণীকরণ স্কিমগুলির মধ্যে একটি বহনকারী প্রমাণীকরণ is এটির মূল অর্থ YOUএকটি অনুরোধের অনুমোদন HTTP শিরোনামে (জেডাব্লুটি) টোকেনটি আটকে। ব্রাউজারটি NOTস্বয়ংক্রিয়ভাবে আপনার জন্য এটি করবে, সুতরাং এটি আপনার ওয়েবসাইট সুরক্ষার জন্য উপযুক্ত নয়। ব্রাউজারটি স্বয়ংক্রিয়ভাবে আপনার অনুরোধের সাথে শিরোনাম যোগ না করে, এটি কোনও সিএসআরএফ আক্রমণ থেকে ঝুঁকিপূর্ণ নয়, যা মূল ডোমেনে স্বয়ংক্রিয়ভাবে আপনার প্রমাণীকরণ তথ্য জমা দেওয়ার উপর নির্ভর করে।

বাহক প্রকল্পটি এজেএক্স কলগুলির মাধ্যমে বা মোবাইল ক্লায়েন্টদের কাছ থেকে গ্রাহিত ওয়েব APIs (REST পরিষেবাদি) রক্ষার জন্য প্রায়শই ব্যবহৃত হয়।


1
@ টাইমস্পেস No নং, জেডাব্লুটি টোকেনগুলি প্রায়শই স্থানীয় ক্লায়েন্টদের কাছ থেকেও ব্যবহৃত হয়। OAuth 2.0 এর নির্দিষ্টভাবে দেশীয় (মোবাইল) ক্লায়েন্টকে লক্ষ্য করে প্রবাহিত করা হয়েছে। তারা যা করে না তা হ'ল অন্তর্নিহিত ব্রাউজার প্রমাণীকরণ (যেমন কুকি বা বেসিক লেখক)
এমভিডিডি

5
আমি বলছি যে যদি আপনার এপিআই যদি অনুমোদনের শিরোনাম থেকে কেবল JWT টোকেনটি পুনরুদ্ধার করে তবে এটি সিএসআরএফের পক্ষে ঝুঁকিপূর্ণ নয়। কোনও কুকি থেকে টোকেন প্রাপ্ত যে কোনও সাইট বা এপিআইয়ের সিএসআরএফ প্রশমন দরকার।
এমভিডিডি

13
এর অর্থ কি আমরা কার্যকরভাবে কোনও কুকিতে jwt সংরক্ষণ করতে পারি এবং যদি আমরা এর সাথে অনুমোদনের শিরোনামে অনুরোধগুলি প্রেরণ করি তবে এটি নিরাপদ হবে?
ক্যামেরনরো

10
@ ক্যামেরনজ্রো আপনি এটিকে আপনার কুকিতে সংরক্ষণ করতে পারেন তবে কেবলমাত্র আপনি যদি কুকিজ প্রমাণীকরণের জন্য ব্যবহার না করেন (আপনি এই ক্ষেত্রে আপনার শিরোলেখ ব্যবহার করেন)
জায়েকো

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

143

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

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

সুতরাং সিএসআরএফ সমস্যা সমাধানের জন্য, আমি আমার অ্যাপ্লিকেশনটিতে ডাবল জমা কুকিজ ব্যবহার করি।

ডাবল জমা দিন কুকিজ পদ্ধতি

  1. এইচটিপিপিএস থেকে অন্য কোনও কুকিতে জেডাব্লুটি সংরক্ষণ করুন এবং এটি এইচটিটিপিএস-এর মাধ্যমে স্থানান্তর করতে সুরক্ষিত মোডে ব্যবহার করুন।

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

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

কৌণিক জেএস আপনার জীবনকে সহজ করে তোলে

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

  • বর্তমান ডোমেনে XSRF-TOKEN নামের একটি কুকি সন্ধান করুন।
  • যদি সেই কুকিটি পাওয়া যায় তবে এটি মানটি পড়ে এবং এটি X-XSRF-TOKEN শিরোনাম হিসাবে অনুরোধে যুক্ত করে adds

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

সতর্ক করা

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

আপনি আপনার জেডাব্লুটিটি সংরক্ষণ করুন localStorageবা আপনি যদি আপনার এক্সএসআরএফ-টোকেনটি এইচটিটিপি কেবলমাত্র কুকিতে না সঞ্চয় করেন তবে উভয়ই এক্সএসএস সহজেই ধরা পড়বে। এমনকি আপনার এইচটিপিপি কেবলমাত্র কুকিতে আপনার জেডব্লিউটি এক্সএসটি পদ্ধতির মতো উন্নত এক্সএসএস আক্রমণ দ্বারা ধরতে পারে

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

এখানে আরও পড়ুন:


1
@ আরানদেহখরঘানি হ্যাঁ আমি অনুমান করি এটি রিপ্লে আক্রমণকে প্রতিরোধ করে বিশেষত যদি আপনি জেডাব্লুটি পরিবর্তন করেন এবং প্রতিবার আগের জেডব্লিউটি এটির দ্বারা প্রতিবার ব্যবহৃত হয় exp এর অর্থ আপনার জেডাব্লুটিটি ওয়ান-টাইম পাসওয়ার্ডের (ওটিপি) মতো হয়ে যাবে। আপনি আপনার প্ল্যাটফর্মের সুরক্ষা সম্পর্কে কতটা যত্নশীল তা নির্ভর করে আপনি বিভিন্ন উপায়ে JWT ব্যবহার করতে পারেন use
ইমান সেদিঘি

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

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

5
@ ইমানসেদীঘি আমি পরিষ্কার ছিলাম না, একটি কুকিতে জাডব্লিউটি সংরক্ষণ করে আপনি জটিলতা যুক্ত করছেন এবং আপনাকে এখন এক্সএসআরএফ থেকে রক্ষা করতে হবে। তাহলে কেন কেবল স্থানীয় জীবনের ছোট্ট টোকেন সহ স্টোরেজ ব্যবহার করবেন এবং এক্সএসএস প্রতিরোধে মনোনিবেশ করবেন না?
shusson

2
@ রই নমির: আপনি যদি 10 ডলার এসএসএল শংসাপত্র ব্যবহার করেন তবে ওয়্যারশার্ক দ্বারা বানানো কোনও উদ্বেগের বিষয় নয়! যদি ওয়েবসাইটটির সুরক্ষা গুরুত্বপূর্ণ হয় তবে আপনার ডেটা এনক্রিপ্ট করতে হবে এবং এইচটিটিপিএস প্রোটোকল ব্যবহার করা উচিত।
ইমান সেদিঘি

2

জেডাব্লুটিটিগুলি সঞ্চয় করার পুরো ইস্যুতে আর একটি কোণ:

  1. জেডব্লিউটিগুলি কখনই আপনার স্থানীয় স্টোরেজে সংরক্ষণ করা উচিত নয়
  2. বাস্তবে, এগুলি এমনকি আপনার কুকিতে সংরক্ষণ করা উচিত নয় , যদি না আপনি খুব কঠোর সিএসআরএফ সুরক্ষা কার্যকর করতে সক্ষম হন

অনুপ্রেরণার জন্য এটি চেকআউট করুন

  • ID_ টোকেন হিসাবে JWT আপনার ব্যবহারকারীর শংসাপত্রগুলির মতো
  • অ্যাক্সেস_ টোকেন হিসাবে জেডাব্লুটিটি আপনার সেশন টোকেনের মতো

সর্বাধিক সুরক্ষিত বিকল্প হ'ল মেমরিগভীর ডুব দেওয়ার জন্য এটি চেকআউট করুন

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