অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি-উত্স সেট করার সুরক্ষা ঝুঁকিগুলি কী কী?


124

ক্রস-সাবডোমেন এজ্যাক্স কল করতে সক্ষম হওয়ার জন্য আমাকে সম্প্রতি সেট Access-Control-Allow-Originকরতে *হয়েছিল।
এখন আমি সাহায্য করতে পারছি না কিন্তু অনুভব করতে পারি যে আমি আমার পরিবেশটিকে সুরক্ষা ঝুঁকিতে ফেলেছি।
আমি যদি এটি ভুল করে থাকি তবে দয়া করে আমাকে সহায়তা করুন।

উত্তর:


69

সাড়া দিয়ে Access-Control-Allow-Origin: *, অনুরোধ করা সংস্থানটি প্রতিটি উত্সের সাথে ভাগ করার অনুমতি দেয়। এর মূল অর্থ হ'ল যে কোনও সাইট আপনার সাইটে একটি এক্সএইচআর অনুরোধ প্রেরণ করতে পারে এবং সার্ভারের প্রতিক্রিয়া অ্যাক্সেস করতে পারে যা আপনি যদি এই CORS প্রতিক্রিয়াটি প্রয়োগ না করে থাকেন তবে কেস হবে না।

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

এটি প্রকৃতপক্ষে একটি সুরক্ষা ঝুঁকি তৈরি করে, বিশেষত যদি আপনি কেবলমাত্র নির্বাচিত সংস্থার জন্য নয় তবে প্রতিটি সংস্থার জন্য সম্পদ ভাগ করে নেওয়ার অনুমতি দেন। এই প্রসঙ্গে আপনার একবার নজর দেওয়া উচিত সিওআরএস সক্ষম করা কখন নিরাপদ?


2
আপনি যদি ভাগ করা লেখক অ্যাক্সেস কীভাবে সুরক্ষা ঝুঁকির সুনির্দিষ্ট উদাহরণ দিতে পারেন তবে আমি এটিকে অগ্রাহ্য করব।
পেট্রাস থেরন

1
@ গম্বো স্থির সামগ্রী সম্পর্কে কী? (যেমন স্ট্যাটিক সিডিএন বিষয়বস্তু, যেমন জাভাস্ক্রিপ্টস, সিএসএস, স্ট্যাটিক এইচটিএমএলস ইত্যাদি) সেগুলিতে কোনও সুরক্ষার সমস্যা রয়েছে Access-Control-Allow-Origin: *? কোনও নোগিন ইত্যাদি থাকবে না, তারা কি সবার কাছে প্রকাশ্য?
উমুত বেনজার

2
@ উমুটবেনজার ঠিক আছে
গম্বো

25
আসলে এই উত্তরটি বর্তমান সিওআরএস মান অনুযায়ী একেবারেই সঠিক নয় : "শংসাপত্রগুলি সমর্থন করে এমন একটি সংস্থার জন্য স্ট্রিং '*' ব্যবহার করা যাবে না।" সুতরাং আপনি কুকিজ, ক্যাশেড HTTP প্রমাণীকরণ বা ক্লায়েন্ট এসএসএল শংসাপত্রগুলির আকারে ক্ষণস্থায়ী প্রমাণীকরণ ব্যবহার করার জন্য একটি অনুরোধকে জোর করতে পারবেন না। তবে ওয়েবসাইটটি যদি প্রমাণীকরণের জন্য স্থানীয় স্টোরেজ ব্যবহার করা হয় তবে সমস্যা হবে।
নিক্লাস বি।

2
@ নিক্লাসবি: আমি এই দৃশ্যের চেষ্টা করেছিলাম এবং ক্রোম আপনার উল্লিখিত হিসাবে সিওআরএস মান অনুসরণ করে। অর্থাত " " স্ট্রিং একটি শংসাপত্রের অনুরোধের সাথে সমর্থন করে না। এখানে কি Chrome এর দ্বারা রিপোর্ট করা হয়: "XMLHttpRequest- এর লোড করতে পারব না স্থানীয় হোস্ট: 12346 / হ্যালো একটি ওয়াইল্ড কার্ড '। ' থেকে ব্যবহার করা যাবে না অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুর করুন বংশোদ্ভূত 'হেডার যখন পরিচয়পত্র পতাকা সত্য মূল।' স্থানীয় হোস্ট: 12345 ' সুতরাং অ্যাক্সেসের অনুমতি নেই an এক্সএমএলএইচটিপিআরকুয়েস্টের শংসাপত্রগুলির মোডটি শংসাপত্রের বৈশিষ্ট্য সহ নিয়ন্ত্রণ করা হয় ""
ফ্যাকোটাম

37

