একই-অরিজিন নীতি হল একটি ব্রাউজার নিরাপত্তা ফিচার যা সীমাবদ্ধ করে যে কীভাবে একটি অরিজিনের ডকুমেন্ট এবং স্ক্রিপ্ট অন্য অরিজিনের রিসোর্সের সাথে ইন্টার্যাক্ট করতে পারে।
একটি ব্রাউজার একসাথে একাধিক সাইট থেকে রিসোর্স লোড ও ডিসপ্লে করতে পারে। একই সময়ে আপনার একাধিক ট্যাব খোলা থাকতে পারে অথবা কোনও সাইট বিভিন্ন সাইট থেকে একাধিক iframe এম্বেড করতে পারে। এইসব রিসোর্সের মধ্যে ইন্টার্যাকশনের উপর কোনও বিধিনিষেধ না থাকলে এবং কোনও স্ক্রিপ্ট অ্যাটাকার দ্বারা হ্যাক করা হলে, স্ক্রিপ্টটি ব্যবহারকারীর ব্রাউজারের সবকিছু প্রকাশ করে দিতে পারে।
একই-অরিজিন নীতি, অন্য অরিজিন থেকে লোড করা রিসোর্সের রিড অ্যাক্সেস ব্লক করে এটি হওয়া আটকায়। "কিন্তু দাঁড়ান," আপনি বলেন, "আমি সব সময় অন্য উৎস থেকে ছবি ও স্ক্রিপ্ট লোড করি।" ব্রাউজারগুলি অন্য অরিজিন থেকে রিসোর্স এম্বেড করার জন্য কয়েকটি ট্যাগকে অনুমতি দেয়। এই নীতিটি মূলত একটি ঐতিহাসিক আর্টিফ্যাক্ট এবং আপনার সাইটকে iframe ব্যবহার করে ক্লিকজ্যাকিং-এর মতো দুর্বলতার সম্মুখীন করতে পারে। আপনি কন্টেন্ট সুরক্ষা নীতি ব্যবহার করে এইসব ট্যাগের ক্রস-অরিজিন রিডিং সীমাবদ্ধ করতে পারবেন।
একই-অরিজিন হিসেবে কী বিবেচনা করা হয়?
স্কিম (প্রোটোকল হিসেবেও পরিচিত, যেমন HTTP বা HTTPS), পোর্ট (যদি তা নির্দিষ্ট করা থাকে) এবং হোস্টের মাধ্যমে অরিজিনকে সংজ্ঞায়িত করা হয়। দুটি URL-এর ক্ষেত্রে এই তিনটিই একই হলে, তাদের একই-অরিজিন হিসেবে বিবেচনা করা হয়। যেমন,
http://www.example.com/foo-এর অরিজিন
http://www.example.com/bar-এর মতোই
কিন্তু https://www.example.com/bar-এর মতো নয়
কারণ স্কিম আলাদা।
কোনটি অনুমোদিত এবং কোনটি ব্লক করা হয়েছে?
সাধারণত, ক্রস-অরিজিন রিসোর্স এম্বেড করার অনুমতি দেওয়া হয়, তবে ক্রস-অরিজিন রিসোর্স পড়ার অনুমতি ব্লক করা হয়।
| iframe |
ক্রস-অরিজিন এম্বেডিং সাধারণত অনুমোদিত (X-Frame-Options নির্দেশিকার উপর নির্ভর করে), কিন্তু ক্রস-অরিজিন রিডিং (যেমন iframe-এ কোনও ডকুমেন্ট অ্যাক্সেস করার জন্য জাভাস্ক্রিপ্ট ব্যবহার করা) অনুমোদিত নয়।
|
| CSS |
ক্রস-অরিজিন CSS, CSS ফাইলের মধ্যে <link> এলিমেন্ট বা @import ব্যবহার করে এম্বেড করা যেতে পারে। সঠিক Content-Type হেডার প্রয়োজন হতে পারে।
|
| ফর্ম |
ক্রস-অরিজিন URL ফর্ম এলিমেন্টের action অ্যাট্রিবিউট ভ্যালু হিসেবে ব্যবহার করা যেতে পারে। একটি ওয়েব অ্যাপ্লিকেশন ক্রস-অরিজিন ডেস্টিনেশনে ফর্ম ডেটা লিখতে পারে।
|
| ছবি | ক্রস-অরিজিন ছবি এম্বেড করার অনুমতি দেওয়া হয়েছে। তবে, ক্রস-অরিজিন ছবির ডেটা (যেমন, জাভাস্ক্রিপ্ট ব্যবহার করে ক্রস-অরিজিন ছবি থেকে বাইনারি ডেটা ফিরিয়ে আনা) পড়ার সুবিধা ব্লক করা থাকে। |
| মাল্টিমিডিয়া |
<video> এবং <audio> এলিমেন্ট ব্যবহার করে ক্রস-অরিজিন ভিডিও এবং অডিও এম্বেড করা যেতে পারে।
|
| স্ক্রিপ্ট | ক্রস-অরিজিন স্ক্রিপ্ট এম্বেড করা যেতে পারে; তবে, নির্দিষ্ট কিছু API-এর (যেমন ক্রস-অরিজিন ফেচ অনুরোধ) অ্যাক্সেস ব্লক করা হতে পারে। |
TODO: DevSite - Think and Check assessment
ক্লিকজ্যাকিং কীভাবে আটকাবেন
"ক্লিকজ্যাকিং" নামে একটি অ্যাটাক iframe-এ একটি সাইট এম্বেড করে এবং স্বচ্ছ বোতাম ওভারলে করে
যা অন্য কোনও গন্তব্যের সাথে লিঙ্ক করে। ব্যবহারকারীদের প্রতারণা করে
ভাবানো হয় যে তারা আপনার অ্যাপ্লিকেশন অ্যাক্সেস করছেন, কিন্তু আসলে তারা আক্রমণকারীদের কাছে
ডেটা পাঠাচ্ছেন।
অন্যান্য সাইট যাতে আপনার সাইটকে iframe-এ এম্বেড করতে না পারে, তার জন্য HTTP হেডারে
frame-ancestors
নির্দেশ সহ কন্টেন্ট নিরাপত্তা নীতি যোগ করুন।
বিকল্প হিসেবে, আপনি HTTP হেডারে X-Frame-Options যোগ করতে পারেন, বিকল্পের তালিকা দেখতে
MDN
দেখুন।
পুরো বিষয়টি একনজরে
আশা করি, আপনি এখন কিছুটা স্বস্তি বোধ করছেন যে ব্রাউজারগুলি ওয়েবে নিরাপত্তার দ্বাররক্ষক হওয়ার জন্য কঠোর পরিশ্রম করে। যদিও ব্রাউজার রিসোর্সে অ্যাক্সেস ব্লক করে সুরক্ষিত থাকার চেষ্টা করে, কখনও কখনও আপনি নিজের অ্যাপ্লিকেশনে ক্রস-অরিজিন রিসোর্স অ্যাক্সেস করতে চান। পরবর্তী গাইডে, ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS) সম্পর্কে জানুন এবং বিশ্বস্ত সোর্স থেকে ক্রস-অরিজিন রিসোর্স লোড করার অনুমতি দেওয়া হয়েছে কিনা তা ব্রাউজারকে কীভাবে জানাবেন।