কেন কুকিজে সিএসআরএফ প্রতিরোধের টোকেন রাখা সাধারণ?


284

আমি সিএসআরএফ এবং এটি প্রতিরোধের উপযুক্ত উপায়গুলি সহ পুরো বিষয়টি বোঝার চেষ্টা করছি। (আমি যে সংস্থানগুলি পড়েছি, বুঝতে পেরেছি এবং এতে একমত হয়েছি : OWASP সিএসআরএফ প্রতিরোধ চিট শিট , সিএসআরএফ সম্পর্কে প্রশ্নাবলী ।)

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

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

আমার প্রশ্নে, যা সেই রাউন্ড্রিপটিতে সিএসআরএফ টোকেনের জন্য ব্যবহৃত নির্দিষ্ট পরিবহন পদ্ধতি সম্পর্কে।

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

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

কেন সিএসআরএফ টোকেনের ডাউনস্ট्रीम ট্রান্সপোর্ট হিসাবে সেট-কুকি ব্যবহার করা এত সাধারণ / কেন এটি ভাল ধারণা? আমি কল্পনা করি যে এই সমস্ত ফ্রেমওয়ার্কের লেখকরা তাদের বিকল্পগুলি সাবধানতার সাথে বিবেচনা করেছেন এবং এটি ভুল হয়নি। তবে প্রথম নজরে, কুকি ব্যবহার করে কুকিগুলির নকশার সীমাবদ্ধতা মূলত কী তা নির্বিঘ্ন বলে মনে হয় around প্রকৃতপক্ষে, আপনি যদি কুকিগুলি রাউন্ডট্রিপ পরিবহণ হিসাবে ব্যবহার করেন (সেট-কুকি: ব্রাউজারটিকে সিএসআরএফ টোকেনটি জানাতে সার্ভারের জন্য হেডার ডাউনস্ট্রিম এবং কুকি: ব্রাউজারটিকে এটি সার্ভারে ফিরিয়ে আনতে হেডার আপস্ট্রিম) আপনি দুর্বলতার পুনরায় পরিচয় করিয়ে দেবেন ঠিক করার চেষ্টা করা হয়।

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


এটি সঠিক জায়গায় আঘাত করা একটি দুর্দান্ত প্রশ্ন।
কেটিএ

উত্তর:


263

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

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

বডি অ্যাপ্রোচ অনুরোধ

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

সুবিধাদি:

  • কার্যকর করা সহজ Simple
  • এজেএক্সের সাথে কাজ করে।
  • ফর্ম নিয়ে কাজ করে।
  • কুকি আসলে কেবল এইচটিটিপি হতে পারে ।

অসুবিধা:

  • সমস্ত ফর্ম অবশ্যই এইচটিএমএল মধ্যে লুকানো ক্ষেত্র আউটপুট।
  • যে কোনও এজাক্স পোস্টের মান অবশ্যই অন্তর্ভুক্ত করতে হবে।
  • পৃষ্ঠাটি অবশ্যই আগে থেকেই জানতে হবে যে এটির জন্য সিএসআরএফ টোকেন প্রয়োজন তাই এটি পৃষ্ঠা সামগ্রীতে অন্তর্ভুক্ত করতে পারে তাই সমস্ত পৃষ্ঠাগুলিতে অবশ্যই কোথাও টোকেন মান থাকতে হবে, এটি একটি বড় সাইটের জন্য বাস্তবায়নে সময় সাপেক্ষ হতে পারে।

কাস্টম এইচটিটিপি শিরোলেখ (ডাউন স্ট্রিম)

  1. ব্যবহারকারী সাফল্যের সাথে লগ ইন করে।
  2. সার্ভার প্রমাণী কুকি ইস্যু করে।
  3. কোনও ফর্ম নেভিগেট করতে ব্যবহারকারী ক্লিকগুলি।
  4. ব্রাউজারে পৃষ্ঠা লোড হয়, তারপরে সিএসআরএফ টোকেনটি পুনরুদ্ধার করার জন্য একটি এজেএক্স অনুরোধ করা হয়।
  5. সার্ভার সিএসআরএফ টোকেন উত্পন্ন করে (যদি ইতিমধ্যে সেশনের জন্য উত্পন্ন না হয়), এটি ব্যবহারকারীর সেশনের বিপরীতে সঞ্চয় করে এবং এটি একটি শিরোনামে আউটপুট দেয়।
  6. ব্যবহারকারী জমা দেয় ফর্ম (টোকেন লুকানো ক্ষেত্রের মাধ্যমে প্রেরণ করা হয়)।
  7. সার্ভারটি লুকানো মাঠের সেশনটি সঞ্চিত টোকেন পরীক্ষা করে।

