রেলস সত্যতা টোকেন বোঝা


981

আমি কারাগারে প্রামাণ্য টোকেন সম্পর্কিত কিছু সমস্যা নিয়ে চলেছি, যেহেতু এখন আমার অনেকবার রয়েছে।

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


7
আরও দেখুন: "গুগল কেন তাদের (1) এর JSON প্রতিক্রিয়া দেওয়ার সময় প্রস্তুতি নেয়?" stackoverflow.com/questions/2669690/…
ক্লো

উত্তর:


1462

কি ঘটেছে

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

কেন হয়

যেহেতু সত্যতা টোকেনটি সেশনে সংরক্ষিত থাকে তাই ক্লায়েন্ট তার মান জানতে পারে না। এটি লোকেরা সেই অ্যাপ্লিকেশনটিতে ফর্মটি না দেখেই একটি রেল অ্যাপগুলিতে ফর্ম জমা দিতে বাধা দেয়। কল্পনা করুন যে আপনি পরিষেবা A ব্যবহার করছেন, আপনি পরিষেবাটিতে লগ ইন করেছেন এবং সবকিছু ঠিক আছে। এখন কল্পনা করুন যে আপনি পরিষেবা বি ব্যবহার করতে গিয়েছিলেন এবং আপনি নিজের পছন্দ মতো একটি ছবি দেখেছেন এবং এর বৃহত আকার দেখতে ছবিতে টিপছেন। এখন, যদি বি এর পরিষেবাতে কোনও দুষ্ট কোড থাকে, তবে এটি A কে (যা আপনি লগ ইন করেছেন) তে একটি অনুরোধ প্রেরণ করতে পারে এবং একটি অনুরোধ প্রেরণ করে আপনার অ্যাকাউন্টটি মুছে ফেলতে বলে http://serviceA.com/close_account। এটিই সিএসআরএফ (ক্রস সাইট রিকোয়েস্ট জালিয়াতি) নামে পরিচিত ।

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

এপিআই ডক্স মেটা ট্যাগ সম্পর্কে বিশদ বর্ণনা করে:

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

মন্তব্য

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

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

পাঠ

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


সম্পাদনা: জিইটি অনুরোধকে আদর্শবান হওয়ার বিষয়ে @ অার্টুর্নের মন্তব্যটি দেখুন । তিনি এখানে এটি করার চেয়ে ভালভাবে ব্যাখ্যা করেছেন।


25
@ ফয়সাল, তখন কি আক্রমণকারীর পক্ষে পরিষেবা এ এর ​​জন্য ফর্মের 'লুকানো' উপাদানটি সহজভাবে পড়তে / ক্যাপচার করা এবং ব্যবহারকারীর জন্য সেই অনন্য টোকেনটি তৈরি করা সম্ভব - প্রদত্ত যে তারা ব্যবহারকারীর দ্বারা শুরু হওয়া সেশনে অ্যাক্সেস পেয়েছে? পরিষেবা এ জন্য?
মার্চামিলিয়ন

11
@ মারকামিলিয়ন: যদি কেউ আপনার সেশনের A তে হাইজ্যাক করে থাকে তবে সত্যতা টোকেন আপনাকে রক্ষা করবে না। হাইজ্যাকার একটি অনুরোধ জমা দিতে সক্ষম হবে এবং এটি এগিয়ে যাওয়ার অনুমতি দেওয়া হবে।
ফয়সাল

12
@ জবাবা: রেলগুলি অ্যাকশনকন্ট্রোলার উত্থাপন :: অবৈধ অটেক্সটিকটি টোকেন ব্যতিক্রম যদি সঠিক টোকেন ছাড়াই ফর্ম জমা দেওয়া হয়। আপনি ব্যতিক্রমটি থেকে রেসকিউ করতে পারেন - এবং যে কোনও প্রক্রিয়া আপনি চান করতে পারেন।
ফয়সাল

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

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

137

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

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

<%= form_authenticity_token %>

আপনি যখন নিজের ফর্মটি তৈরি করছেন তখন সঠিক টোকেন তৈরি করতে।

ডকুমেন্টেশনে আপনি এটি সম্পর্কে আরও পড়তে পারেন ।


88

সিএসআরএফ কী?