Access-Control-Allow-Origin: *যে কোনও সংস্থায় স্ট্যান্ডার্ড শংসাপত্রগুলি (কুকিজ, বেসিক লেখক, টিএলএস ক্লায়েন্ট শংসাপত্র) ব্যতীত অন্য কোনও কিছু দ্বারা সুরক্ষিত ব্যক্তিগত ডেটা না থাকলে অন্য যে কোনও সংস্থান যুক্ত করা সম্পূর্ণ নিরাপদ ।

যেমন: কুকি দ্বারা সুরক্ষিত ডেটা নিরাপদ

কল্পনা করুন https://example.com/users-private-data, যা ব্যবহারকারীর লগ ইন থাকা অবস্থায় নির্ভর করে ব্যক্তিগত ডেটা প্রকাশ করতে পারে। এই রাষ্ট্রটি একটি সেশন কুকি ব্যবহার করে। এটি এই সংস্থানটিতে যুক্ত করা নিরাপদAccess-Control-Allow-Origin: * , কারণ এই শিরোনামটি কেবল প্রতিক্রিয়া অ্যাক্সেসের অনুমতি দেয় যদি কুকিজ ছাড়াই অনুরোধ করা হয় এবং কুকিজের ব্যক্তিগত ডেটা পাওয়ার প্রয়োজন হয়। ফলস্বরূপ, কোনও ব্যক্তিগত তথ্য ফাঁস হয় না।

উদাহরণস্বরূপ: অবস্থান / আইপি / অভ্যন্তরীণ নেটওয়ার্ক দ্বারা সুরক্ষিত ডেটা নিরাপদ নয় (দুর্ভাগ্যক্রমে ইন্ট্রানেট এবং ঘরের সরঞ্জামগুলির সাথে সাধারণ):

কল্পনা করুন https://intranet.example.com/company-private-data, যা প্রাইভেট কোম্পানির ডেটা প্রকাশ করে তবে আপনি কেবলমাত্র কোম্পানির ওয়াইফাই নেটওয়ার্কে থাকলে এটি অ্যাক্সেস করা যায়। এটা নিরাপদ নয় যোগ করার জন্য Access-Control-Allow-Origin: *, এই সম্পদ যেমন মান পরিচয়পত্র ছাড়া অন্য কিছু ব্যবহার দ্বারা সুরক্ষিত। অন্যথায়, কোনও খারাপ স্ক্রিপ্ট আপনাকে ইন্ট্রনেটের টানেল হিসাবে ব্যবহার করতে পারে।

চলতি নিয়ম

কোনও ব্যবহারকারী যদি ছদ্মবেশী উইন্ডোতে সংস্থানটি ব্যবহার করে তবে তারা কী দেখতে পাবে তা কল্পনা করুন। আপনি যদি এই সামগ্রীটি দেখতে (ব্রাউজারের উত্স কোড সহ) দেখে খুশি হন তবে এটি যুক্ত করা নিরাপদ Access-Control-Allow-Origin: *


"এটি কেবল কুকিজ ছাড়াই অনুরোধগুলিকে অনুমতি দেয়" যেমন এটি কেবল কুকিজের সাথে অনুরোধগুলিই অনুমোদন করে "?
ডিজে কর্ডহোজ

3
নিবন্ধন করুন Access-Control-Allow-Origin: *কেবল কুকিজ ছাড়াই অনুরোধগুলির অনুমতি দেয় । আমি উত্তরটি কিছুটা স্পষ্ট করার জন্য সম্পাদনা করেছি।
জাফা দ্য কেইক

"*" এবং কেসটির মধ্যে পার্থক্য কী এই শিরোনামটি ছাড়াই। এটা কি একই?
নিগ্রিমিস্টবাদী

আমি পছন্দ করি যদি "অন্যথায়, কোনও খারাপ স্ক্রিপ্ট আপনাকে ইন্ট্রনেটের টানেল হিসাবে ব্যবহার করতে পারে" আরও ব্যাখ্যা করা যায়।
স্যাম রুয়েবি

@ নিগ্রিমিস্ট তারপরে প্রিফলাইট অনুরোধটি ব্যর্থ হবে এবং রিসোর্স অ্যাক্সেস ব্লক করা হবে
iamareebjamal

9

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

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

সুতরাং, সৃজনশীল স্ক্রিপ্টিং ক্ষমতা সহ যে কেউ সহজেই পুরো শিরোনামটিকে এতে উপস্থাপিত করতে পারে না।

আরও দেখুন অ্যাকসেস-নিয়ন্ত্রণ-মঞ্জুর করুন বংশোদ্ভূত সেটিং সম্ভাব্য নিরাপত্তা বিষয়ক


এখন আসলে প্রশ্নের উত্তর দিতে

আমি সাহায্য করতে পারি না কিন্তু অনুভব করতে পারি যে আমি আমার পরিবেশটিকে সুরক্ষা ঝুঁকিতে ফেলেছি

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


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