সুবিধাদি:

অসুবিধা:

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

কাস্টম HTTP শিরোনাম (প্রবাহ)

  1. ব্যবহারকারী সাফল্যের সাথে লগ ইন করে।
  2. সার্ভার প্রমাণী কুকি ইস্যু করে।
  3. কোনও ফর্ম নেভিগেট করতে ব্যবহারকারী ক্লিকগুলি।
  4. যদি এখনও এই অধিবেশনটির জন্য জেনারেট না করা থাকে, সার্ভার সিএসআরএফ টোকেন উত্পন্ন করে, এটি ব্যবহারকারীর সেশনের বিপরীতে সঞ্চয় করে এবং কোথাও পৃষ্ঠার সামগ্রীতে আউটপুট দেয়।
  5. ব্যবহারকারী এজেএক্সের মাধ্যমে ফর্ম জমা দেয় (টোকেনটি শিরোনামের মাধ্যমে প্রেরণ করা হয়)।
  6. সার্ভার কাস্টম শিরোনাম মিলিত সেশন টোকেন পরীক্ষা করে।

সুবিধাদি:

অসুবিধা:

  • ফর্ম নিয়ে কাজ করে না।
  • সমস্ত এজাক্স পোস্টগুলিতে অবশ্যই শিরোনাম অন্তর্ভুক্ত করা উচিত।

কাস্টম এইচটিটিপি শিরোলেখ (প্রবাহ এবং ডাউন স্ট্রিম)

  1. ব্যবহারকারী সাফল্যের সাথে লগ ইন করে।
  2. সার্ভার প্রমাণী কুকি ইস্যু করে।
  3. কোনও ফর্ম নেভিগেট করতে ব্যবহারকারী ক্লিকগুলি।
  4. ব্রাউজারে পৃষ্ঠা লোড হয়, তারপরে সিএসআরএফ টোকেনটি পুনরুদ্ধার করার জন্য একটি এজেএক্স অনুরোধ করা হয়।
  5. সার্ভার সিএসআরএফ টোকেন উত্পন্ন করে (যদি ইতিমধ্যে সেশনের জন্য উত্পন্ন না হয়), এটি ব্যবহারকারীর সেশনের বিপরীতে সঞ্চয় করে এবং এটি একটি শিরোনামে আউটপুট দেয়।
  6. ব্যবহারকারী এজেএক্সের মাধ্যমে ফর্ম জমা দেয় (টোকেনটি শিরোনামের মাধ্যমে প্রেরণ করা হয়)।
  7. সার্ভার কাস্টম শিরোনাম মিলিত সেশন টোকেন পরীক্ষা করে।

সুবিধাদি:

অসুবিধা:

  • ফর্ম নিয়ে কাজ করে না।
  • সমস্ত এজাক্স পোস্টের মানটিও অবশ্যই অন্তর্ভুক্ত থাকতে হবে।
  • পৃষ্ঠাটি অবশ্যই সিআরএসএফ টোকেন পেতে প্রথমে একটি এজেএক্স অনুরোধ করবে, সুতরাং এর অর্থ প্রতিবার অতিরিক্ত রাউন্ড ট্রিপ হবে।

সেট কুকি

  1. ব্যবহারকারী সাফল্যের সাথে লগ ইন করে।
  2. সার্ভার প্রমাণী কুকি ইস্যু করে।
  3. কোনও ফর্ম নেভিগেট করতে ব্যবহারকারী ক্লিকগুলি।
  4. সার্ভার সিএসআরএফ টোকেন উত্পন্ন করে, এটি ব্যবহারকারীর সেশনের বিপরীতে সঞ্চয় করে এবং একটি কুকিতে আউটপুট দেয়।
  5. ব্যবহারকারী এজেএক্স বা HTML ফর্মের মাধ্যমে ফর্ম জমা দেয়।
  6. সার্ভার কাস্টম শিরোনাম (বা লুকানো ফর্ম ক্ষেত্র) পরীক্ষা করে সেশন সঞ্চিত টোকেন।
  7. কুকি অতিরিক্ত AJAX ব্যবহারের জন্য ব্রাউজারে উপলব্ধ এবং সিএসআরএফ টোকেন পুনরুদ্ধারের জন্য সার্ভারের অতিরিক্ত অনুরোধ ছাড়াই অনুরোধগুলি ফর্ম করে।