প্রমাণীকরণ টোকন ক্রস-সাইট অনুরোধ জালিয়াতি (সিএসআরএফ) এর একটি প্রতিবিম্ব। সিএসআরএফ কী?

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

পরিস্থিতি :

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

সিএসআরএফ সমাধান :

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

1
এখানে এই একই ব্যাখ্যা কম সুনির্দিষ্ট কিন্তু কম বিমূর্ত একটি সংস্করণ stackoverflow.com/a/33829607/2810305
Lutz Prechelt

আমি নিশ্চিত নই তবে, আধুনিক ব্রাউজারগুলি কি অন্য ডোমেনে আদর্শবানী অনুরোধগুলি (POST / PUT / DELETE) না পাঠানোর অনুমতি দেয়? আমার ধারণা, ব্রাউজারে নিজেই এই জাতীয় জিনিসগুলির বিরুদ্ধে সুরক্ষা থাকতে হবে
splitByZero

45

সর্বনিম্ন আক্রমণ উদাহরণ যা প্রতিরোধ করা হবে: সিএসআরএফ

আমার ওয়েবসাইটে evil.comআমি আপনাকে নিম্নলিখিত ফর্মটি জমা দিতে রাজি করলাম:

<form action="http://bank.com/transfer" method="post">
  <p><input type="hidden" name="to"      value="ciro"></p>
  <p><input type="hidden" name="ammount" value="100"></p>
  <p><button type="submit">CLICK TO GET PRIZE!!!</button></p>
</form>

আপনি যদি সেশন কুকিজের মাধ্যমে আপনার ব্যাংকে লগইন করেন তবে কুকিগুলি প্রেরণ করা হবে এবং এটি না জেনেও স্থানান্তর করা হবে।

এটি হ'ল সিএসআরএফ টোকেনটি খেলতে আসে:

  • ফর্মটি ফিরে পেয়েছে এমন জিইটি প্রতিক্রিয়া সহ, রেলগুলি একটি দীর্ঘ দীর্ঘ র্যান্ডম লুকানো প্যারামিটার প্রেরণ করে
  • যখন ব্রাউজারটি পোষ্ট অনুরোধ করে, এটি প্যারামিটারটি প্রেরণ করবে এবং সার্ভার কেবল এটি মেললে তা গ্রহণ করবে

সুতরাং একটি খাঁটি ব্রাউজারে ফর্মটি দেখতে এমন হবে:

<form action="http://bank.com/transfer" method="post">
  <p><input type="hidden" name="authenticity_token" value="j/DcoJ2VZvr7vdf8CHKsvjdlDbmiizaOb5B8DMALg6s=" ></p>
  <p><input type="hidden" name="to"                 value="ciro"></p>
  <p><input type="hidden" name="ammount"            value="100"></p>
  <p><button type="submit">Send 100$ to Ciro.</button></p>
</form>

সুতরাং, আমার আক্রমণ ব্যর্থ হবে, যেহেতু এটি পাঠাচ্ছে না authenticity_token প্যারামিটারটি , এবং এটি অনুমান করার কোনও উপায় নেই যেহেতু এটি একটি বিশাল এলোমেলো সংখ্যা is

এই প্রতিরোধ কৌশল বলা হয় কৌশলটিকে সিঙ্ক্রোনাইজার টোকেন প্যাটার্ন

একই উত্স নীতি

তবে আক্রমণকারী জাভাস্ক্রিপ্ট দিয়ে দুটি অনুরোধ করে, একটি টোকেন পড়ার জন্য এবং দ্বিতীয়টি স্থানান্তর করার জন্য কী করে?

কেবলমাত্র সিঙ্ক্রোনাইজার টোকেন প্যাটার্নই এটি প্রতিরোধের জন্য যথেষ্ট নয়!

এখানেই একই উত্স নীতিটি উদ্ধার করতে আসে, যেমনটি আমি এখানে ব্যাখ্যা করেছি: /security/8264/why-is-the-same-origin-policy-so-important/72569# 72569

কীভাবে রেল টোকেন প্রেরণ করে

আচ্ছাদিত: রেলগুলি: কীভাবে সিএসআরএফ_মেটা_ট্যাগ কাজ করে?

