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

হালকা ওজনের (lightweight) নিরাপত্তা স্পট-চেক হলো দ্রুত একটি রিভিউ (সাধারণত ৩০–৬০ মিনিট) যার লক্ষ্য চালান প্রদানের আগে স্পষ্ট, উচ্চ-প্রভাব বিষয়গুলো ধরানো। এটা একটি সম্পূর্ণ অডিট নয়। একে ভাবুন নিরাপত্তা ওয়াক-থ্রুর মতো: আপনি সেই পথগুলো স্ক্যান করেন যেগুলো বাস্তব অ্যাপগুলোতে সবচেয়ে বেশি সমস্যা দেয় এবং অনুমানের বদলে প্রমাণ খুঁজেন।
এই Claude Code নিরাপত্তা চেকলিস্টটি প্রতিদিনের ওয়েব অ্যাপগুলিতে সবচেয়ে বেশি ভেঙে পড়া ক্ষেত্রগুলোর উপর ফোকাস করে:
এটি বাগের অনুপস্থিতি প্রমাণ করার চেষ্টা করে না, জটিল থ্রেট অ্যাক্টরদের মডেল করে না, এবং penetration testing-এর বিকল্প নয়।
“কংক্রিট ফাইন্ডিং” মানে প্রতিটি ইস্যুতে এমন প্রমাণ থাকবে যাতে ডেভেলপার তা তৎক্ষণাৎ কাজ করতে পারে। প্রতিটি ফাইন্ডিংয়ের জন্য নিনদিষ্ট করুন:
AI একটি সহায়ক, কর্তৃত্ব নয়। এটাকে সার্চ, সারমাইজ এবং টেস্ট প্রস্তাব করতে ব্যবহার করুন। তারপর কোড পড়ে যাচাই করুন এবং সম্ভব হলে আসল রিকোয়েস্ট দিয়ে পুনরুৎপাদন করুন। যদি মডেল সুনির্দিষ্ট লোকেশন ও ধাপ দেখাতে না পারে, সেই দাবিকে প্রমাণহীন হিসেবে বিবেচনা করুন।
একটি দ্রুত রিভিউ তখনই কাজ করে যখন আপনি লক্ষ্যটি সংকীর্ণ করেন। Claude Code-কে কিছু দেখানোর আগে ঠিক করুন আজ আপনি কি প্রমাণ করতে চাইছেন এবং কি যাচাই করছেন না।
১ থেকে ৩টি বাস্তব ইউজার জার্নি দিয়ে শুরু করুন যেখানে ভুল হলে অর্থ ক্ষতি, ডেটা প্রকাশ বা ক্ষমতা দেয়ার ঝুঁকি থাকে। ভালো ক্যান্ডিডেট: লগইন, পাসওয়ার্ড রিসেট, চেকআউট, এবং অ্যাডমিন এডিট স্ক্রিন।
এরপর সেই অ্যাসেটগুলো নাম করুন যেগুলো আপনাকে রক্ষা করতে হবে। নির্দিষ্ট থাকুন: ইউজার অ্যাকাউন্ট, পেমেন্ট অ্যাকশন, পার্সোনাল ডাটা, অ্যাডমিন-ওনলি অপারেশন।
তারপর সাধারণ ভাষায় আপনার থ্রেট অনুমানগুলো লিখে রাখুন। আপনি কি কৌতূহলী ব্যবহারকারী, বাইরের স্ক্রিপ্ট চালানো আক্রমণকারী, নাকি কিছু অ্যাক্সেস থাকা ইনসাইডার থেকে প্রতিরক্ষা করছেন? আপনার উত্তর “ভালো পর্যাপ্ত” কেমন হয় সেটা বদলে দেবে।
শেষে, পাস এবং ফেইল সংজ্ঞায়িত করুন যাতে স্পট-চেক ফাইন্ডিং দিয়ে শেষ হয়, আবেগ দিয়ে নয়। সহজ নিয়মগুলি ভালো কাজ করে:
যদি আপনি ব্যর্থতার পরিচিতি বর্ণনা করতে না পারেন, স্কোপ এখনও অস্পষ্ট।
স্পট-চেক কাজ করবে যদি মডেল সঠিক জায়গাগুলো দেখছে। একটি ছোট বাণ্ডিল কোড ও নোট সংগ্রহ করুন যাতে রিভিউ অনুমান নয়, প্রমাণ দিতে পারে।
শুরু করুন সিকিউরিটি-ক্রিটিকাল পথ শেয়ার করে: রিকোয়েস্ট এন্ট্রি পয়েন্ট এবং সেই কোড যা নির্ধারণ করে ব্যবহারকারী কে এবং তারা কী করতে পারে। ডেটা কিভাবে প্রবাহিত হয় তা দেখাতে চারপাশের ছোট অংশ যোগ করুন।
একটি ব্যবহারিক বাণ্ডিলে সাধারণত থাকে:
কিছু লাইন এনভায়রনমেন্ট নোট যোগ করুন যাতে অনুমানগুলো স্পষ্ট হয়: সেশন বনাম JWT, টোকেন কোথায় থাকে (কুকি না হেডার), রিভার্স প্রক্সি বা API গেটওয়ের আচরণ, কিউ/ক্রন ওয়ার্কার, এবং কোনো “ইন্টারনাল-ওনলি” এন্ডপয়েন্ট থাকলে তা।
বাগ খোঁজার আগেই, একটি ইনভেন্টরি চাইুন: এন্ট্রি পয়েন্ট, প্রিভিলেজড এন্ডপয়েন্ট, এবং ডাটা স্টোরস কোনগুলো টাচ করে। এটি মিসড সারফেসগুলো আটকায়।
একটি আউটপুট ফরম্যাটে সম্মত হোন যা কংক্রিট ফাইন্ডিং জোর দেয়। একটি সাদামাটা টেবিল ঠিক কাজ করে: Finding, Severity, Affected endpoint/file, Evidence (নির্দিষ্ট স্নিপেট বা লাইন রেঞ্জ), Exploit scenario, Fix suggestion.
টাইমবক্স করুন:
লক্ষ্য পারফেক্ট কভারেজ নয়। এটি টেস্টেবল ফাইন্ডিংগুলোর একটি ছোট সেট পেতে।
আপনি পড়ার সময় অ্যাপ খুলে রাখুন। UI ক্লিক করে দেখুন কোন অনুরোধগুলো ফায়ার হচ্ছে। নোটগুলো নির্দিষ্ট এন্ডপয়েন্ট, প্যারামিটার এবং ডাটা সোর্স দেখাবে।
একটি ওয়ার্কফ্লো যা এক বসায় হয়:
একটি কার্যকর অভ্যাস: প্রতিটি “ঠিকই লাগছে” জন্য লিখে রাখুন আপনি কিভাবে ভাঙবেন। যদি আপনি ভাঙার চেষ্টা বর্ণনা না করতে পারেন, সম্ভবত ভালভাবে যাচাই করেননি।
Authentication সেই জায়গা যেখানে অ্যাপ সিদ্ধান্ত নেয়, “এই রিকোয়েস্টটি এই ব্যক্তির।” দ্রুত স্পট-চেক সব লাইন পড়ার ব্যাপার নয়। এটা সেই জায়গা খুঁজে বের করার ব্যাপার যেখানে identity তৈরি বা গ্রহণ করা হয়, তারপর শর্টকাট ও failure paths চেক করা।
ট্রাস্ট বাউন্ডারি লোকেট করুন: পরিচয় প্রথম কোথায় তৈরি বা গ্রহণ হয়? এটি হতে পারে সেশন কুকি, JWT বিয়ারার টোকেন, API কী, বা এজে mTLS। Claude Code-কে বলুন সঠিক ফাইল ও ফাংশন দেখাতে যেই "anonymous" কে user id এ বদলে দেয়, এবং সব অন্য পথ গুলো তালিকাভুক্ত করতে।
Authn চেকগুলো যা স্ক্যান করা উচিত:
একটি ব্যবহারিক উদাহরণ: যদি রিসেট ইমেইল "অ্যাকাউন্ট পাওয়া যায়নি" বলে, তাহলে সেটি দ্রুত একটি এনারুমারেশন সমস্যা। এমনকি সাধারণ মেসেজ থাকলেও টাইমিং ডিফারেন্স একই তথ্য ফাঁস করতে পারে, তাই রেসপন্স টাইমিংও চেক করুন।
Authorization ভুল হলে সবচেয়ে বেশি ক্ষতি হয়: "এই ব্যবহারকারী কি এই নির্দিষ্ট রিসোর্সে এই কাজটি করার অনুমতি পায়?" দ্রুত স্পট-চেক ইচ্ছাকৃতভাবে সেই অনুমান ভাজার চেষ্টা করা উচিত।
রোল ও পারমিশন সরল ভাষায় লিখুন। মানবীয় রাখুন:
তারপর যাচাই করুন প্রতিটি সংবেদনশীল অ্যাকশন সার্ভারে enforced হচ্ছে, কেবল UI-তে নয়। বোতাম লুকানো বা ক্লায়েন্টে রুট ব্লক করা যথেষ্ট নয় — আক্রমণকারী সরাসরি API ডাকে তা খেলিয়ে দিতে পারে।
দ্রুত স্ক্যান যেটা সাধারণত সমস্যাগুলো খুঁজে পায়:
ক্লাসিক IDOR গন্ধ সহজ: একটি রিকোয়েস্ট যেমন GET /projects/{id} যেখানে {id} ইউজার-কন্ট্রোলড, এবং সার্ভার এটি লোড করে কিন্তু নিশ্চিত করে না যে এটি বর্তমান ব্যবহারকারীর বা টেন্যান্টের অন্তর্গত।
একটি প্রম্পট যা বাস্তব উত্তর জোর করে:
"এই এন্ডপয়েন্টের জন্য, সঠিক কোড দেখান যা অ্যাক্সেস সিদ্ধান্ত নেয়, এবং তালিকাভুক্ত করুন কোন শর্তগুলো অন্য orgId-র ব্যবহারকারীকে তা অ্যাক্সেস করতে দেবে। যদি না থাকে, ফাইল ও ফাংশন নামসহ কেন ব্যাখ্যা করুন।"
বেশিরভাগ দ্রুত ওয়েব অ্যাপ সমস্যা শুরু হয় এমন কোনো গ্যাপ থেকে: অ্যাপ এমন ইনপুট গ্রহণ করছে যা ডেভেলপার আশা করেননি। “ইনপুট” মানে কিছুই হতে পারে যা ব্যবহারকারী বা অন্য সিস্টেম প্রভাবিত করতে পারে, এমনকি যদি সেটা ক্ষুদ্র লাগে।
স্পট-চেক করতে শুরু করার আগে এন্ডপয়েন্টের ইনপুটগুলো নাম করুন:
ভ্যালিডেশন ডেটা অ্যাপ-এ প্রবেশের কাছাকাছি হওয়া উচিত, ব্যবসায়িক লজিকে গভীরে নয়। বেসিকগুলো চেক করুন: টাইপ (স্ট্রিং বনাম সংখ্যা), সর্বোচ্চ দৈর্ঘ্য, প্রয়োজনীয়তা, এবং ফরম্যাট (ইমেইল, UUID, ডেট)।
রোল, স্ট্যাটাস ফিল্ড বা সোর্ট নির্দেশনার মতো পরিচিত মানগুলোর জন্য allowlist ব্যবহার করুন। এটি "কয়েকটি খারাপ মান ব্লক করা" থেকে কঠিন করে দেয় বাইপাস করা।
এরর হ্যান্ডলিংও চেক করুন। যদি অ্যাপ ইনপুট রিজেক্ট করে, কাঁচা মান রেসপন্স, লগ বা UI-তে ইকো করে না। ছোট ভ্যালিডেশন বাগ গোপনীয়তা ফাঁস বা ইনজেকশন সহায়ক করে।
রিস্কি এন্ডপয়েন্টগুলো (লগইন, সার্চ, আপলোড, অ্যাডমিন অ্যাকশন) জন্য দ্রুত "খারাপ ইনপুট" মিনি-প্ল্যান:
উদাহরণ: একটি সোর্ট প্যারামিটার যে কোনো স্ট্রিং নেয় সেটি পরে SQL ফ্রেগমেন্ট হতে পারে। "date" বা "price" এর মতো allowlist এমন ধরনের ভুলগুলো শুরুতেই আটকায়।
অধিকাংশ দ্রুত রিভিউ একই কিছু জায়গায় সমস্যা খুঁজে পায়: যেখানে ইনপুটকে কোড, কুয়েরি, পাথ বা URL হিসেবে ইন্টারপ্রেট করা হয়। এই অংশে আপনি “ইনপুট ট্রাস্ট বাউন্ডারি পার হচ্ছে” মুহূর্তগুলো হান্ট করবেন।
এন্ট্রি পয়েন্ট (কুয়েরি প্যারাম, হেডার, কুকি, আপলোড, অ্যাডমিন ফর্ম) থেকে ডাটা যেখানে শেষ হয় সে জায়গা পর্যন্ত ট্রেস করুন।
এই প্যাটার্নগুলো খুঁজুন এবং প্রতিটির জন্য একটি কংক্রিট কল সাইট ও পেলোড উদাহরণ চাইুন:
ORDER BY, এবং IN (...) বিল্ডারগুলো যা ইউজার মান যোগ করেডেসেরিয়ালাইজেশন ও টেমপ্লেট ইনজেকশনের দিকে ও চকচকে নজর রাখুন। যেকোনো ফিচার যা ইউজার দেওয়া JSON, YAML বা টেমপ্লেট-স্ট্রিং পার্স করে ঝুঁকি লুকাতে পারে, বিশেষত যখন কাস্টম টাইপ বা এক্সপ্রেশন সমর্থন করে।
একটি ফিচার URL, ফাইলনেম বা ফরম্যাট করা টেক্সট নেয়, ধরে নিন এটি কুআব্যবহার করা যেতে পারে যতক্ষণ না আপনি কোড-পথ ও টেস্ট দিয়ে প্রমাণ করেন।
সিক্রেট সমস্যা বেশ জোরে ভেসে ওঠে যেহেতু আপনি জানেন কোথায় দেখবেন। কোথায় সিক্রেট থাকে এবং কোথায় আকস্মিকভাবে কপি হচ্ছে তাতে ফোকাস করুন।
সিক্রেট সাধারণত কোথাও প্রদশিত হয়:
তাহলে একটি কংক্রিট উত্তর জোর করুন: যদি আজ একটি সিক্রেট ফাঁস হয়, পরের পদক্ষেপ কী? একটি ভাল সিস্টেমে রোটেশন পাথ (নতুন কী ইস্যু), রিভোকেশন (পুরনো কী ডিসেবল), এবং দ্রুত রেডিপ্লয়ের উপায় থাকবে। যদি উত্তর "পরে পরিবর্তন করব" হয়, সেটাকে ফাইন্ডিং হিসেবে নিন।
লিস্ট প্রিভিলেজ একটি দ্রুত উইন। কী অত্যাধিক ক্ষমতাসম্পন্ন হলে ইনসিডেন্ট খারাপ হয়। ডাটাবেস ইউজার যারা টেবিল ড্রপ করতে পারে, তৃতীয়-পক্ষ টোকেন যারা অ্যাকাউন্ট ম্যানেজ করতে পারে, বা পরিবেশে শেয়ার করা API কী দেখুন। পরিষেবাভিত্তিক, পরিবেশভিত্তিক একটি কী এবং ন্যূনতম অনুমতি পছন্দ করুন।
দ্রুত স্পট-চেক প্রম্পট উদাহরণ:
শেষে, গার্ডরেইল কনফার্ম করুন: সোর্স কন্ট্রো-তে সিক্রেট ব্লক করুন (pre-commit/CI চেক), এবং ব্যাকআপ বা স্ন্যাপশট_plaintext credentials না রাখার নিশ্চয়তা দিন। যদি প্ল্যাটফর্ম স্ন্যাপশট ও রোলব্যাক সপোর্ট করে, নিশ্চিত করুন সিক্রেটগুলো রানটাইম-এ ইনজেক্ট হয়, সেভ করা ইমেজে বেকড নয়।
অনিশ্চিত প্রম্পট অনিশ্চিত উত্তর দেয়। মডেলকে প্রমাণের জন্য বাধ্য করুন: সঠিক লোকেশন, ট্রেস যা আপনি অনুসরণ করতে পারেন, একটি রেপ্রো যেটা চালাতে পারবেন, এবং কি হলে দাবি ভুল প্রমাণ হবে।
একটি সময়-একটি প্যাটার্ন ব্যবহার করুন, তারপর আপনার সম্মতি বা প্রত্যাখ্যানের পরে পুনরায় বলুন।
যদি আউটপুট এখনও অস্পষ্ট লাগে, এটাকে পিন করুন:
"উত্তর কেবল: ফাইল পাথ, ফাংশন নাম, ঝুঁকিপূর্ণ লাইন, এবং এক বাক্যে ইমপ্যাক্ট।"
প্রোফাইল আপডেট এন্ডপয়েন্ট প্রায়ই অ্যাক্সেস কন্ট্রোল বাগ লুকায়। এখানে একটি ছোট কেস যা এই চেকলিস্ট অনুসরণ করে দেখা যাবে।
পরিস্থিতি: একটি API এন্ডপয়েন্ট ইউজার প্রোফাইল আপডেট করে:
PATCH /api/profile?accountId=123 JSON যেমন { "displayName": "Sam" }।
আপনি Claude Code-কে হ্যান্ডলার খুঁজে বের করতে, accountId কিভাবে ব্যবহার হচ্ছে ট্রেস করতে, এবং সার্ভার মালিকানা এনফোর্স করছে কিনা প্রমাণ করতে বলেন।
সাধারণত যা দেখা যায়:
accountId কুয়েরি স্ট্রিং থেকে বিশ্বাস করে এবং লগ-ইন করা ইউজারের সাথে মিল আছে কি না যাচাই করে না।displayName ট্রিম করা হয়, কিন্তু accountId ইন্ট হিসেবে ভ্যালিডেট করা হয় না।"... WHERE account_id=" + accountId এভাবে।একটি ভাল রাইট-আপ কংক্রিট হবে:
accountId বদলানো হয়; SQL অনচিহ্নিত ইনপুট থেকে বানানো হচ্ছেaccountId উপেক্ষা করুন, সার্ভারে authenticated user's account id ব্যবহার করুন; কুয়েরি প্যারামিটারাইজ করুনaccountId প্রত্যাখ্যান করুনপ্যাচ করার পরে দ্রুত পুনঃচেক করুন:
accountId দিয়ে চালিয়েছেন তা ব্যর্থ হয় কিনা নিশ্চিত করুন।স্পট-চেক মিস করার দ্রুততম উপায় হলো UI-তে যা enforce করা হয় সেটার ওপর ভর করা। একটি বোতাম লুকানো বা নিষ্ক্রিয় থাকলেই সেটা পারমিশন চেক নয়। যদি সার্ভার রিকোয়েস্ট গ্রহণ করে, হ্যাক করবে সরাসরি API কলে।
আরেকটি সাধারণ ভুল হচ্ছে অস্পষ্ট অনুরোধ করা। "একটি নিরাপত্তা রিভিউ কর" সাধারণত জেনেরিক রিপোর্ট দেয়। একটি স্পট-চেকের জন্য কড়াকড়ি স্কোপ দরকার (কোন এন্ডপয়েন্ট, কোন রোল, কোন ডেটা) এবং একটি কঠোর আউটপুট ফরম্যাট (ফাইল নাম, ফাংশন, ঝুঁকিপূর্ণ লাইন, ন্যূন্যতম রেপ্রো)।
একই নিয়ম AI আউটপুটেও প্রযোজ্য: রেফারেন্স ছাড়া দাবী গ্রহণ করবেন না। যদি একটি ফাইন্ডিংতে কংক্রিট কোড লোকেশন ও ট্রিগার স্টেপ না থাকে, সেটাকে প্রমাণহীন হিসেবে নিন।
এই ফাঁদগুলো বারবার দেখা যায়:
যদি আপনি নিজেকে প্রতিটি নতুন কেসে ফিল্টার বাড়াতে দেখেন, থামুন। ফিক্স সাধারণত boundary-তে সহজ ও আগেই: ইনপুট ভ্যালিডেট করুন এবং অথরাইজেশন চেকগুলো স্পষ্ট ও কেন্দ্রীভূত করুন যাতে প্রতিটি কোড পাথ তা ব্যবহার করে।
এইগুলো পুরো রিভিউ প্রতিস্থাপন করে না, কিন্তু ক্লান্ত সময়ে স্লিপ করা ভুলগুলো ধরতে সাহায্য করে। তাদের ফোকাস রাখুন এমন জিনিসে যা আপনি দ্রুত প্রমাণ করতে পারেন: একটি রিকোয়েস্ট পাঠাতে, একটি পেজ লোড করতে, একটি লগ লাইন খুঁজে পেতে।
সেগুলো:
পরবর্তী সপ্তাহে যা শিপ করা যাবে তার শীর্ষ ৩টি ফিক্স লিখে রাখুন, ইচ্ছের তালিকা নয়। উদাহরণ: (1) লগইন ও পাসওয়ার্ড রিসেট-এ রেট লিমিট যোগ করুন, (2) "get by id" এন্ডপয়েন্টে সার্ভার-সাইড মালিকানা চেক জোরদার করুন, (3) সার্চ ফিল্ডের ইনপুট দৈর্ঘ্য কেটে দিন ও অনাকাঙ্ক্ষিত ক্যারেক্টার প্রত্যাখ্যান করুন।
একটি স্পট-চেক তখনই মূল্যবান যখন ফলাফলগুলো আপনার শিপিং আচরণ বদলে দেয়। এই চেকলিস্টটিকে একটি ছোট, পুনরাবৃত্তিযোগ্য বিল্ড স্টেপ হিসেবে বিবেচনা করুন, এককালীন রেস্কিউ মিশন হিসেবে নয়।
প্রতিটি ফাইন্ডিংকে এমন একটি ব্যাকলগ আইটেমে পরিণত করুন যা বোঝা কঠিন না:
একটি ক্যাডেন্স পছন্দ করুন যা আপনার রিস্ক ও টিম সাইজের সঙ্গে মেলে। অনেক টিমের জন্য প্রতিটি রিলিজই ভালো। যদি রিলিজ ঘন হয়, তাহলে মাসিক ৩০–৬০ মিনিট রিভিউ এবং শিপের আগে একটি সংক্ষিপ্ত চেক করুন।
পুনরাবৃত্তি সহজ করতে একটি পুনঃব্যবহারযোগ্য প্রম্পট প্যাক ও চেকলিস্ট টেমপ্লেট তৈরি করুন। প্রম্পটগুলো কংক্রিট আউটপুটের দিকে ফোকাস রাখুন: রুট দেখান, গার্ড দেখান, ব্যর্থ রিকোয়েস্ট দেখান, এবং প্রত্যাশিত আচরণ বলুন। প্যাকটিকে আপনার দলের কাজের জায়গায় রাখুন যাতে এটি বাদ না পড়ে।
যদি আপনি চ্যাটের মাধ্যমে অ্যাপ বানান, প্লানিংয়ে এই চেকলিস্ট বেক করুন। authn/authz, ইনপুট, ও সিক্রেট নিয়ে ছোট "সিকিউরিটি অনুমান" নোট যোগ করুন, তারপর প্রথম কাজ করা ভার্সনের পরে স্পট-চেক চালান।
Platforms like Koder.ai (koder.ai) এই অভ্যাসে ভাল ফিট করতে পারে কারণ সেগুলো দ্রুত ইটারেট করতে দেয় এবং রিভিউ চেকপয়েন্ট রক্ষা করে। স্ন্যাপশট ও রোলব্যাক ঝুঁকিপূর্ণ পরিবর্তনের চারপাশে ব্যবহার করলে সিকিউরিটি ফিক্স শিপ করা সহজ হয় যখন কোন পরিবর্তন আচরণ ভাঙে।