সুবিধাদি:

  • কার্যকর করা সহজ Simple
  • এজেএক্সের সাথে কাজ করে।
  • ফর্ম নিয়ে কাজ করে।
  • অগত্যা কুকির মান পাওয়ার জন্য AJAX অনুরোধের প্রয়োজন নেই। যে কোনও এইচটিটিপি অনুরোধ এটি পুনরুদ্ধার করতে পারে এবং এটি জাভাস্ক্রিপ্টের মাধ্যমে সমস্ত ফর্ম / এজেএক্স অনুরোধগুলিতে যুক্ত করা যেতে পারে।
  • একবার সিএসআরএফ টোকেনটি পুনরুদ্ধার করা হয়েছে, এটি কোনও কুকিতে সঞ্চিত হওয়ায় অতিরিক্ত অনুরোধ ছাড়াই মানটি পুনরায় ব্যবহার করা যেতে পারে।

অসুবিধা:

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

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

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


7
আমি নিশ্চিত নই যে আমি কীভাবে "সিএসআরএফ টোকেন পুনরুদ্ধার করার জন্য এজেএক্স অনুরোধ করা হয়েছে" বুঝতে পেরেছি ("কাস্টম শিরোনাম: উভয় প্রান্তে উভয় ক্ষেত্রেই পদক্ষেপ 4) নিরাপদে করা যেতে পারে; যেহেতু এটি একটি পৃথক অনুরোধ, সার্ভার জানেন না যে এটি কে থেকে আসছে; এটি কীভাবে জানবে যে সিএসআরএফ টোকেন প্রকাশ করা নিরাপদ? আমার কাছে মনে হয় আপনি যদি প্রাথমিক পৃষ্ঠার লোড থেকে টোকেন না পান তবে আপনি হারাবেন (যা কাস্টম ডাউনস্ট্রিম প্রতিক্রিয়া শিরোনামকে একটি নন স্টার্টর করে তোলে, দুর্ভাগ্যক্রমে)।
মেটাম্যাট

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

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

8
তাদের কাছে অথিটি কুকি সরবরাহ করার ক্ষমতা রয়েছে তবে তারা যে প্রতিক্রিয়াটিতে সিএসআরএফ টোকেন রয়েছে তা পড়তে পারে না।
সিলভারলাইটফক্স

8
@ মেটাম্যাট নেকারোর জন্য দুঃখিত, তবে আমি যারা ঘুরে বেড়াত তাদের পক্ষে এটি করব do আমার বোঝার মধ্যে আক্রমণকারীটির সাধারণত প্রতিক্রিয়াটির অ্যাক্সেস নেই। সিএসআরএফ সরাসরি তথ্য সংগ্রহের পরিবর্তে পার্শ্ব প্রতিক্রিয়া সৃষ্টি করতে ব্যবহৃত হয় । উদাহরণস্বরূপ, কোনও সিএসআরএফ আক্রমণ স্ক্রিপ্ট কোনও সুবিধাযুক্ত ব্যবহারকারীকে আক্রমণকারীর সুবিধাগুলি বাড়িয়ে তুলতে, সুরক্ষা সেটিংস অক্ষম করতে বা লগ-ইন পেপ্যাল ​​ব্যবহারকারীকে নির্দিষ্ট ইমেল ঠিকানায় স্থানান্তর পাঠাতে বাধ্য করতে পারে। এর মধ্যে কোনও ক্ষেত্রেই আক্রমণকারী প্রতিক্রিয়ার বিষয়ে যত্ন করে না, যা এখনও শিকারের ব্রাউজারে প্রেরণ করা হয়; শুধুমাত্র আক্রমণ ফলাফল।
জোনাথনব্রেডার

61

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

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

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


অবশ্যই যদিও, একজন আক্রমণকারীকে প্রথমে কুকি পড়ার দরকার নেই। তারা কেবল হ্যাকড সাইটে একটি চিত্র sertোকাতে পারে src='bank.com/transfer?to=hacker&amount=1000যার সাহায্যে ব্রাউজারটি অনুরোধ করবে, সেই সাইটের জন্য সম্পর্কিত কুকিজ দিয়ে পূর্ণ করুন ( bank.com)?
developius

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

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

1
এই উত্তরটি মূল পোস্টারের প্রশ্নের মূল বিন্দুতে ছিল এবং খুব পরিষ্কার ছিল। +1 আপনাকে ধন্যবাদ।
java-addict301

@ টঙ্গফা - ধন্যবাদ, এটি আমাকে আরও ভালভাবে বুঝতে সাহায্য করেছে। আমি কি ঠিক ধরে নিচ্ছি যে সিএসআরএফ টোকেনকে হেডারে রাখা উচিত নয়? এটা অবশ্যই শরীরের কোথাও থাকতে হবে?
শিরোহেজ

10

উত্তরের মত আমার সর্বোত্তম অনুমান: সার্ভার থেকে ব্রাউজারে সিএসআরএফ টোকেন কীভাবে পাবেন সে জন্য এই 3 টি বিকল্প বিবেচনা করুন।

  1. অনুরোধের বডিটিতে (কোনও HTTP শিরোনাম নয়)।
  2. কাস্টম HTTP শিরোনামে, সেট-কুকি নয়।
  3. একটি কুকি হিসাবে, একটি সেট-কুকির শিরোনামে।

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

দ্বিতীয়টি, কাস্টম শিরোলেখ আকর্ষণীয় তবে বাস্তবে এটি কাজ করে না, কারণ জেএস যখন এটি চালিত এক্সএইচআর এর জন্য শিরোনাম পেতে পারে তবে এটি যে পৃষ্ঠা থেকে বোঝা হয়েছিল তার শিরোনাম পেতে পারে না

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


7
আমি সম্ভবত স্পষ্ট করে বলছি, এর অর্থ এই নয় যে কুকি httponly সঠিক হতে পারে না?
ফোটন

1
কেবলমাত্র আজাক্স অনুরোধের জন্য (যেখানে দ্বিতীয় চ্যানেলে পরবর্তী অনুরোধে (ফর্ম ডেটা বা শিরক হিসাবে)) পুনরায় পাঠাতে জেএসকে সিএসআরফ কুকির মান জানতে হবে। সিএসআরএফ টোকেনের এইচটিটিপি হওয়ার দরকার নেই কারণ সেশন কুকি ইতিমধ্যে এইচটিপিওএনলি (এক্সএসএসের বিরুদ্ধে সুরক্ষার জন্য) যেহেতু সিএসআরএফ টোকেন সম্পর্কিত অধিবেশন ব্যতীত নিজেই মূল্যবান নয়।
কাওবার্ট

2

সেশন কুকি (যা এক প্রকারের স্ট্যান্ডার্ড) ছাড়াও আমি অতিরিক্ত কুকি ব্যবহার করতে চাই না।

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

অতিরিক্ত কুকিজ ছাড়াই আমার সমাধানটি সহজ:

মক্কেলের পক্ষে

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

প্রধান "সূচক" পৃষ্ঠাটিতে এই জাভাস্ক্রিপ্ট স্নিপেট রয়েছে:

// Intialize global variable CSRF_TOKEN to empty sting. 
// This variable is set after a succesful login
window.CSRF_TOKEN = '';

// the supplied callback to .ajaxSend() is called before an Ajax request is sent
$( document ).ajaxSend( function( event, jqXHR ) {
    jqXHR.setRequestHeader('X-CSRF-TOKEN', window.CSRF_TOKEN);
}); 

সার্ভার সাইড

সাফল্যযুক্ত লগইনে, একটি এলোমেলো (এবং দীর্ঘ যথেষ্ট) সিএসআরএফ টোকেন তৈরি করুন, এটি সার্ভার সাইড সেশনে সংরক্ষণ করুন এবং এটি ক্লায়েন্টকে ফিরিয়ে দিন। এক্স-সিএসআরএফ-টোকেন শিরোনামের মানটি সেশনে সঞ্চিত মানের সাথে তুলনা করে নির্দিষ্ট (সংবেদনশীল) আগত অনুরোধগুলি ফিল্টার করুন: এগুলি মিলবে।

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

@WebFilter(urlPatterns = {"/dataservice/*"})
...
String sessionCSRFToken = req.getSession().getAttribute("CSRFToken") != null ? (String) req.getSession().getAttribute("CSRFToken") : null;
if (sessionCSRFToken == null || req.getHeader("X-CSRF-TOKEN") == null || !req.getHeader("X-CSRF-TOKEN").equals(sessionCSRFToken)) {
    resp.sendError(401);
} else
    chain.doFilter(request, response);
}   

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