মূলত:

  • এইচটিএমএল সাহায্যকারীরা আপনার form_tagজন্য ফর্মটিতে কোনও লুকানো ক্ষেত্র যুক্ত করে যদি এটি কোনও জিইটি ফর্ম না হয়

  • এজেএক্সকে jquery-ujs দ্বারা স্বয়ংক্রিয়ভাবে মোকাবেলা করা হয় , যা metaআপনার শিরোনামে যুক্ত হওয়া উপাদানগুলির টোকনটি পড়ে csrf_meta_tags(ডিফল্ট টেমপ্লেটে উপস্থিত), এবং যে কোনও অনুরোধে যুক্ত করে।

    ইউজেএস ফোকাসে পুরানো ক্যাশেড টুকরো টোকেন আপডেট করার চেষ্টা করে।

অন্যান্য প্রতিরোধের পন্থা


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

@ বিজেএম ৮৮ কোথায় স্ক্রিপ্ট ইনজেক্ট করবেন? আপনার সাইটে, বা আক্রমণকারী সাইটে? যদি আক্রমণ করা সাইট হয়, স্ক্রিপ্ট ইনজেকশন মঞ্জুরি দেওয়া একটি সুপরিচিত সুরক্ষা ত্রুটি, এবং কার্যকরভাবে ওয়েবসাইটটি বন্ধকী করে। প্রতিটি ওয়েবসাইটকে অবশ্যই ইনপুট স্যানিটেশন এর মাধ্যমে লড়াই করতে হবে। চিত্রগুলির জন্য, আমি কীভাবে তাদের আক্রমণে ব্যবহার করতে পারি তা দেখছি না। আক্রমণকারী সাইটে: আপনি পড়ার অনুমতি দেওয়ার জন্য আপনার ব্রাউজারটি সংশোধন করতে পারেন এবং এভাবে স্বয়ংক্রিয়ভাবে ইচ্ছামতো :-) অবরুদ্ধ হয়ে উঠতে পারেন তবে ভদ্র ব্রাউজারগুলি এটি ডিফল্টরূপে প্রতিরোধ করে, চেষ্টা করে দেখুন।
সিরো সান্তিলি 冠状 病毒 审查 六四 事件

43

সত্যতা টোকেন ক্রস-সাইট অনুরোধ জালিয়াতি আক্রমণ (সিএসআরএফ) প্রতিরোধ করতে ব্যবহৃত হয়। সত্যতা টোকেন বুঝতে, আপনাকে প্রথমে সিএসআরএফ আক্রমণ বুঝতে হবে।

CSRF

মনে করুন আপনি এর লেখক bank.com। আপনার সাইটে আপনার একটি ফর্ম রয়েছে যা একটি জিইটি অনুরোধের সাথে অন্য অ্যাকাউন্টে অর্থ স্থানান্তর করতে ব্যবহৃত হয়:

এখানে চিত্র বর্ণনা লিখুন

একজন হ্যাকার কেবল এইচটিটিপি অনুরোধটি সার্ভারে প্রেরণ করতে পেরেছিল GET /transfer?amount=$1000000&account-to=999999, তাই না?

এখানে চিত্র বর্ণনা লিখুন

ভুল। হ্যাকারদের আক্রমণ কাজ করবে না। সার্ভারটি কি মূলত ভাববে?

তাই না? এই লোকটি কে হস্তান্তর শুরু করার চেষ্টা করছে? এটি অ্যাকাউন্টের মালিক নয়, এটি অবশ্যই।

সার্ভার এটি কীভাবে জানতে পারে? কারণ সেখানে কোনও session_idকুকি নেই যাঁকে অনুরোধকারী প্রমাণীকরণ করে।

আপনি যখন আপনার ব্যবহারকারী নাম এবং পাসওয়ার্ড দিয়ে সাইন ইন করেন, সার্ভারটি session_idআপনার ব্রাউজারে একটি কুকি সেট করে। এইভাবে, আপনাকে প্রতিটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড দিয়ে প্রমাণীকরণ করতে হবে না। যখন আপনার ব্রাউজার session_idকুকি পাঠায় , সার্ভারটি জানে:

ওহ, জন ড। আড়াই মিনিট আগে তিনি সফলভাবে সাইন ইন করেছেন। তিনি যেতে ভাল।

একজন হ্যাকার ভাবতে পারে:

