এক্সএমএলএইচটিপিআরকোয়েস্ট XXX কোনও 'অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স' শিরোনাম লোড করতে পারে না


111

TL; ড; একই উত্স নীতি সম্পর্কে

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

XMLHttpRequest https://www.example.com/ লোড করতে পারে না অনুরোধকৃত উত্সটিতে কোনও 'অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স' শিরোনাম উপস্থিত নেই। উত্স ' http: // লোকালহোস্ট: 4300 ' তাই অ্যাক্সেসের অনুমতি নেই।

পৃষ্ঠাটিতে অ্যাক্সেস করা থেকে আমাকে কী বাধা দিচ্ছে?


আমি ওয়েবসাইটে কাজ করছি এবং পাঁচ মিনিট আগে এটি ঠিক ছিল।
পিটার ডেভিড কার্টার

1
এটি কি কর্স হেডার জারি করে? সম্ভবত আপনি যদি কিছু কোড ভাগ করে নেন তবে এটি দেখতে আরও সহজ হবে
জারোমন্ডা এক্স

-এর সম্ভাব্য। আমি কোন বিভাগটি জানতে চাইতে হবে? আমি কেবল ব্যাকবোন.মারিয়নেট স্টাফগুলি বেশিরভাগ ক্ষেত্রেই করি ...
পিটার ডেভিড কার্টার

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

আমি আপনার অপারেশনের ভিতরে সার্ভারের পাশের কাউকে জিজ্ঞাসা করব। আপনি যদি আগে এটি অ্যাক্সেস করতে সক্ষম হন তবে তারা অবশ্যই এটি আপনার উপর পরিবর্তন করেছে।
ল্যারি লেন

উত্তর:


205

tl; dr - প্রাসঙ্গিক অংশগুলি সন্ধান করা আরও সহজ করার জন্য উত্তরের একটি সংক্ষিপ্তসার এবং উত্তরের শিরোনাম রয়েছে। সবকিছু পড়া যদিও যেমন বুঝতে জন্য দরকারী পটভূমি প্রদান করে সুপারিশ করা হয় কেন যে এইজন্য কিভাবে তোলে কিভাবে বিভিন্ন পরিস্থিতিতে সহজ প্রযোজ্য হয়।

একই উত্স নীতি সম্পর্কে

এটি একই উত্স নীতি । এটি ব্রাউজারগুলির দ্বারা প্রয়োগ করা একটি সুরক্ষা বৈশিষ্ট্য।

আপনার বিশেষ ক্ষেত্রে এটি XMLHttpRequest এর জন্য কীভাবে প্রয়োগ করা হচ্ছে তা দেখানো হচ্ছে (এবং আপনি আনতে গেলে আপনি অভিন্ন ফলাফল পাবেন), তবে এটি অন্যান্য জিনিসগুলিতেও প্রযোজ্য (যেমন কোনও ছবিতে একটি <canvas>লোড হওয়া ডকুমেন্ট বা একটিতে লোড হওয়া ডকুমেন্ট <iframe>) কেবল মাত্র কিছুটা আলাদা বাস্তবায়ন।

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

