সিওআরএস শোষণের জন্য "অরিজিন" শিরোনামটিকে ভণ্ডুল করা থেকে দূষিত কোডটি কী থামাতে হবে?


142

আমি এটি যেভাবে বুঝতে পারি, foo.com এর কোনও পৃষ্ঠায় চলমান কোনও ক্লায়েন্ট-সাইড স্ক্রিপ্ট যদি বার ডট কম থেকে ডেটা অনুরোধ করতে চায়, অনুরোধে এটি অবশ্যই শিরোনামটি নির্দিষ্ট করে Origin: http://foo.com, এবং বারটি অবশ্যই তার প্রতিক্রিয়া জানায় Access-Control-Allow-Origin: http://foo.com

Origin: http://foo.comবার থেকে পৃষ্ঠাগুলি অনুরোধ করার জন্য হেডারকে ছলনা করা থেকে রোহ.কম সাইট থেকে দূষিত কোড বন্ধ করার কী আছে ?


2
আমি বিশ্বাস করি বিন্দুটি হ'ল পৃষ্ঠাটি এখানে (মূলত foo.com) প্রদান করা হয়েছে (এখানে ) থেকে Access-Control-Allow-Originশিরোনাম সরবরাহ করতে হবে অন্যথায় ব্রাউজারটি অনুরোধটিকে অনুমতি দেয় না bar.com
ক্রিস হেইস

2
এই পোস্টটির মাধ্যমে পড়া ব্রাউজার, উত্সের সার্ভার এবং টার্গেট সার্ভারের মধ্যে কর প্রক্রিয়া সম্পর্কে আমার বুঝতে সাহায্য করেছে। html5rocks.com/en/tutorials/cors
brendonparker

5
@ ক্রিসহেইস সিআরএস মোটেও কাজ করে না এটি। আপনি অনুমানটি , বা বিষয়টির এই দুর্দান্ত এমডিএন উইকি পৃষ্ঠাটি দেখে আরও কিছুটা পড়তে পারেন ।
রায় নিকোলাস

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

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

উত্তর:


149

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

মনে রাখবেন: সিওআরএস সুরক্ষা নয়। আপনার সাইটটি সুরক্ষিত করতে CORS এর উপর নির্ভর করবেন না। আপনি যদি সুরক্ষিত ডেটা পরিবেশন করে থাকেন তবে সেই ডেটা সুরক্ষিত করতে কুকিজ বা OAuth টোকেন বা Originশিরোনাম ছাড়া অন্য কিছু ব্যবহার করুন । Access-Control-Allow-OriginCORS শুধুমাত্র নির্দেশনা যা উদ্ভব ক্রশ-অরিজিন অনুরোধ করার জন্য অনুমতি দেওয়া হবে উচিত হেডার। এর বেশি কিছু করার জন্য এটির উপর নির্ভর করবেন না।


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

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

9
এবং কেবল স্পষ্ট করে বলতে গেলে, দূষিত ব্যবহারকারী কেবল এমন একটি ব্রাউজারের উদাহরণ তৈরি করতে পারেন যা তাদের অরিজিনের শিরোনামের উপর ম্যানুয়াল নিয়ন্ত্রণের অনুমতি দেয় এবং তারপরে সাধারণ ব্যবহারকারী, কুকিজ, এজাক্স এবং সমস্ত কিছুর ছদ্মবেশ ধারণ করে।
জর্ডান রিজার 18

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

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

35

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


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

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

এটি পরীক্ষা করতে, আমি দুটি ক্লায়েন্ট ডোমেন এবং একটি সার্ভার ডোমেন সেট আপ করেছি। আমি সার্ভারে একটি কর্স হোয়াইটলিস্ট অন্তর্ভুক্ত করেছি, যা ক্লায়েন্ট 1 থেকে ক্লায়েন্ট 2 এর চেয়ে নয় বরং CORS অনুরোধগুলি মঞ্জুরি দিয়েছিল both

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

আমি যে ডকুমেন্টেশন পড়েছি তাতে বলা হয়েছে যে Access-Control-Allow-Originপ্রাপ্ত মানটি অবশ্যই Originঅনুরোধে প্রেরিত মানের সাথে মেলে । তারা মিলছে, তাই আমি ক্রোমে নিম্নলিখিত বার্তাটি দেখে অবাক হয়েছি:

XMLHttpRequest লোড করতে পারে না http://server.dev/test। 'অ্যাক্সেস-কন্ট্রোল-অলজন-অরিজিন' শিরোনামটির একটি মান রয়েছে http://client1.dev যা সরবরাহিত উত্সের সমান নয়। উত্স http://client2.dev তাই অ্যাক্সেস অনুমোদিত নয়।

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


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

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

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

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

3
@ নচার্নো আমি মনে করি আপনার উদ্বোধনী বিবৃতিটি কিছুটা বিভ্রান্তিকর। There's nothing stopping malicious code from spoofing the origin-> হ্যাঁ আছে, জাভাস্ক্রিপ্ট সেট করতে পারবেন না Origin। হ্যাঁ, কোনও ব্যবহারকারী তাদের ব্রাউজারটি সংশোধন করতে পারেন / উত্স পরিবর্তন করতে ফিজার ব্যবহার করতে পারেন, তবে এটিই নয় যে সিওআরএস এর বিরুদ্ধে রক্ষা করছে; আক্রমণকারী নিয়ন্ত্রিত ওয়েবসাইটগুলি অরিজিন পরিবর্তন করতে পারে না, যা গুরুত্বপূর্ণ।
আরজেফালকোনার

13

কেবল একটি নম্র মোড়ানো:

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

প্রশ্ন: যদি কোনও অনুরোধ এসওপি মেনে না চলে, তবে ব্রাউজারটি কি তা ব্লক করে?
উত্তর: না, এটি ব্রাউজারগুলির কর্তৃত্বের বাইরে। ব্রাউজারগুলি কেবল ক্রস অরিজিন অনুরোধগুলি প্রেরণ করে এবং প্রতিক্রিয়ার জন্য অপেক্ষা করুন - কলটি সার্ভারের মাধ্যমে Access-Control- * শিরোলেখের মাধ্যমে বৈধ ইঙ্গিত দেওয়া হয়েছে কিনা তা দেখার জন্য wait যদি সার্ভার Access-Control-Allow-Originহেডারকে ফেরত না পাঠায় , কলারের উত্সকে প্রতিধ্বনিত করে না, বা শিরোনামটিতে ফিরে না পাঠায় *, তবে ব্রাউজারটি কলারের প্রতিক্রিয়া সরবরাহ করা থেকে বিরত থাকে all

প্রশ্ন: এর অর্থ কি আমি ঠক করতে পারি না Origin?
উত্তর: ব্রাউজারে এবং স্ক্রিপ্টিং ব্যবহার করে আপনি Originব্রাউজারের নিয়ন্ত্রণে থাকায় ওভাররাইড করতে পারবেন না । তবে, যদি আপনি নিজেকে হ্যাক করতে চান তবে আপনি ব্রাউজারের এক্সটেনশনগুলি বা আপনার মেশিনে ইনস্টল করা অন্যান্য সরঞ্জামগুলি ব্যবহার করে আপনার ব্রাউজার থেকে আসা কলগুলিকে টেম্পার করতে পারেন। এছাড়াও আপনি ইস্যু করতে পারে HTTPব্যবহার করে কল curl, Python, C#, ইত্যাদি এবং পরিবর্তন Originকৌতুক সার্ভারে হেডার।

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

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


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