হুম। একটি সাধারণ এইচটিটিপি অনুরোধ কাজ করবে না, তবে আমি যদি সেই session_idকুকিতে হাত পেতে পারি , তবে আমি সোনালী হয়ে যাব।

ব্যবহারকারীদের ব্রাউজারে bank.comডোমেনের জন্য সেট কুকিজ রয়েছে । প্রতিবার ব্যবহারকারী ডোমেনটিতে একটি অনুরোধ জানান bank.com, সমস্ত কুকিজই পাঠানো হয়। session_idকুকি সহ ।

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

এটা আসলে খুব সহজ। হ্যাকার আপনাকে কেবল তার ওয়েবসাইটে দেখার জন্য পেতে পারে। তার ওয়েবসাইটে, তিনি নিম্নলিখিত চিত্র ট্যাগ থাকতে পারে:

<img src="http://bank.com/transfer?amount=$1000000&account-to=999999">

যখন ব্যবহারকারীদের ব্রাউজারটি সেই চিত্র ট্যাগ জুড়ে আসে তখন এটি সেই ইউআরএলটিতে একটি জিইটি অনুরোধ জানাবে। এবং যেহেতু অনুরোধটি তার ব্রাউজার থেকে আসে, এটি এর সাথে সম্পর্কিত সমস্ত কুকিজ পাঠিয়ে দেবে bank.com। যদি ব্যবহারকারী সম্প্রতি সাইন ইন করে থাকে bank.com... session_idকুকি সেট হয়ে যাবে, এবং সার্ভারটি মনে করবে যে ব্যবহারকারী মানে 999999 অ্যাকাউন্টে $ 1,000,000 স্থানান্তরিত করবে!

এখানে চিত্র বর্ণনা লিখুন

ঠিক আছে, কেবল বিপজ্জনক সাইটগুলি পরিদর্শন করবেন না এবং আপনি ভাল থাকবেন।

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

এটি অতটা খারাপ না. কেবল জিইটি অনুরোধগুলিই দুর্বল।

সত্য না. একটি ফর্ম যা একটি পোষ্ট অনুরোধ প্রেরণ করে তা গতিশীলভাবে উত্পন্ন করা যেতে পারে। সুরক্ষা সম্পর্কিত রেল গাইডের উদাহরণ এখানে :

<a href="http://www.harmless.com/" onclick="
  var f = document.createElement('form');
  f.style.display = 'none';
  this.parentNode.appendChild(f);
  f.method = 'POST';
  f.action = 'http://www.example.com/account/destroy';
  f.submit();
  return false;">To the harmless survey</a>

সত্যতা টোকেন

যখন আপনার ApplicationControllerএটি আছে:

protect_from_forgery with: :exception

এই:

<%= form_tag do %>
  Form contents
<% end %>

এটিতে সংকলিত হয়:

<form accept-charset="UTF-8" action="/" method="post">
  <input name="utf8" type="hidden" value="&#x2713;" />
  <input name="authenticity_token" type="hidden" value="J7CBxfHalt49OSHp27hblqK20c9PgwJ108nDHX/8Cts=" />
  Form contents
</form>

বিশেষত, নিম্নলিখিত উত্পন্ন হয়:

<input name="authenticity_token" type="hidden" value="J7CBxfHalt49OSHp27hblqK20c9PgwJ108nDHX/8Cts=" />

সিএসআরএফ আক্রমণ থেকে রক্ষা করতে, যদি রেলগুলি একটি অনুরোধের সাথে প্রেরিত সত্যতা টোকেন না দেখে, তবে এটি অনুরোধটিকে নিরাপদ মনে করবে না।

এই টোকেনটি কী তা কোনও আক্রমণকারীকে কীভাবে জানতে হবে? প্রতিটি সময় ফর্মটি তৈরি করার সময় এলোমেলোভাবে একটি আলাদা মান উত্পন্ন হয়:

এখানে চিত্র বর্ণনা লিখুন

একটি ক্রস সাইট স্ক্রিপ্টিং (এক্সএসএস) আক্রমণ - এটিই। তবে এটি একটি ভিন্ন দিনের জন্য একটি আলাদা দুর্বলতা।


39