3
হ্যাঁ, Access-Control-Allow-Origin *একটি দূষিত ওয়েবসাইটে সেট করা যা স্ক্রিপ্টগুলিকে পাসওয়ার্ড চুরি করতে হোস্ট করে তা
দৃ disc়ভাবে

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

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

3
@ কম্পনপাইক আমাকে আরও সাধারণ উদাহরণ দেই ... এটি সর্বদা ঘটে। মনে করুন আপনার কাছে একটি সাধারণ হোম রাউটার রয়েছে যেমন লিংকসিস ডাব্লুআরটি 5৪ জি বা কিছু। মনে করুন যে রাউটার ক্রস-অরিজিনের অনুরোধগুলিকে অনুমতি দেয়। আমার ওয়েব পৃষ্ঠায় একটি স্ক্রিপ্ট সাধারণ রাউটার আইপি ঠিকানার (যেমন 192.168.1.1) HTTP অনুরোধ করতে পারে এবং আক্রমণগুলিকে অনুমতি দেওয়ার জন্য আপনার রাউটারটিকে পুনরায় কনফিগার করতে পারে। এমনকি এটি আপনার রাউটারকে ডিডিওএস নোড হিসাবে সরাসরি ব্যবহার করতে পারে। (বেশিরভাগ রাউটারের টেস্ট পৃষ্ঠাগুলি রয়েছে যা পিংস বা সাধারণ এইচটিটিপি সার্ভার চেকের অনুমতি দেয় These এগুলি ম্যাসেজের জন্য অপব্যবহার করা যেতে পারে))
ব্র্যাড

7

মন্তব্য হিসাবে পোস্ট করা এখানে 2 টি উদাহরণ রয়েছে, যখন একটি ওয়াইল্ডকার্ড সত্যিই সমস্যাযুক্ত:

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

- ব্র্যাড

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

- ব্র্যাড

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


8
ব্যতীত এটি কাজ করবে না। "শংসাপত্রগুলি সমর্থন করে এমন কোনও সংস্থার জন্য '*' স্ট্রিং ব্যবহার করা যাবে না।" w3.org/TR/cors/#resource-requests
বায়ো

@ বায়োটপ ব্রাউজার কীভাবে যে পৃষ্ঠাগুলির প্রমাণীকরণের প্রয়োজন হয় এবং যা শিরোনামে অন্যান্য ডেটা আছে তাদের মধ্যে কীভাবে পার্থক্য করে?
বিবাহের

সরবরাহিত লিঙ্কটি পড়ার পরে, "সমর্থন শংসাপত্রগুলির পতাকা" রয়েছে যা এই উদ্দেশ্যে ব্যবহৃত হয়। এটি ম্যানুয়ালি সেট করা হয়েছে বলে মনে হয়, সম্ভবতঃ যদি কেউ CORS সঠিকভাবে সেট আপ করতে না জানত তবে তারাও এই পতাকাটি ভুলভাবে পেতে পারে, তাই আমি বিশ্বাস করি যে উপরের দুর্বলতাগুলি সম্ভব।
বিবাহের

2
@Wedomom পতাকাটি অনুরোধটি করে এমন একটি দ্বারা সেট করা হয়। যাইহোক, উপরের পরিস্থিতিগুলি সিএসআরএফ আক্রমণগুলির উদাহরণ। '*' উত্সকে অনুমতি দেওয়া আপনাকে আরও দুর্বল করে তুলবে না তবে আপনি ইতিমধ্যে (সম্ভবত বিরল ক্ষেত্রে কিছুটা হলেও)। বেশিরভাগ ক্ষেত্রে আপনি ফর্মগুলি ব্যবহার করে দূষিত ক্রস-সাইট অনুরোধ করতে পারেন যাতে CORS এর কোনও ব্যাপার না। আপনার যখন একটি এজ্যাক্স অনুরোধ করতে হবে, প্রি-ফ্লাইট অনুরোধগুলি আসবে (এসিএও: '*' এবং অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-শংসাপত্র: 'সত্য') এ ব্রাউজারটি আসবে এমন পয়েন্ট।
বায়ো

0

এমন পরিস্থিতিতে যেখানে সার্ভারের নীচে শিরোনামগুলি সেট করে CORS সম্পূর্ণ অক্ষম করার চেষ্টা করে।

  • অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স: * (ব্রাউজারকে বলে যে সার্ভার যে কোনও ORIGIN এর ক্রস সাইট অনুরোধ গ্রহণ করে)

  • অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-শংসাপত্রসমূহ: সত্য (ব্রাউজারকে বলে যে ক্রস সাইটের অনুরোধগুলি কুকিজ পাঠাতে পারে)

ব্রাউজারগুলিতে কার্যকর একটি ব্যর্থ নিরাপদ রয়েছে যার ফলে নীচে ত্রুটি হবে

"Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘*’"

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

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

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