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

প্রমাণীকরণ (Authentication) উত্তর দেয়: "আপনি কে?" এটি সেই ধাপ যেখানে অ্যাপটি পরিচয় যাচাই করে—সাধারণত পাসওয়ার্ড, একবারের কোড, OAuth লগইন (Google, Microsoft) বা JWT-এর মতো সাইন করা টোকেন দিয়ে।
অনুমোদন (Authorization) উত্তর দেয়: "আপনি কী করতে পারেন?" অ্যাপটি যখন জানে আপনি কে, তখন এটি চেক করে আপনি এই পেজ দেখতে পারবেন কিনা, ঐ রেকর্ড সম্পাদনা করতে পারবেন কিনা বা এই API এন্ডপয়েন্ট কল করতে পারবেন কি না। অনুমোদন হল নিয়ম ও সিদ্ধান্তের ব্যাপার।
রোল (সাধারণত RBAC — Role-Based Access Control) হচ্ছে অনুমোদন সংগঠিত করার এক প্রচলিত উপায়। হাজারো পারমিশন প্রত্যেক ইউজারকে দেওয়ার চেয়ে আপনি একটি রোল (যেমন Admin, Manager, Viewer) নির্ধারণ করেন এবং রোলটি একটি সেট পারমিশন বোঝায়।
যখন আপনি AI দিয়ে কোড জেনারেট করেন ("vibe-coding" প্ল্যাটফর্ম যেমন Koder.ai সহ), এসব সীমানা স্পষ্ট রাখা অত্যন্ত গুরুত্বপূর্ণ। সবচেয়ে দ্রুত একটি অনিরাপদ সিস্টেম চালু করার উপায় হল "লগইন" ও "পারমিশন"কে একটি অস্পষ্ট "auth" ফিচারে মিলিয়ে ফেলা।
AI টুলগুলো প্রায়ই প্রমাণীকরণ, অনুমোদন, এবং রোলগুলোকে মিশিয়ে দেয় কারণ প্রম্পট এবং উদাহরণ কোড স্নিপেটগুলোও এগুলোকে অস্পষ্ট করে তোলে। আপনি আউটপুটে দেখতে পারবেন যেখানে:
এতে এমন কোড তৈরি হতে পারে যা ডেমোতে কাজ করে কিন্তু নিরাপত্তা সীমানা অনিশ্চিত করে দেয়।
AI স্ট্যান্ডার্ড প্যাটার্ন—লগইন ফ্লো, সেশন/JWT হ্যান্ডলিং, এবং বেসিক RBAC ওয়্যারিং—খসড়া তৈরি করতে পারে; কিন্তু এটি নিশ্চিত করতে পারে না যে আপনার নিয়মগুলো ব্যবসায়িক চাহিদার সাথে মেলে বা কোন এজ-কেস নিরাপদ। মানুষ এখনও থ্রেট সিনারিও, ডেটা অ্যাক্সেস নিয়ম, এবং কনফিগারেশন যাচাই করতে হবে।
এরপর আমরা কভার করবো কীভাবে AI আপনার প্রম্পট এবং কোডবেস থেকে রিকোয়ারমেন্ট ইনফার করে, সাধারণ প্রমাণীকরণ ফ্লো যা এটি জেনারেট করে (JWT বনাম সেশন বনাম OAuth), কীভাবে অনুমোদন ইমপ্লিমেন্ট হয় (মিডলওয়্যার/গার্ড/পলিসি), সাধারণ নিরাপত্তা গ্যাপগুলো, এবং AI-উত্পাদিত অ্যাক্সেস কন্ট্রোলকে নিরাপদ করার জন্য ব্যবহারযোগ্য প্রম্পটিং ও রিভিউ চেকলিস্ট।
AI আপনার অর-রিকোয়ারমেন্টগুলো এমনভাবে “আবিষ্কার” করে না যেভাবে একজন টীমমেট করতো। এটি কিছু সিগন্যাল থেকে ইঙ্গিত নিয়ে সেই ফাঁক পূরণ করে সাধারণ প্যাটার্ন দিয়ে।
অধিকাংশ AI-উৎপাদিত অথ এবং রোল কোড গঠিত হয়:
আপনার প্রম্পট: আপনি যে শব্দগুলো ব্যবহার করেন ("admin portal", "multi-tenant", "employee vs customer") সেগুলো রিকোয়ারমেন্ট হিসেবে কাজ করে।
আপনার বিদ্যমান কোডবেস: বিদ্যমান মডেল, টেবিল, রুট নামকরণ, এরর হ্যান্ডলিং, এবং ফোল্ডার স্ট্রাকচার কি জেনারেট হবে সেটাকে পরিচালিত করে।
ফ্রেমওয়ার্ক ডিফল্ট: NextAuth সেশন, Django permissions, Laravel guards, Spring Security অ্যানোটেশন—AI প্রায়ই আপনার স্ট্যাকের জন্য “বিভক্ত” পথ অনুসরণ করে।
উদাহরণসমূহ যা এটি দেখেছে: সাধারণ টিউটোরিয়াল ও স্নিপেটগুলি আউটপুটকে প্রভাবিত করে, এমনকি আপনার অ্যাপ ভিন্ন হলেও।
যদি আপনি Koder.ai-এর মতো চ্যাট-ফার্স্ট বিল্ডার ব্যবহার করেন, আপনি একটি রিউজেবল “সিকিউরিটি স্পেসিফিকেশন” মেসেজ রাখতে পারেন যা প্ল্যাটফর্মটি জেনারেশন চলাকালীন ধারাবাহিকভাবে প্রয়োগ করে—এতে ফিচারের মধ্যে ড্রিফট কমে।
আপনার কোডবেসে যদি ইতোমধ্যেই User, Role, এবং Permission থাকে, AI সাধারণত ঐ শব্দভাণ্ডার অনুকরণ করবে—টেবিল/কলেকশন, এন্ডপয়েন্ট, এবং DTO গুলো ওই নাম মিলে তৈরি হবে। যদি আপনি Account, Member, Plan, বা Org ব্যবহার করেন, জেনারেটেড স্কিমাগুলো সাবস্ক্রিপশন অথবা টেন্যান্সি সেমান্টিক্সের দিকে সরে যেতে পারে।
ছোট নামকরণ সংকেত বড় সিদ্ধান্তকে প্রভাবিত করে:
আপনি বিস্তারিত না দিলে AI প্রায়ই ধরে নেয়:
AI একটি পরিচিত প্যাটার্ন কপি করতে পারে (যেমন: "JWT-এ roles array", "isAdmin boolean", "middleware-এ permission strings") কারণ তা জনপ্রিয়—কিন্তু তা আপনার থ্রেট মডেল বা কমপ্লায়েন্সের জন্য উপযুক্ত নাও হতে পারে।
ফিক্সটি সহজ: টেন্যান্সি বাউন্ডারি, রোল গ্রানুলারিটি, টোকেন লাইফটাইম, এবং কোথায় চেক অবশ্যই লাগবে—এসব স্পষ্ট করে বলুন আগে থেকে।
AI টুলগুলো পরিচিত টেমপ্লেট থেকে প্রমাণীকরণ একত্রিত করতে প্রবণ। এটা দ্রুততার জন্য সহায়ক, কিন্তু মানে এই যে আপনি প্রায়ই সবচেয়ে সাধারণ ফ্লো পাবেন, যা আপনার রিস্ক লেভেল, কমপ্লায়েন্স চাহিদা বা প্রোডাক্ট UX অনুযায়ী সর্বোত্তম নাও হতে পারে।
ইমেল + পাসওয়ার্ড হল ডিফল্ট। জেনারেটেড কোড সাধারণত রেজিস্ট্রেশন এন্ডপয়েন্ট, লগইন এন্ডপয়েন্ট, পাসওয়ার্ড রিসেট, এবং একটি "কারেন্ট ইউজার" এন্ডপয়েন্ট অন্তর্ভুক্ত করে।
ম্যাজিক লিঙ্ক (ওয়ান-টাইম ইমেল লিঙ্ক/কোড) তখন দেখা যায় যখন আপনি "passwordless" উল্লেখ করেন। AI সাধারণত একবারের টোকেনদের জন্য একটি টেবিল এবং ভেরিফাই করার এন্ডপয়েন্ট তৈরি করে।
SSO (OAuth/OIDC: Google, Microsoft, GitHub) তখন আসে যখন আপনি "Sign in with X" চাচ্ছেন। AI সাধারণত একটি লাইব্রেরি ইন্টিগ্রেশন ব্যবহার করে এবং প্রোভাইডার ইউজার আইডি প্লাস ইমেইল সংরক্ষণ করে।
API টোকেন সাধারণত CLI অ্যাক্সেস বা সার্ভার-টু-সার্ভার জন্য ব্যবহৃত হয়। AI-উৎপাদিত কোড প্রায়ই প্রতিটি ইউজারের (বা অ্যাপের) জন্য একটি স্ট্যাটিক টোকেন তৈরি করে এবং প্রতিটি রিকোয়েস্টে তা চেক করে।
আপনার প্রম্পটে যদি "stateless", "mobile apps", বা "microservices" উল্লেখ থাকে, AI সাধারণত JWT বেছে নেয়। অন্যথায় এটি প্রায়ই সার্ভার-সাইড সেশন ডিফল্ট করে।
JWT-র সাথে, জেনারেটেড কোড প্রায়ই:
localStorage-এ রাখে (সুবিধাজনক, কিন্তু XSS-র জন্য ঝুঁকিপূর্ণ)সেশনের ক্ষেত্রে, ধারণাটি সাধারণত ঠিক থাকে কিন্তু কুকি হার্ডেনিং মিস হতে পারে। আপনেরুপ কুকি সেটিংস যেমন HttpOnly, Secure, এবং কড়া SameSite পলিসি স্পষ্টভাবে অনুরোধ করতে হতে পারে।
ফ্লো কাজ করলেও, "নিরাপত্তার বিরক্তিকর অংশগুলো" এড়িয়ে যাওয়া সহজ:
ফ্লো এবং সীমাবদ্ধতাগুলো একটি জায়গায় স্পষ্টভাবে বলুন: "সার্ভার-সাইড সেশন ব্যবহার কর, নিরাপদ কুকি যোগ কর, লগইন রেট লিমিট রাখো, Argon2id নির্দিষ্ট প্যারামিটার ব্যবহার কর এবং পাসওয়ার্ড রিসেট টোকেন 15 মিনিটে এক্সপায়ার করো।"
যদি আপনি JWT চান, সঞ্চয়স্থান (কুকি পছন্দ করুন), রোটেশন, এবং রিভোকেশন স্ট্র্যাটেজি আগে থেকেই অবশ্যই উল্লেখ করুন।
কিছুমান AI-সহায়ক বিল্ডারে (যেমন Koder.ai) আপনি সিস্টেমকে কেবল এন্ডপয়েন্ট নয়, বরং "অ্যাকসেপ্টেন্স চেক" (স্ট্যাটাস কোড, কুকি ফ্ল্যাগ, টোকেন TTL) সহ একটি প্ল্যান জেনারেট করতে বলতে পারেন, এবং তারপরে ইমপ্লিমেন্টেশন বিচ্যুত হলে স্ন্যাপশট/রোলব্যাক করে iterate করতে পারবেন।
অনুমোদন উত্তর দেয়: "এই ইতিমধ্যেই প্রমাণীকৃত ইউজার কি এই নির্দিষ্ট রিসোর্সে এই অ্যাকশনটি করতে পারে?" AI-উৎপাদিত প্রোজেক্টগুলোতে এটি সাধারণত রিকোয়েস্ট পথ জুড়ে চেকের চেইন হিসেবে ইমপ্লিমেন্ট করা হয়।
অধিকাংশ জেনারেটেড কোড একটি পূর্বানুমেয় স্ট্যাক অনুসরণ করে:
user বা principal অবজেক্ট রিকোয়েস্টে ট্যাচ করে।billing:read" ধরনের চেক।এই স্তরীকৃত পদ্ধতি ভাল যখন প্রতিটি স্তরের দায়িত্ব পরিষ্কার থাকে: authentication ইউজারকে শনাক্ত করে; authorization পারমিশন মূল্যায়ন করে; ডেটাবেস চেকগুলো রিসোর্স-নির্দিষ্ট তথ্য নিশ্চিত করে।
AI-উৎপাদিত কোড প্রায়ই allow by default দিকে ঝোঁক পায়: যদি কোনো পলিসি না থাকে, এন্ডপয়েন্টটি এখনও কাজ করে। ডেভেলপিংয়ের সময় এটা সুবিধাজনক, কিন্তু ঝুঁকিপূর্ণ—নতুন রুট বা রিফ্যাক্টরগুলো গোপনে পাবলিক হয়ে যায়।
আরেকটি নিরাপদ প্যাটার্ন হল deny by default:
@Public()), বাদ দেওয়ার উপর নির্ভর না করে।দুই সাধারণ স্টাইল দেখা যায়:
@Roles('admin'), @Require('project:update')) — পড়তে সহজ, কিন্তু ভুলে যাওয়া সহজ।can(user, action, resource)), কন্ট্রোলার/সার্ভিস থেকে কল করা হয়। আরও কনসিস্টেন্ট, কিন্তু ডেভেলপাররা পাশ কাটিয়ে না যায় সে জন্য ডিসিপ্লিন দরকার।HTTP রুটগুলো সুরক্ষিত হলেও, জেনারেটেড কোড প্রায়ই নজরে না আসা এন্ট্রি পয়েন্টগুলো ভুলে যায়:
প্রতিটি এক্সিকিউশন পাথ—HTTP, জব, ওয়েবহুক—একই অনুমোদন গ্যারান্টি পেতে হবে।
যখন AI অনুমোদন কোড তৈরি করে, এটি সাধারণত একটি মডেল বেছে নেয় এমনকি আপনি নির্দিষ্ট না করলেও। পছন্দটি প্রায়ই টিউটোরিয়াল ও ফ্রেমওয়ার্কে সবচেয়ে প্রচলিত যা আপনার প্রোডাক্টের জন্য সর্বোত্তম নাও হতে পারে।
RBAC (Role-Based Access Control) ব্যবহারকারীদের admin, manager, বা viewer মতো রোল দেয় এবং কোড রোল চেক করে অ্যাকশন অনুমোদন করে।
পারমিশন-ভিত্তিক অ্যাকসেস স্পষ্ট সক্ষমতাসমূহ অ্যাসাইন করে যেমন invoice.read বা invoice.approve। রোলগুলো তখন পারমিশনের বান্ডিল হতে পারে।
ABAC (Attribute-Based Access Control) ব্যবহারকারীর অ্যাট্রিবিউট ও কন্টেক্সটের উপর ভিত্তি করে সিদ্ধান্ত নেয়: ব্যবহারকারীর বিভাগ, রিসোর্স মালিক, সময়, টেন্যান্ট, সাবস্ক্রিপশন টিয়ার, এলাকা ইত্যাদি। নিয়মগুলো দেখতে পারে "can edit if user.id == doc.ownerId" বা "can export if plan == pro and region == EU"।
হাইব্রিড বাস্তব অ্যাপে সবচেয়ে সাধারণ: বিস্তৃত অ্যাডমিন বনাম নন-অ্যাডমিন পার্থক্যের জন্য RBAC, এবং বিস্তারিত নিয়মগুলোর জন্য পারমিশন ও রিসোর্স চেক।
AI-উৎপাদিত কোড প্রায়ই RBAC-কে ডিফল্ট করে কারণ এটি ব্যাখ্যা ও ইমপ্লিমেন্ট করা সহজ: users-এ role কলাম, একটি মিডলওয়্যার যা req.user.role চেক করে, এবং কয়েকটি if স্টেটমেন্ট।
RBAC সাধারণত পর্যাপ্ত যখন:
তবে সমস্যা দেখা দেয় যখন “role” খুব সূক্ষ্ম নিয়মগুলোর ডাম্পিং গ্রাউন্ডে পরিণত হয় (যেমন "support_admin_limited_no_export_v2").
একটি সহায়ক নিয়ম: রোল ব্যবহার করুন পরিচয়ের জন্য, পারমিশন ব্যবহার করুন সক্ষমতার জন্য।
আপনি যদি প্রতিটি স্প্রিন্টে নতুন রোল যোগ করছেন, সম্ভবত আপনার পারমিশন সিস্টেম দরকার।
শুরু করুন:
users.role সঙ্গে 2–4 রোলপরে উন্নত করুন:
এতে প্রথম কোডটি পাঠযোগ্য থাকবে এবং পরে স্কেল করতে একটি পরিষ্কার পথ থাকবে যাতে সম্পূর্ণ রাইটারাইট না করে authorization বাড়ানো যায়।
AI-উৎপাদিত অথ সিস্টেমগুলো কয়েকটি পরিচিত ডাটাবেস আকারে ধরবে। এসব প্যাটার্ন জানলে বোঝা সহজ হয় কখন মডেলটি আপনার চাহিদা ও বিশেষ করে মাল্টি-টেন্যান্সি ও মালিকানার নিয়মগুলোর ব্যাপারে বেশি সরল করছে।
অধিকাংশ জেনারেটেড কোড users টেবিল তৈরির সাথে একে:
roles, user_roles (জয়েন টেবিল)permissions, role_permissions, এবং কখনও কখনও user_permissionsএকটি টিপিক্যাল রিলেশনাল লেআউট দেখতে এমন হতে পারে:
users(id, email, password_hash, ...)
roles(id, name)
permissions(id, key)
user_roles(user_id, role_id)
role_permissions(role_id, permission_id)
AI প্রায়ই admin, user, editor মত রোল নাম ডিফল্ট করে। প্রোটোটাইপের জন্য ঠিক আছে, কিন্তু বাস্তবে আপনি চান স্টেবল আইডেন্টিফায়ার (যেমন key = "org_admin") এবং মানুষের জন্য লেবেল আলাদাভাবে রাখুন।
আপনার প্রম্পটে যদি "teams", "workspaces", বা "organizations" উল্লেখ থাকে, AI সাধারণত মাল্টি-টেন্যান্সি অনুমান করে এবং organization_id/tenant_id ফিল্ড যোগ করে। সমস্যা হচ্ছে অসঙ্গততা: এটি users-এ ফিল্ড যোগ করতে পারে কিন্তু roles, জয়েন টেবিল, এবং রিসোর্স টেবিলগুলোতে ভুলে যেতে পারে।
আগেই সিদ্ধান্ত নিন যে:
অর্গ-স্কোপড RBAC-এ সাধারণত দরকার roles(…, organization_id) এবং user_roles(…, organization_id) (বা একটি memberships টেবিল যা সম্পর্ককে এঙ্কর করে)।
রোল উত্তর দেয় “এই ব্যক্তি কী করতে পারবে?” মালিকানা উত্তর দেয় “এই নির্দিষ্ট রেকর্ডে তারা কী করতে পারবে?” AI-উৎপাদিত কোড প্রায়ই মালিকানা ভুলে যায় এবং সবকিছু রোল দিয়ে সমাধান করতে চায়।
প্র্যাকটিকাল প্যাটার্ন হল রিসোর্সগুলোর উপর স্পষ্ট মালিকানা ফিল্ড রাখা (যেমন projects.owner_user_id) এবং নিয়ম প্রয়োগ করা যেমন “owner OR org_admin can edit।” শেয়ার করা রিসোর্সের জন্য মেম্বারশিপ টেবিল যোগ করুন (যেমন project_members(project_id, user_id, role)), গ্লোবাল রোল টেনে না নিয়ে।
জেনারেটেড মাইগ্রেশনগুলো প্রায়ই এমন কনস্ট্রেইন্ট মিস করে যা সূক্ষ্ম অথ বাগ প্রতিরোধ করে:
users.email (এবং মাল্টি-টেন্যান্ট সেটআপে (organization_id, email))(user_id, role_id) এবং (role_id, permission_id)user_roles পরিষ্কার হওয়া উচিত, কিন্তু শেয়ার করা রিসোর্সে অনিচ্ছাকৃত কাসকেডিং এড়িয়ে চলুনযদি স্কিমা এসব নিয়ম এনকোড না করে, আপনার অনুমোদন লেয়ার কোডে ক্ষতিপূরণ করবে—সাধারণত অসমঞ্জসভাবে।
AI-উৎপাদিত অথ স্ট্যাকগুলো প্রায়ই একটি পূর্বানুমেয় "অ্যাসেম্বলি লাইন" শেয়ার করে: রিকোয়েস্টকে প্রমাণীকরণ করুন, ইউজার কনটেক্সট লোড করুন, তারপর প্রত্যেক অ্যাকশনকে পুনরায় অনুমোদন করুন পলিসি ব্যবহার করে।
অধিকাংশ কোড জেনারেটর এমন মিশ্রণ তৈরি করে:
Authorization: Bearer <JWT> হেডার পার্স করে, তা ভেরিফাই করে, এবং req.user ট্যাচ করে।canEditProject(user, project) বা requireRole(user, "admin")।AI কোড প্রায়ই কন্ট্রোলারে সরাসরি চেক রাখে কারণ জেনারেট করা সহজ। ছোট অ্যাপে এটা কাজ করে, কিন্তু দ্রুত অসংগত হয়ে যায়।
একটি নিরাপদ ওয়ারিং প্যাটার্ন হল:
WHERE org_id = user.orgId) যাতে আপনি দুর্ঘটনাক্রমে ফরবিডেন ডেটা ফেচ না করে পরে ফিল্টার করেন।পলিসি হেল্পারগুলো কেন্দ্রীভূত করুন এবং স্ট্যান্ডার্ড রেসপন্সগুলো নিয়ম করুন। উদাহরণস্বরূপ, আনঅথেনটিকেটেড হলে সবসময় 401 এবং অনুমোদিত নয় কিন্তু প্রমাণীকৃত হলে 403 রিটার্ন করুন—প্রতিটি এন্ডপয়েন্টে এঁটা মিশ্রিত করবেন না।
authorize(action, resource, user) মত একটি একক র্যাপার ভুল-চেক বাগ কমায় এবং অডিট সহজ করে। Koder.ai-এর মতো টুল ব্যবহার করলে এই একক এন্ট্রি পয়েন্ট রিভিউয়ের জন্য সুবিধাজনক "ডিফ স্পট" হয়।
AI-উৎপাদিত কোড রোল/ক্লেইম পরিমাণে আগ্রাসী ক্যাশিং করতে পারে। পছন্দ করুন:
permissions_version বাম্প)।এতে অনুমোদন দ্রুত থাকে এবং রোল আপডেট দ্রুত কার্যকর হয়।
AI দ্রুত কাজ করা প্রমাণীকরণ ও রোল চেক জেনারেট করতে পারে, কিন্তু প্রম্পট অস্পষ্ট হলে বা উদাহরণ অসম্পূর্ণ হলে মডেলটি সাধারণত প্রচলিত স্নিপেটগুলো জুড়ে দেয়—যার মধ্যে অনিরাপদ ডিফল্টও থাকতে পারে।
একটি সাধারণ সমস্যা হল টোকেন বা সেশন খুব দীর্ঘসময় বৈধ থাকা, কখনো রোটেট না করা, বা অনিরাপদভাবে সংরক্ষণ করা।
HttpOnly, Secure, এবং উপযুক্ত SameSite ছাড়া সেট করা হয়, অথবা সেশন localStorage-এ রাখা হয়।প্রতিকার: স্পষ্ট এক্সপায়ারেশন নির্দিষ্ট করুন, রিফ্রেশ-টোকেন রোটেশন ও সার্ভার-সাইড রিভোকেশন ইমপ্লিমেন্ট করুন, এবং সব রুটে একই সিকিউর ডিফল্ট কুকি সেটিংস একসাথে স্ট্যান্ডার্ডাইজ করুন।
জেনারেটেড কোড প্রায়ই "লগ ইন আছে" চেক করে কিন্তু "অনুমোদিত" চেক মিস করে। সাধারণ ব্যর্থতাসমূহ:
/orders/:id ফেচ করা হয় কিন্তু যাচাই করা হয় না যে অর্ডারটি বর্তমান ইউজারের।isAdmin গেট প্রতিস্থাপন করে per-record অনুমোদন।প্রতিরোধ: কর্তৃপক্ষ-উৎস থেকে সার্ভার-সাইড অনুমোদন প্রয়োগ করুন, ডেটা লেয়ারে অবজেক্ট-লেভেল চেক যোগ করুন (উদাহরণ: WHERE userId = ? / orgId = ?), এবং ডিফল্টভাবে প্রত্যাখ্যান করুন যদি স্পষ্টভাবে অনুমোদিত না হয়।
AI কখনও কখনও টেস্টিং শর্টকাট হিসেবে সাহায্য করে: হার্ডকোডেড অ্যাডমিন ইমেইল, ডিফল্ট পাসওয়ার্ড, বা undocumented অ্যাডমিন রুট।
প্রতিরোধ: কোড রিভিউ-তে হার্ডকোডেড ক্রেডেনশিয়াল নিষিদ্ধ করুন, ডিবাগ এন্ডপয়েন্টে ফিচার ফ্ল্যাগ লাগান, এবং সিক্রেট/ডিফল্ট পাসওয়ার্ড বিল্ড-ফেইল করার মতো স্ক্যান ও লিন্ট নিয়ম প্রয়োগ করুন।
AI অনায়াসে "বেছে নেওয়া ডিফল্ট" দিয়ে ভরাট করে ফেলবে—ঠিকই তাই সূক্ষ্ম নিরাপত্তা বাগ চালু হয়। সবচেয়ে নিরাপদ পন্থা হল আপনার প্রম্পটকে একটি ছোট সিকিউরিটি স্পেকের মতো করা: স্পষ্ট রিকোয়ারমেন্ট, স্পষ্ট নন-রিকোয়ারমেন্ট, এবং স্পষ্ট অ্যাকসেপ্টেন্স টেস্ট।
আপনার প্রোডাক্টে কি আছে এবং কিভাবে আচরণ করবে তা লিখে রাখুন:
admin, manager, member, viewer) এবং ব্যবহারকারীরা কীভাবে এগুলো পায়।org_id-এর রেকর্ড দেখতে পারবে"—ক্লাস কেসগুলি সহ।এতে মডেলকে অত্যধিক বিস্তৃত "admin bypass" ফ্যান্টাসি বা টেন্যান্ট আইসোলেশন বাদ দেওয়া থেকে রোধ করবে।
যদি আপনার সিস্টেম স্ট্রাকচার্ড প্ল্যানিং সাপোর্ট করে (উদাহরণ: Koder.ai-এর planning mode), মডেলকে আউটপুট করতে বলুন:
তারপর সেই প্ল্যান সঠিক মনে হলে কেবল কোড জেনারেট করুন।
অনুরোধ করুন:
401 বনাম 403 আলাদা করুন, সংবেদনশীল তথ্য ফাঁস করবেন না।শুধু ইমপ্লিমেন্টেশন নয়—প্রমাণও চান:
নন-নেগোশিয়েবল বিষয়গুলো অন্তর্ভুক্ত করুন যেমন:
একটি টেমপ্লেট প্রম্পট চাইলে দলীয় ডকে রাখুন এবং অভ্যন্তরীণভাবে লিংক করুন (যেমন /docs/auth-prompt-template)।
AI দ্রুত কাজ করে কোড জেনারেট করতে পারে, কিন্তু রিভিউ করে ধরে নিন কোড অসম্পূর্ণ যতক্ষণ না প্রমাণিত। কভারেজ (কোথায় অ্যাকসেস প্রয়োগ হয়েছে) এবং সঠিকতা (কীভাবে প্রয়োগ করা হয়েছে) উভয়ের উপর ফোকাস করে একটি চেকলিস্ট ব্যবহার করুন।
প্রতিটি এন্ট্রি পয়েন্ট তালিকাভুক্ত করুন এবং নিশ্চিত করুন একই অ্যাক্সেস নিয়ম ধারাবাহিকভাবে প্রয়োগ হয়েছে:
দ্রুত একটি কৌশল: getUserById, updateOrder মত যেকোন ডেটা অ্যাকসেস ফাংশন স্ক্যান করুন এবং নিশ্চিত করুন তা একটি actor/context গ্রহণ করে এবং চেক প্রয়োগ করে।
AI মিস করতে পারে এমন ইমপ্লিমেন্টেশন ডিটেইলগুলো যাচাই করুন:
HttpOnly, Secure, SameSite সঠিক; সেশন TTL ছোট; লগইনে রোটেশন।* নেই; প্রিফলাইট সঠিক।JWT/OAuth/পাসওয়ার্ড হ্যাশিংয়ের জন্য পরিচিত-সেইফ লাইব্রেরি ব্যবহার করুন; কাস্টম ক্রিপ্টো এড়িয়ে চলুন।
স্ট্যাটিক অ্যানালাইসিস এবং ডিপেন্ডেন্সি চেক চালান (SAST + npm audit/pip-audit/bundle audit) এবং নিশ্চিত করুন ভার্সনগুলো আপনার সিকিউরিটি পলিসির সাথে মেলে।
অবশেষে, যে কোনো auth/authz পরিবর্তনের জন্য পিয়ার-রিভিউ গেট রাখুন: অন্তত একজন রিভিউয়ার চেকলিস্টটি অনুসরণ করে এবং টেস্টগুলো কভার করে তা নিশ্চিত করবে।
যদি আপনার ওয়ার্কফ্লোতে দ্রুত কোড জেনারেশন থাকে (উদাহরণ: Koder.ai), স্ন্যাপশট ও রোলব্যাক ব্যবহার করুন: ছোট, রিভিউযোগ্য চেঞ্জস জেনারেট করুন, টেস্ট চালান, এবং যদি আউটপুট ঝুঁকিপূর্ণ ডিফল্ট নিয়ে আসে দ্রুত রিভার্ট করুন।
অ্যাক্সেস কন্ট্রোল বাগগুলো প্রায়ই "নিরব": ব্যবহারকারীরা কেবল এমন ডেটা দেখে যা তাদের উচিত নয়, এবং কিছু ক্র্যাশ হয় না। AI-উৎপাদিত কোড হলে টেস্ট ও মনিটরিং দ্রুত নিশ্চিত করে যে আপনি যা ভাবছেন তা বাস্তবে চলছে কি না।
পলিসি/পারমিশন হেল্পারগুলো (যেমন canViewInvoice(user, invoice)) ছোট সিদ্ধান্ত পয়েন্টগুলো টেস্ট করে শুরু করুন। একটি компакт "রোল ম্যাট্রিক্স" তৈরি করুন যেখানে প্রতিটি রোলকে প্রতিটি অ্যাকশনের বিরুদ্ধে টেস্ট করা হবে।
অঙ্কেবদ্ধ করুন দুধরনের কেস: allow এবং deny:
ভালো টেস্টগুলো আপনাকে ক্যানও এমনকিবচ্ছন্ন ডেটা অনুপস্থিতি (no tenant id, no owner id, null user) কী হবে তা স্পষ্ট করতে বাধ্য করবে।
ইন্টিগ্রেশন টেস্টগুলো সেসব ফ্লো কভার করুন যা AI-র রিফ্যাক্টরের পরে অনুমোদনে ভেঙে পড়ে:
এই টেস্টগুলো বাস্তব রুট/কন্ট্রোলারকে হিট করবে এবং HTTP স্ট্যাটাস কোডসহ রেসপন্স বডি যাচাই করবে (আংশিক ডেটা লিক নেই)।
নির্দিষ্ট টেস্ট যোগ করুন:
অনুমোদন প্রত্যাখ্যানগুলিকে কারণ-কোডসহ লগ করুন (সংবেদনশীল ডেটা নয়), এবং অ্যালার্ট করুন:
এই মেট্রিকগুলো রিলিজ গেট হিসেবে ব্যবহার করুন: যদি প্রত্যাখ্যান প্যাটার্ন অপ্রত্যাশিতভাবে বদলে যায়, ডেপ্লয়ের আগে তদন্ত করুন।
AI-উৎপাদিত অথ রোলআউট একবারের মিশন নয়। এটাকে প্রোডাক্ট পরিবর্তন হিসেবে বিবেচনা করুন: নিয়ম নির্ধারণ করুন, একটি পাতলা অংশ ইমপ্লিমেন্ট করুন, আচরণ যাচাই করুন, তারপর বাড়ান।
কোড জেনারেট করার আগে আপনার অ্যাক্সেস নিয়মস গুরুতরভাবে লেখে ফেলুন:
এটি আপনার প্রম্পট, রিভিউ, ও টেস্টগুলোর "সোর্স অব ট্রুথ" হবে। দ্রুত টেমপ্লেট চাইলে দেখুন /blog/auth-checklist।
একটি প্রাইমারি পদ্ধতি বেছে নিন—সেশন কুকি, JWT, বা OAuth/OIDC—এবং রিপোতে ডকুমেন্ট করুন (README বা /docs)। AI-কে প্রতি বার ঐ স্ট্যান্ডার্ড অনুসরণ করতে বলুন।
মিশ্র প্যাটার্ন (কিছু এন্ডপয়েন্ট সেশন, কিছু JWT) এড়িয়ে চলুন যদি না আপনার কাছে একটি মাইগ্রেশন প্ল্যান এবং স্পষ্ট বাউন্ডারি থাকে।
টীমগুলো সাধারণত HTTP রুট নিরাপদ করে কিন্তু "সাইড ডোর" ভুলে যায়। নিশ্চিত করুন অনুমোদন ধারাবাহিকভাবে প্রয়োগ আছে HTTP কন্ট্রোলার, ব্যাকগ্রাউন্ড জব, অ্যাডমিন স্ক্রিপ্ট/CLI টাস্ক, ওয়েবহুক, এবং ইন্টারনাল সার্ভিসে।
AI-কে বলেন কোথায় চেক হচ্ছে তা দেখাতে এবং ডিফল্ট বন্ধ (deny by default) দাবি করতে।
একটি ব্যবহারকারী জার্নি end-to-end দিয়ে শুরু করুন (উদাহরণ: লগইন + অ্যাকাউন্ট দেখা + অ্যাকাউন্ট আপডেট)। প্রয়োজনে ফিচার ফ্ল্যাগের পিছনে মিশে মর্জ করুন। তারপর পরের স্লাইস যোগ করুন (উদাহরণ: অ্যাডমিন-অনলি অ্যাকশন)।
যদি আপনি Koder.ai দিয়ে end-to-end তৈরি করছেন (উদাহরণ: React ফ্রন্টএন্ড, Go ব্যাকএন্ড, PostgreSQL), এই পাতলা স্লাইস পদ্ধতি মডেলকে কি জেনারেট করতে হবে তা সীমাবদ্ধ রাখে: ছোট ডিফ, পরিষ্কার রিভিউ, এবং কম দুর্ঘটনাজনিত অনুমোদন বাইপাস।
চেকলিস্ট-ভিত্তিক রিভিউ প্রয়োজন করুন এবং প্রতিটি পারমিশন রুলের জন্য টেস্ট বাধ্যতামূলক করুন। একটি ছোট সেট "কখনওই হওয়া যাবে না" মনিটর রাখুন (উদাহরণ: নন-অ্যাডমিন অ্যাডমিন এন্ডপয়েন্টে অ্যাক্সেস)।
RBAC বনাম ABAC মত মডেলিং সিদ্ধান্তের জন্য আগে থেকে /blog/rbac-vs-abac-এ মিলান করুন।
একটি স্টেডি রোলআউট বড়-ব্যাংকের বদলে বেটার—বিশেষ করে যখন AI কোড তৈরি করার গতি টীমগুলোর যাচাই করার গতি ছাড়িয়ে যায়।
যদি আপনি অতিরিক্ত সেফটি নেট চান, verification সহজ করে এমন টুল ও ওয়ার্কফ্লো বেছে নিন: এক্সপোর্টযোগ্য সোর্স কোড অডিটের জন্য, রিপিটেবল ডেপ্লয়মেন্ট, এবং দ্রুত রিভার্ট করার ক্ষমতা। Koder.ai এই ধাঁচের iteration-কে সহজ করতে ডিজাইন করা হয়েছে—সোর্স এক্সপোর্ট এবং স্ন্যাপশট-ভিত্তিক রোলব্যাকসহ—যা অসংখ্য AI-উৎপাদিত কোড জেনারেশনের উপর অ্যাক্সেস কন্ট্রোল কাঁটছাঁট করার সময় কাজে লাগে।