Authenticity Tokenপাগল 'থেকে পদ্ধতি প্রতিরোধ ক্রস সাইট অনুরোধ জালিয়াতি (CSRF বা XSRF) আক্রমণের' '

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


34

যেহেতু Authenticity Tokenএটি অত্যন্ত গুরুত্বপূর্ণ, এবং 3.0.০+ রেলগুলিতে আপনি ব্যবহার করতে পারেন

 <%= token_tag nil %>

তৈরী করতে

<input name="authenticity_token" type="hidden" value="token_value">

কোথাও


এটি আমার পক্ষে সহায়ক ছিল। আমি XSSলগইন পৃষ্ঠায় করার চেষ্টা করছিলাম , খারাপ কাজের জন্য নয়, প্রাক-ভরা ব্যবহারকারী নাম দিয়ে একটি নতুন সেশন তৈরি করার জন্য। এখন আমি জানি আমি কেবল ব্যবহার করতে পারি value="token_value"
মাইকেল - ক্লে শিরকি

27

সতর্কতা অবলম্বন করুন যদি আপনার একই ক্লায়েন্টের একাধিক, একযোগে অনুরোধ থাকে তবে প্রমাণযোগ্যতা টোকেন প্রক্রিয়া জাতিগত অবস্থার কারণ হতে পারে। এই পরিস্থিতিতে আপনার সার্ভার একাধিক সত্যতা টোকেন তৈরি করতে পারে যখন কেবল একটি থাকা উচিত, এবং ক্লায়েন্টটি কোনও ফর্মের মধ্যে পূর্বের টোকেনটি গ্রহণ করবে তার পরবর্তী অনুরোধে ব্যর্থ হবে কারণ সেশন কুকি টোকনটি ওভাররাইট করা হয়েছে। এই সমস্যাটি সম্পর্কে একটি লিখন এবং সম্পূর্ণরূপে তুচ্ছ সমাধান এখানে নেই: http://www.paulbutcher.com/2007/05/race-conditions-in-rails-sessions-and-how-to-fix-them/


11

পদ্ধতি যেখানে authenticity_tokenপ্রয়োজন

authenticity_token পোস্ট, লাগানো এবং মুছার মতো আদর্শবান পদ্ধতিগুলির ক্ষেত্রে প্রয়োজন, কারণ আইডেম্পোটেন্ট পদ্ধতিগুলি ডেটাগুলিকে প্রভাবিত করে।

এটি প্রয়োজনীয় কেন

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


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

2
@ জিন-ডাউবে, উমা: আদর্শশক্তি মানে হ'ল দু'বার হয়ে গেলে, ক্রিয়াটি কেবল একবার হয়। করুন, করান মুছুন হয় idempotent: w3.org/Protocols/rfc2616/rfc2616-sec9.html কী সম্পত্তি এখানে idempotency নয়, কিন্তু যদি পদ্ধতি পরিবর্তন বা না ডেটা, যা বলা হয় "নিরাপদ পদ্ধতি" বা না।
সিরো সান্তিলি 冠状 病毒 审查 六四 事件 法轮功

6

একটি প্রমাণীকরণ_ টোকেন কী?

এটি রেল অ্যাপ্লিকেশন দ্বারা ব্যবহৃত একটি এলোমেলো স্ট্রিং যা ব্যবহারকারী অন্য অ্যাপ্লিকেশন বা সাইট থেকে নয়, অ্যাপ্লিকেশন পৃষ্ঠা থেকে কোনও ক্রিয়া অনুরোধ করছে বা করছে কিনা তা নিশ্চিত করতে।

কেন একটি প্রমাণীকরণ_ টোকেন প্রয়োজনীয়?

আপনার অ্যাপ্লিকেশন বা সাইটটিকে ক্রস-সাইট অনুরোধ জালিয়াতি থেকে রক্ষা করতে।

কোনও ফর্মটিতে একটি প্রমাণীকরণ_ টোটেন কীভাবে যুক্ত করবেন?

আপনি যদি form_for ট্যাগ ব্যবহার করে একটি ফর্ম তৈরি করে থাকেন তবে একটি প্রমাণীকরণ_ টোকেন স্বয়ংক্রিয়ভাবে যুক্ত হয় অন্যথায় আপনি ব্যবহার করতে পারেন <%= csrf_meta_tag %>

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