CORS সহজ ভাষায়: কী এবং কীভাবে ভুল কনফিগার হয়
CORS firewall নয়। এটি ঠিক করে কোন ওয়েবসাইট browser-এ আপনার API-র response পড়তে পারবে। ঠিকমতো শিখুন, ঝুঁকিপূর্ণ সেটিং এড়ান।

Browser same-origin policy মানে: a.example-এর পেজ b.example-এর response পড়তে পারে না, যদি না b.example অনুমতি দেয়। Origin হলো scheme, host ও port-এর সংমিশ্রণ।
CORS (Cross-Origin Resource Sharing) হলো server কীভাবে browser-কে জানায় কোন অন্য origin তার response পড়তে পারবে।
CORS কী করে আর কী করে না
- এটি browser কোনো ওয়েব পেজকে কী পড়তে দেবে তা সীমিত করে। শুধু browser কার্যকর করে।
- এটি curl, script বা server থেকে আসা request আটকায় না, আর API-কে ডাকা থেকে বাঁচায় না। সেটি authentication-এর কাজ।
- Cross-site request তবুও পাঠানো যায় (এবং data বদলাতে পারে)। CORS শুধু পেজকে উত্তর পড়তে দেয় না (CSRF আলাদা সমস্যা)।
মূল header
Access-Control-Allow-Origin: কোন origin response পড়তে পারবে (একটি origin, বা*)।Access-Control-Allow-Credentials: true: cookie ও auth পাঠানো এবং response পড়া অনুমতি দেয়।Access-Control-Allow-Methods/Allow-Headers: cross-origin request কী ব্যবহার করতে পারবে।Access-Control-Max-Age: preflight উত্তর কতক্ষণ cache হবে।
Preflight
"সাধারণ নয়" request-এ (যেমন PUT, DELETE, বা custom header-সহ JSON) browser আগে OPTIONS preflight পাঠিয়ে জিজ্ঞেস করে আসল request অনুমোদিত কি না। Server অনুমোদিত origin, method ও header জানিয়ে দেয়।
বিপজ্জনক misconfiguration
১. Credential-সহ যেকোনো Origin ফেরত দেওয়া। Server request-এর Origin যা-ই হোক Access-Control-Allow-Origin-এ কপি করে এবং Allow-Credentials: true-ও পাঠায়। তখন যেকোনো ক্ষতিকর সাইট logged-in user-এর ব্যক্তিগত data পড়তে পারে। Browser credential-সহ * নিষিদ্ধ করে, তাই ডেভেলপাররা এভাবে "ঠিক" করে, যা আরও খারাপ।
২. দুর্বল origin যাচাই। "example.com দিয়ে শেষ" ধরনের substring বা regex evilexample.com-ও মেলায়, অথবা null origin বিশ্বাস করা (sandbox করা পেজ এটি পাঠাতে পারে)।
৩. সব subdomain অনুমতি দেওয়া, যখন একটিতে XSS বা takeover bug আছে।
৪. Private API-তে wildcard। সত্যিই public data-র জন্য * ঠিক, কিন্তু cookie বা private token-নির্ভর response-এ নয়।
৫. অভ্যন্তরীণ origin বিশ্বাস, যেমন প্রোডাকশনে http://localhost।
নিরাপদ পদ্ধতি
- origin-এর সঠিক allow-list রাখুন (পূর্ণ scheme, host, port)। pattern নয়, হুবহু তুলনা করুন।
*শুধু public, credential-ছাড়া resource-এ।- Origin অনুযায়ী response বদলালে
Vary: Originপাঠান, যাতে cache গুলিয়ে না ফেলে। - না লাগলে credential চালু করবেন না।
- অনুমোদিত method ও header সীমিত করুন।
- মনে রাখুন: আসল সুরক্ষা server-এর authentication ও authorization-ই দেয়।
পরীক্ষা (আপনার নিজের অ্যাপে)
বানানো Origin header দিয়ে request পাঠান এবং দেখুন সেটি credential-সহ ফেরত আসছে কি না। এলে ঠিক করুন।
মূল কথা: CORS শুধু ঠিক করে browser-এ কে response পড়বে। origin-এর সঠিক allow-list ব্যবহার করুন, credential-সহ origin প্রতিধ্বনিত করবেন না, আর আসল access control server-এ রাখুন।
ওয়েব সিকিউরিটি সিরিজ, পর্ব ২ (আরও bug শ্রেণি ও hardening): 2 নম্বর (মোট 6)। আগের লেখা: JWT security: সাধারণ ভুল ও এড়ানোর উপায়.