এসওপি-র প্রয়োজনীয়তার প্রমাণ দেয় এমন স্ট্যান্ডার্ড দৃশ্যাবলী তিনটি অক্ষর দিয়ে প্রদর্শিত হতে পারে :

  • অ্যালিস একটি ওয়েব ব্রাউজারযুক্ত ব্যক্তি
  • বব একটি ওয়েবসাইট চালায় ( https://www.[website].com/আপনার উদাহরণে)
  • ম্যালরি একটি ওয়েবসাইট চালায় ( http://localhost:4300আপনার উদাহরণে)

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

অ্যালিস ম্যালরির ওয়েবসাইট পরিদর্শন করে যার কিছু জাভাস্ক্রিপ্ট রয়েছে যার কারণে অ্যালিসের ব্রাউজার ববের ওয়েবসাইটে HTTP অনুরোধ করতে পারে (তার আইপি ঠিকানা থেকে তার কুকিজ ইত্যাদি)। এটি ব্যবহার XMLHttpRequestও পড়ার মতো সহজ হতে পারে responseText

ব্রাউজারের একই অরিজিন নীতি যে জাভাস্ক্রিপ্টকে বব ওয়েবসাইটের দ্বারা ফিরিয়ে দেওয়া ডেটা (যা বব এবং অ্যালিস ম্যালরি অ্যাক্সেস করতে চান না) পড়তে বাধা দেয়। (নোট যে আপনার, উদাহরণস্বরূপ, একটি চিত্র একটি ব্যবহার প্রদর্শন করতে পারেন <img>উদ্ভব জুড়ে উপাদান ইমেজ বিষয়বস্তু জাভাস্ক্রিপ্ট (অথবা ম্যালরি উন্মুক্ত নয় কারণ) ... যদি না আপনি মিশ্রণ মধ্যে ক্যানভাস যে ক্ষেত্রে আপনি নিক্ষেপ করবে একটি একই বংশোদ্ভূত উৎপন্ন লঙ্ঘন ত্রুটি)।


কেন একই অরিজিন নীতি প্রযোজ্য যখন আপনি মনে করেন না এটি করা উচিত

যে কোনও ইউআরএল-এর জন্য এটি সম্ভব যে এসওপি প্রয়োজন হয় না। এই ক্ষেত্রে যেখানে বেশ কয়েকটি সাধারণ পরিস্থিতি হ'ল:

  • অ্যালিস, বব এবং ম্যালরি একই ব্যক্তি।
  • বব সম্পূর্ণ জনসাধারণের তথ্য সরবরাহ করছে

… তবে উপরের যে কোনও একটি সত্য কিনা ব্রাউজারটি জানার উপায় নেই, সুতরাং বিশ্বাস স্বয়ংক্রিয় নয় এবং এসওপি প্রয়োগ করা হয়েছে। ব্রাউজারটি কোনও অন্য ওয়েবসাইটে দেওয়া ডেটা দেবে তার আগে স্পষ্টভাবে অনুমতি দিতে হবে।


কেন একই উত্স নীতিটি কেবল ওয়েব পৃষ্ঠায় জাভাস্ক্রিপ্টে প্রয়োগ হয়

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

তৃতীয় পক্ষ নেই (ম্যালরি) যাকে ঝুঁকি হিসাবে বিবেচনা করা হয়।

*ক্রস-অরিজিন সমস্যাগুলি এড়াতে সাবধানতার সাথে ব্রাউজারের এক্সটেনশানগুলি লিখতে হবে। উদাহরণস্বরূপ Chrome ডকুমেন্টেশন দেখুন


আপনি জেএস দিয়ে না পড়েই কেন পৃষ্ঠায় ডেটা প্রদর্শন করতে পারেন

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


CORS

Access-Control-Allow-OriginHTTP- র প্রতিক্রিয়া হেডারের মধ্যে ত্রুটি বার্তা অংশ উল্লেখ করা CORS মান যা বব স্পষ্টভাবে অ্যালিসের ব্রাউজারের মাধ্যমে ডেটা অ্যাক্সেস করতে ম্যালরি এর সাইটের করার অনুমতি দেওয়ার মঞ্জুরি দেয়।

একটি মৌলিক বাস্তবায়নের অন্তর্ভুক্ত হবে:

Access-Control-Allow-Origin: *

… প্রতিক্রিয়া শিরোনামে কোনও ওয়েবসাইটকে ডেটা পড়ার অনুমতি দেয়।

Access-Control-Allow-Origin: http://example.com/

… কেবলমাত্র একটি নির্দিষ্ট সাইটকে এটি অ্যাক্সেস করার অনুমতি দেবে এবং বব Origin অনুরোধ শিরোনামের ভিত্তিতে একাধিক, কিন্তু সমস্তগুলি নয়, সাইটগুলিকে এটি অ্যাক্সেস করার অনুমতি দিয়ে গতিশীলভাবে এটি তৈরি করতে পারে।

বব কীভাবে প্রতিক্রিয়া শিরোনাম সেট করে তার নির্দিষ্টকরণ ববের এইচটিটিপি সার্ভার এবং / অথবা সার্ভার-সাইড প্রোগ্রামিং ভাষার উপর নির্ভর করে। নেই বিভিন্ন সাধারণ কনফিগারেশনের জন্য গাইড একটি সংগ্রহ যে শক্তি সাহায্যের।

যেখানে CORS বিধি প্রয়োগ করা হয় তার মডেল

নোট: কিছু অনুরোধগুলি জটিল এবং একটি প্রিফলাইট বিকল্পগুলি অনুরোধ প্রেরণ করুন যা ব্রাউজারটি জিইটি / পোস্ট / পুট / জেএস যে যা অনুরোধ করতে চায় তা প্রেরণ করার আগে সার্ভারকে তার প্রতিক্রিয়া জানাতে হবে। কেবল Access-Control-Allow-Originনির্দিষ্ট ইউআরএলগুলিতে যুক্ত হওয়া সিওআরএসের প্রয়োগগুলি প্রায়শই এর দ্বারা বিভক্ত হয়ে যায়।


স্পষ্টতই সিওআরএসের মাধ্যমে অনুমতি দেওয়া হ'ল বব কেবল তখনই তা করবে:

  • তথ্য ব্যক্তিগত বা না ছিল
  • ম্যালরি বিশ্বাসযোগ্য ছিল

তবে আমি বব নই!

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

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


ত্রুটি বার্তাগুলি যা "প্রিফলাইটের জন্য প্রতিক্রিয়া" উল্লেখ করে

কিছু ক্রস উত্স অনুরোধ প্রাকফ্লাইটেড হয়

এটি যখন ঘটে (মোটামুটি কথা বললে) আপনি ক্রস-আর্জি অনুরোধ করার চেষ্টা করেন যে:

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

আপনি যদি সঠিকভাবে এমন কিছু করছেন যা একটি প্রিফলাইট প্রয়োজন

এইসব ক্ষেত্রে তারপর এই উত্তরটি বাকি এখনও প্রযোজ্য কিন্তু আপনি নিশ্চিত করুন যে সার্ভার preflight অনুরোধের জন্য (শুনতে পারেন যা হতে হবে করতে হবে OPTIONS(এবং GET, POSTবা যাই হোক না কেন আপনি পাঠাতে) সাড়া এটা করার অধিকার দিয়ে চেষ্টা এবং হয় Access-Control-Allow-Originহেডার কিন্তু Access-Control-Allow-Methodsএবং Access-Control-Allow-Headersআপনার নির্দিষ্ট HTTP- র পদ্ধতি বা হেডার অনুমতি দেয়।

আপনি যদি ভুল করে একটি প্রিফলাইট ট্রিগার করছেন

কখনও কখনও লোকেরা অ্যাজাক্স অনুরোধগুলি নির্মাণ করার চেষ্টা করার সময় ভুল করে এবং কখনও কখনও এগুলি একটি প্রিফলাইটের প্রয়োজনীয়তার প্রয়োজন হয়। যদি APIটি ক্রস-অরিজিনের অনুরোধগুলিকে মঞ্জুরি দেওয়ার জন্য ডিজাইন করা হয় তবে প্রিফলাইটের প্রয়োজন এমন কোনও কিছুর প্রয়োজন হয় না, তবে এটি অ্যাক্সেস ভেঙে দিতে পারে।

এর মধ্যে সাধারণ ভুলগুলি অন্তর্ভুক্ত করে:

  • Access-Control-Allow-Originঅনুরোধে এবং অন্যান্য সিওআরএস প্রতিক্রিয়া শিরোনাম লাগানোর চেষ্টা করছি । এগুলি অনুরোধের অন্তর্ভুক্ত নয়, সহায়ক কিছু করবেন না (এমন কোনও অনুমতি সিস্টেমের কী উপায় যেখানে আপনি নিজেকে অনুমতি দিতে পারেন?) এবং অবশ্যই প্রতিক্রিয়াতে উপস্থিত হতে হবে।
  • Content-Type: application/jsonজিইটি অনুরোধে শিরোনাম লাগানোর চেষ্টা করা হচ্ছে যাতে সামগ্রীর সামগ্রী বর্ণনা করার জন্য কোনও অনুরোধের বডি নেই (সাধারণত যখন লেখক বিভ্রান্ত হন Content-Typeএবং Accept)।

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


অস্বচ্ছ প্রতিক্রিয়া

কখনও কখনও আপনার একটি HTTP অনুরোধ করা প্রয়োজন, তবে আপনাকে প্রতিক্রিয়াটি পড়ার দরকার নেই। যেমন আপনি যদি রেকর্ডিংয়ের জন্য সার্ভারে একটি লগ বার্তা পোস্ট করছেন।

আপনি ব্যবহার করে থাকেন এপিআই (বদলে ), তারপর আপনি এটি ব্যবহার CORS চেষ্টা না কনফিগার করতে পারেন।fetchXMLHttpRequest

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

এটি আপনাকে একটি সাধারণ অনুরোধ করতে দেবে, প্রতিক্রিয়াটি দেখতে পাবে না এবং ত্রুটি বার্তাগুলি দিয়ে বিকাশকারী কনসোলটি পূরণ করবে না।

এটি কীভাবে করবেন তা যখন আপনি একটি অনুরোধ ব্যবহার করে অনুরোধ করেন fetchএবং সিওআরএস সহ প্রতিক্রিয়া দেখার অনুমতি না পান তখন প্রদত্ত ক্রোম ত্রুটি বার্তা দ্বারা ব্যাখ্যা করা হয় :

সিওআরএস নীতি দ্বারা https://example.com/' https://example.net' উত্স থেকে ' ' আনতে অ্যাক্সেস অবরুদ্ধ করা হয়েছে: Access-Control-Allow-Originঅনুরোধকৃত উত্সটিতে কোনও ' ' শিরোনাম উপস্থিত নেই। যদি কোনও অস্বচ্ছ প্রতিক্রিয়া আপনার প্রয়োজনগুলি সরবরাহ করে তবে অনুরোধের মোডটি 'নো-কর্স' এ সেট করুন CORS অক্ষম করে রিসোর্স আনতে।

এভাবে:

fetch("http://example.com", { mode: "no-cors" });

সিওআরএসের বিকল্প

jsonp

বব জেএসওএনপি-র মতো হ্যাক ব্যবহার করে ডেটা সরবরাহ করতে পারে যা সিওআরএস আসার আগে লোকেরা ক্রস- আদি অ্যাজাক্সকে করেছিল।

এটি একটি জাভাস্ক্রিপ্ট প্রোগ্রাম আকারে ডেটা উপস্থাপিত করে কাজ করে যা ম্যালোরির পৃষ্ঠায় ডেটাটি ইনজেক্ট করে।

এটি ম্যালরির বিশ্বাস ববকে দূষিত কোড সরবরাহ না করার প্রয়োজন requires

সাধারণ থিমটি নোট করুন: ডেটা সরবরাহকারী সাইটের ব্রাউজারকে বলতে হবে যে কোনও তৃতীয় পক্ষের সাইটের ব্রাউজারে প্রেরণ করা ডেটা অ্যাক্সেস করা ঠিক আছে OK

যেহেতু জেএসএনপি <script>কোনও জাভাস্ক্রিপ্ট প্রোগ্রাম আকারে ডেটা লোড করার জন্য একটি উপাদান যুক্ত করে যা এই পৃষ্ঠায় ইতিমধ্যে একটি ফাংশন বলে, তাই ইউএসএলতে জেএসএনপি কৌশল ব্যবহারের চেষ্টা করা হবে যা জেএসওএন ফেরত দেয় - সাধারণত একটি সিওআরবি ত্রুটি সহ - কারণ জেএসএনপি জাভাস্ক্রিপ্ট নয়।

দুটি সংস্থানকে একটি একক উত্সে সরান

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

বদলি

ম্যালরি ডেটা আনার জন্য সার্ভার-সাইড কোড ব্যবহার করতে পারে (যা সে তার সার্ভার থেকে যথারীতি এইচটিটিপি-র মাধ্যমে এলিসের ব্রাউজারে যেতে পারে)।

এটি হয়:

  • CORS শিরোনাম যুক্ত করুন
  • প্রতিক্রিয়াটি JSONP এ রূপান্তর করুন
  • এইচটিএমএল ডকুমেন্ট হিসাবে একই উত্স উপর বিদ্যমান

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

এটি হওয়ার জন্য ববকে কোনও অনুমতি দেওয়ার দরকার পড়েনি।

এখানে ম্যালরি এবং বব এর মধ্যে যেহেতু এখানে সুরক্ষা সম্পর্কিত কোনও প্রভাব নেই। মোলরিকে অ্যালিস বলে মনে করার এবং অ্যালিস এবং ববের মধ্যে গোপনীয় হওয়া উচিত এমন ম্যালোরিকে এমন ডেটা সরবরাহ করার জন্য ববের পক্ষে কোনও উপায় নেই।

ফলস্বরূপ, ম্যালরি জনসাধারণের ডেটা পড়ার জন্য এই কৌশলটি ব্যবহার করতে পারে ।

তবে মনে রাখবেন যে অন্য কারও ওয়েবসাইট থেকে সামগ্রী নেওয়া এবং এটি আপনার নিজের দ্বারা প্রকাশ করা কপিরাইটের লঙ্ঘন হতে পারে এবং আপনাকে আইনি পদক্ষেপের জন্য উন্মুক্ত করতে পারে।

ওয়েব অ্যাপ্লিকেশন ব্যতীত অন্য কিছু লেখা

"কেন একই উত্স নীতি কেবল একটি ওয়েব পৃষ্ঠায় জাভাস্ক্রিপ্টের জন্য প্রযোজ্য" বিভাগে উল্লিখিত হয়েছে, আপনি কোনও ওয়েবপৃষ্ঠায় জাভাস্ক্রিপ্ট না লিখে এসওপিকে এড়াতে পারবেন।

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

ব্রাউজার এক্সটেনশান

একই উত্স নীতি প্রয়োগ করার আগে ব্রাউজারের এক্সটেনশনের পক্ষে প্রতিক্রিয়ায় CORS শিরোনাম ইনজেকশন করা সম্ভব।

এগুলি বিকাশের জন্য কার্যকর হতে পারে তবে কোনও প্রোডাকশন সাইটের জন্য ব্যবহারিক নয় (আপনার সাইটের প্রতিটি ব্যবহারকারীকে তাদের ব্রাউজারের সুরক্ষা বৈশিষ্ট্যটি অক্ষম করে এমন একটি ব্রাউজার এক্সটেনশান ইনস্টল করতে জিজ্ঞাসা করা অযৌক্তিক)।

তারা কেবল সাধারণ অনুরোধগুলি (প্রিফলাইট অপশন অনুরোধগুলি পরিচালনা করার ক্ষেত্রে ব্যর্থ) দিয়ে কাজ করার ঝোঁক।

স্থানীয় বিকাশের সার্ভারের সাথে উপযুক্ত বিকাশের পরিবেশ হওয়াই সাধারণত আরও ভাল পদ্ধতির।


অন্যান্য সুরক্ষা ঝুঁকি

নোট করুন যে এসওপি / সিওআরএস এক্সএসএস , সিএসআরএফ , বা এসকিউএল ইনজেকশন আক্রমণগুলিকে প্রশমিত করে না যা স্বতন্ত্রভাবে পরিচালনা করা দরকার।


সারসংক্ষেপ

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

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

@ সাইস্তোপিকার্জ - সাধারণ একই উত্স / বিভিন্ন উত্সের বিধি প্রযোজ্য। সাধারণ নেটওয়ার্ক রুটিং বিধি প্রযোজ্য।
কুইন্টিন


@ কুইন্টিন - বাহ! +1 টি! সুতরাং আমি যা বুঝতে পারি তা যদি অ্যালিস সিওআরএস এক্সটেনশন ব্যবহার করে তবে সার্ভারটি মনে করে যে তার এইচটিপি কলগুলি জাভাস্ক্রিপ্ট থেকে নয় তবে একটি ব্রাউজারের এক্সটেনশান থেকে এসেছে এবং এটি সাধারণ একই উত্সের অনুরোধের মতো আচরণ করে?
স্নিপেটকিড

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

3

টার্গেট সার্ভারকে অবশ্যই ক্রস-অরিজিন অনুরোধের অনুমতি দেওয়া উচিত। এক্সপ্রেসের মাধ্যমে এটিকে অনুমতি দেওয়ার জন্য, কেবলমাত্র http বিকল্পগুলির অনুরোধটি হ্যান্ডেল করুন:

app.options('/url...', function(req, res, next){
   res.header('Access-Control-Allow-Origin', "*");
   res.header('Access-Control-Allow-Methods', 'POST');
   res.header("Access-Control-Allow-Headers", "accept, content-type");
   res.header("Access-Control-Max-Age", "1728000");
   return res.sendStatus(200);
});

3

যেমনটি গৃহীত উত্তরে উল্লেখ করা হয়নি।

  • এই সঠিক প্রশ্নের ক্ষেত্রে এটি নয়, তবে অন্যদের সেই সমস্যাটি অনুসন্ধান করতে সহায়তা করতে পারে
  • কিছু ক্ষেত্রে সিওআরএস ত্রুটি রোধ করতে আপনি আপনার ক্লায়েন্ট-কোডে এটি করতে পারেন ।

আপনি সরল অনুরোধগুলি ব্যবহার করতে পারেন ।
একটি 'সাধারণ অনুরোধগুলি' সম্পাদনের জন্য অনুরোধটির বেশ কয়েকটি শর্ত পূরণ করা দরকার। যেমন শুধুমাত্র যার ফলে POST, GETএবং HEADপদ্ধতি, সেইসাথে শুধুমাত্র কিছু দেওয়া শিরোলেখ অনুমতি (আপনি সব শর্ত জানতে পারেন এখানে )।

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


2

এটি কর্স ত্রুটির কারণে ঘটছে। সিওআরএস মানে ক্রস অরিজিন রিসোর্স শেয়ারিং। সাধারণ কথায়, যখন আমরা অন্য ডোমেন থেকে কোনও ডোমেন / সংস্থান অ্যাক্সেস করার চেষ্টা করি তখন এই ত্রুটি ঘটে occurs

এটি সম্পর্কে এখানে আরও পড়ুন: jquery সহ CORS ত্রুটি

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

ক্রস-অরিজিন রিসোর্স শেয়ারিং (সিওআরএস) পোস্টের অনুরোধটি কীভাবে পাবেন

এই লিঙ্কগুলি সাহায্য করতে পারে


0

এই সিওআরএস ইস্যুটি আরও বিশদে বর্ণিত হয়নি (অন্যান্য কারণে)।

আমি বর্তমানে বিভিন্ন কারণে এই সমস্যাটি নিয়ে আসছি। আমার সামনের প্রান্তটি 'অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স' -র শিরোনাম ত্রুটিও ফিরে আসছে।

কেবলমাত্র আমি ভুল ইউআরএল নির্দেশ করেছি যাতে এই শিরোনামটি সঠিকভাবে প্রতিফলিত হয় না (যাতে আমি এটি ধরে রেখেছি)। লোকালহোস্ট (সম্মুখ প্রান্ত) -> নন সুরক্ষিত HTTP (https বলে মনে করা হবে) এ কল করুন, নিশ্চিত করুন যে সামনে প্রান্ত থেকে API এর শেষ পয়েন্টটি সঠিক প্রোটোকলের দিকে নির্দেশ করছে।


0

আমি ক্রোম কনসোলে একই ত্রুটি পেয়েছি।

আমার সমস্যাটি ছিল, আমি http://পরিবর্তে ব্যবহার করে সাইটে যাওয়ার চেষ্টা করছিলাম https://। সুতরাং ঠিক করার মতো কিছুই ছিল না, কেবল একই সাইটে ব্যবহার করে যেতে হয়েছিল https


-1

অ্যাডেন্ডিং শিরোনামগুলি "বিকল্পগুলি" অনুরোধে রূপান্তরিত করে "পান" অনুরোধ। সুতরাং কর নীতি সংক্রান্ত সমস্যা দেখা দেয়। আপনার সার্ভারে আপনাকে "বিকল্পগুলি" অনুরোধটি প্রয়োগ করতে হবে।


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