সুরক্ষিত কোডিং সহায়তার জন্য Claude Code-এ সংবেদনশীল কনটেক্সট কমানো
Claude Code-এ সংবেদনশীল কনটেক্সট কিভাবে কমানো যায়—প্রায়োগিক প্রম্পট টেমপ্লেট, ফাইল-শেয়ারিং কর্মকৌশল, এবং রিড্যাকশন পদক্ষেপ যা এখনও কার্যকর কোডিং সাহায্য দেয়।

কেন কনটেক্সট কমানো গুরুত্বপূর্ণ যখন কোডিং সাহায্য চাইছেন
“কনটেক্সট” হলো মডেলের সঙ্গে আপনি যা শেয়ার করেন: কোড স্নিপেট, স্ট্যাক ট্রেস, কনফিগ ফাইল, পরিবেশ ভেরিয়েবল, ডাটাবেস স্যাম্পল, স্ক্রিনশট, এমনকি একই চ্যাটের আগের মেসেজগুলোও। বেশি কনটেক্সট ডিবাগিং দ্রুততর করতে পারে, কিন্তু এর ফলে আপনি ভুল করে এমন কিছু পেস্ট করার সম্ভাবনা বাড়ে যা শেয়ার করা উচিত ছিল না।
অতিরিক্ত শেয়ার সাধারণত চাপের সময় ঘটে। একটি বাগ রিলিজ ব্লক করে, ডেমোর ঠিক আগেই অথেন্টিকেশন ভেঙে যায়, বা সিআই-তে ফ্লেকি টেস্ট ফেল করে। ঐ মুহূর্তে সহজেই পুরো ফাইল, তারপর পুরো লগ, তারপর পুরো কনফিগ "অনুরোধে" পেস্ট করে ফেলতে পারেন। টিমের অভ্যাসও একইভাবে কাজ করে: কোড রিভিউ ও ডিবাগিং-এ পূর্ণ দৃশ্যমানতা স্বাভাবিক, যদিও কেবল একটি ছোট অংশই প্রয়োজন।
ঝুঁকিগুলো কাল্পনিক নয়। একবার পেস্ট করলেই সিক্রেট, কাস্টমার ডেটা বা অভ্যন্তরীণ সিস্টেমের বিবরণ লিক হতে পারে। সাধারণ উদাহরণগুলোর মধ্যে আছে:
- API কী, টোকেন, প্রাইভেট কী, সেশন কুকি
- অভ্যন্তরীণ URL, IP, হোস্টনেম, সার্ভিস নাম
- লগে কাস্টমার ডেটা (ইমেইল, নাম, আইডি, পেমেন্ট)
- প্রকাশ না করা ব্যবসায়িক লজিক (দাম নির্ধারণ, প্রতারণা চেক)
- সিকিউরিটি বিবরণ (অ্যাডমিন এন্ডপয়েন্ট, ফিচার ফ্ল্যাগ, এক্সেস প্যাটার্ন)
উদ্দেশ্য গোপন থাকা নয়। এটি হলো এমন ক্ষুদ্র অংশ শেয়ার করা যা এখনও ইস্যু পুনরুত্পাদন করে বা সিদ্ধান্ত ব্যাখ্যা করে, যাতে একই মানের সাহায্য পান কিন্তু ঝুঁকি কম থাকে।
একটি সহজ মানসিক মডেল: সহকারীকে একটি সহায়ক বাইরের সহযোগীর মতো ভাবুন যাকে আপনার পুরো রিপো দরকার নেই। একভাবে শুরু করুন একটি সুনির্দিষ্ট প্রশ্ন দিয়ে ("কেন এই অনুরোধ 401 রিটার্ন করে?")। তারপর কেবল সেই জিনিসগুলো শেয়ার করুন যা সেই প্রশ্নকে সমর্থন করে: ব্যর্থ ইনপুট, প্রত্যাশিত আউটপুট, প্রকৃত আউটপুট এবং সংশ্লিষ্ট সংকীর্ণ কোড পথ।
যদি একটি লগইন কল ব্যর্থ হয়, সাধারণত পুরো অথ মডিউল দরকার হয় না। একটি স্যানিটাইজ করা অনুরোধ/প্রতিক্রিয়া জোড়া, হেডার বানানোর ফাংশন, এবং রিলেভেন্ট কনফিগ কী-গুলোর (মান গুলো প্রতিস্থাপিত) অন্তর্ভুক্ত করা প্রায়ই যথেষ্ট।
কীকে সংবেদনশীল কনটেক্সট ধরা হয় (এবং মানুষ যা ভুলে যায়)
যখন আপনি কোডিং সাহায্য চাইছেন, “কনটেক্সট” কেবল সোর্স কোড নয়। এটি এমন যেকোনো কিছু যা কোনোকে লগইন করতে, কোনো ব্যক্তিকে শনাক্ত করতে বা আপনার সিস্টেম ম্যাপ করতে সাহায্য করতে পারে। প্রথমেই জানুন কী বিষয়ে সতর্ক থাকা দরকার।
স্পষ্ট: সিক্রেট এবং ক্রেডেনশিয়াল
ক্রেডেনশিয়াল একটি সাহায্যকারী স্নিপেটকে ঘটনায় রূপ দিতে পারে। এতে API কী ও টোকেন, প্রাইভেট কী, সেশন কুকি, সাইনড ইউআরএল, OAuth ক্লায়েন্ট সিক্রেট, ডাটাবেস পাসওয়ার্ড, এবং লগে প্রিন্ট হওয়া "অস্থায়ী" টোকেন অন্তর্ভুক্ত।
একটি সাধারণ বিস্ময়জনক বিষয় হলো অপ্রত্যক্ষ লিক। একটি ত্রুটি বার্তায় সম্পূর্ণ রিকোয়েস্ট হেডার থাকতে পারে যেখানে Authorization bearer টোকেন আছে, বা এনভায়রনমেন্ট ভ্যারিয়েবলগুলোর ডিবাগ ডাম্প থাকতে পারে।
ব্যক্তিগত ও নিয়ন্ত্রিত ডেটা
কোনো ব্যক্তির সঙ্গে সম্পর্কিত ডেটা সংবেদনশীল হতে পারে, এমনকি যদি তা এককভাবে নিরীহ মনে হয়। ইমেইল, নাম, ফোন নম্বর, ঠিকানা, কাস্টমার আইডি, কর্মচারী আইডি, সাপোর্ট টিকেট কথোপকথন, এবং পেমেন্ট বিশদের দিকে সতর্ক হোন।
যদি বাগ পুনরুত্পাদনের জন্য ডেটা প্রয়োজন হয়, আসল রেকর্ডগুলোর বদলে বাস্তবসম্মত ফেকগুলো ব্যবহার করুন। কাঠামো (ফিল্ড ও টাইপ) রাখুন, পরিচয় নয়।
অভ্যন্তরীণ বিবরণ যা আপনার সংস্থাকে ম্যাপ করে
"সাধারণ" অভ্যন্তরীণ তথ্যও আক্রমণকারী ও প্রতিযোগীর কাছে মূল্যবান: হোস্টনেম, IP, রিপো নাম, টিকেট আইডি, ভেন্ডর নাম, চুক্তির শর্ত, এবং অভ্যন্তরীণ সার্ভিস URL।
একটি স্ট্যাক ট্রেসও ফোল্ডার পাথের মাধ্যমে ইউজারনেম বা ক্লায়েন্ট নাম প্রকাশ করতে পারে, সার্ভিস নামকরণ কনভেনশন, এবং ক্লাউড অ্যাকাউন্ট সংক্রান্ত ইঙ্গিত (বাকেট নাম, রিজিয়ন স্ট্রিং) দেখাতে পারে।
মালিকানাধীন লজিক এবং “সিক্রেট সস”
সব কোড সমানরূপে সংবেদনশীল নয়। সবচেয়ে ঝুঁকিপূর্ণ অংশগুলো হলো যেগুলো আপনার ব্যবসার কাজের কিভাবে কাজ করে তা কোড করে: মূল্যনির্ধারণ ও ডিসকাউন্ট নিয়ম, প্রতারণা পরীক্ষা, সুপারিশ লজিক, LLM ফিচারের জন্য প্রম্পট টেমপ্লেট, এবং কৌশলগত ডকস।
যদি আপনি একটি বাগ নিয়ে সাহায্য চান, পুরো মডিউল নয়, সেই ক্ষুদ্রতর ফাংশনটি শেয়ার করুন যা এটিকে পুনরুত্পাদন করে।
মেটাডেটা লিক যা মানুষ ভুলে যায়
সংবেদনশীল বিবরণ প্রায়ই এমন জায়গায় থাকে যা আপনি লক্ষ্য করেন না: নামসহ মন্তব্য, কমিট মেসেজ, TODO-তে গ্রাহক উল্লেখ, এবং স্ট্যাক ট্রেস যা "যেমন আছে" পেস্ট করা হয়। কনফিগ ফাইলগুলো বিশেষভাবে ঝুঁকিপূর্ণ কারণ এগুলো নিরাপদ সেটিংসের সাথে সিক্রেট মিশায়।
একটি ব্যবহারিক নিয়ম: যদি টেক্সটটি কোনো অচেনাকে আপনার সিস্টেম দ্রুত বুঝতে সাহায্য করবে তুলনায় একটি ক্লিন-রুম উদাহরণ, তাহলে এটিকে সংবেদনশীল ধরুন এবং রিড্যাক্ট বা প্রতিস্থাপন করুন।
পেস্ট করার আগে যতটুকু প্রয়োজন ততোটুকুই শেয়ার করুন
একটি 30 সেকেন্ড বিরতি — ফলাফল সংজ্ঞায়িত করার জন্য — প্রায়শই আপনি শেয়ার করা অনেককিছুই কেটে দেয়।
শুরু করুন এক বাক্যে আপনি কোন ফলাফল চান বলে। আপনি কি বাগের কারণ খুঁজছেন, নিরাপদ রিফ্যাক্টর পরিকল্পনা চাইছেন, নাকি টেস্ট ডিজাইন করতে চান? প্রতিটি লক্ষ্য বিভিন্ন ইনপুট চায়। বাগ অনুসন্ধান সাধারণত একটি স্ট্যাক ট্রেস ও একটি ছোট ফাংশন প্রয়োজন। রিফ্যাক্টর প্রশ্নে সাধারণত পাবলিক ইন্টারফেস ও বর্তমান ব্যবহারের ছোট উদাহরণই যথেষ্ট।
তারপর একটি "মিনিমাল আর্টিফ্যাক্ট" বেছে নিন যা সমস্যাটি প্রমাণ করে। সবচেয়ে ছোট জিনিসটি নিন যা এখনও ফেল করে: একটি ব্যর্থ টেস্ট, ত্রুটি ট্রিগার করা ছোট স্নিপেট, ব্যর্থতার চারপাশের সংক্ষিপ্ত লগ, বা প্লেসহোল্ডার সহ সরলীকৃত কনফিগ নমুনা।
ডেটা বর্ণনা করার সময় মানগুলোর বদলে আকার (shapes) বেছে নিন। “User object has id (UUID), email (string), role (enum), createdAt (timestamp)” প্রায়ই যথেষ্ট। উদাহরণ দরকার হলে, আসল রেকর্ড না দিয়ে ফেক ব্যবহার করুন যেগুলো ফর্ম্যাট মেলে।
ফাইল নিয়ে কঠোর হন। কেবল সেই মডিউল শেয়ার করুন যা আপনি পরিবর্তন করছেন এবং যেগুলো ইন্টারফেস করে। যদি একটি ফাংশন অন্য মডিউলে কল করে, প্রায়শই তার সিগনেচার ও এটি কী রিটার্ন করে তা বর্ণনা করলেই হয়। যদি বাগটি অন্য সার্ভিসে অনুরোধের সাথে সম্পর্কিত, তখন কেবল অনুরোধের শেপ, হেডার নামের তালিকা (মান নয়), এবং প্রত্যাশিত রেস্পন্স শেপই দরকার হতে পারে।
নিচের জিনিসগুলো কখনোই মেশিন থেকে বাইরে না যাক: API কী, প্রাইভেট সার্টিফিকেট, অ্যাক্সেস টোকেন, কাস্টমার ডেটা, অভ্যন্তরীণ URL, পূর্ণ রিপো ডাম্প, এবং কাঁচা প্রোডাকশন লগ। যদি আপনি 401 ডিবাগ করছেন, অথ ফ্লো ও ত্রুটি বার্তা শেয়ার করুন, কিন্তু টোকেনকে TOKEN_REDACTED এবং ইমেইলকে [email protected] দিয়ে প্রতিস্থাপন করুন।
রিড্যাকশন প্যাটার্ন যা কোড ও লগকে কার্যকর রাখে
ভাল রিড্যাকশন শুধু সিক্রেট লুকানোর নয়। এটি সমস্যার কাঠামো বজায় রাখে যাতে সহকারী এখনও যুক্তি করতে পারে। অনেক বেশি মুছে ফেললে সাধারণ পরামর্শ পাবেন; খুব কম করলে ডেটা লিকের ঝুঁকি বাড়ে।
প্যাটার্ন 1: ধারাবাহিক প্লেসহোল্ডার ব্যবহার করুন
একটি প্লেসহোল্ডার স্টাইল বেছে নিন এবং কোড, কনফিগ, লগ জুড়ে এতে অনুবর্তী হোন। ধারাবাহিকতা ফ্লো অনুসরণ করা সহজ করে।
যদি একই টোকেন তিন জায়গায় দেখা যায়, তিনটা আলাদা উপায়ে প্রতিস্থাপন করবেন না। API_KEY_1, TOKEN_1, USER_ID_1, CUSTOMER_ID_1, EMAIL_1 এর মতো প্লেসহোল্ডার ব্যবহার করুন এবং দরকারে ইনক্রিমেন্ট করুন (TOKEN_2, TOKEN_3)।
একটি সংক্ষিপ্ত লেজেন্ড সহায়ক কিন্তু আসল মান প্রকাশ করে না:
TOKEN_1: Authorization header-এ ব্যবহৃত bearer tokenCUSTOMER_ID_1: ডাটাবেস লুকআপে ব্যবহৃত অভ্যন্তরীণ কাস্টমার আইডিAPI_KEY_1: পেমেন্ট প্রোভাইডার কল করার জন্য ব্যবহৃত কী
প্যাটার্ন 2: ফরম্যাট সংরক্ষণ করুন যখন তা গুরুত্বপূর্ণ
কিছু বাগ লেন্থ ও স্ট্রাকচারে নির্ভর করে (পার্সিং, ভ্যালিডেশন, সিগনেচার চেক, রেগেক্স)। সেই ক্ষেত্রে, অনন্য স্ট্রিংগুলোকে ডামি মান দিয়ে প্রতিস্থাপন করুন যা একই রকম দেখায়।
উদাহরণ:
- JWT-র মতো টোকেন: তিনটি ডট-বিচ্ছিন্ন অংশ রাখুন, অনুরূপ দৈর্ঘ্য
- UUID-সদৃশ স্ট্রিং: 8-4-4-4-12 প্যাটার্ন রাখুন
- Base64-সদৃশ ব্লব: অনুরূপ অক্ষর সেট এবং আনুমানিক দৈর্ঘ্য রাখুন
এতে আপনি বলতে পারবেন "টোকেন ভ্যালিডেশন ফেল করছে" কিন্তু আসল টোকেন প্রকাশ হবে না।
প্যাটার্ন 3: মান রিড্যাক্ট করুন কিন্তু স্ট্রাকচার রাখুন
JSON শেয়ার করলে কী রাখুন এবং মান প্রতিস্থাপন করুন। কী গুলো দেখায় সিস্টেম কী আশা করে; মানগুলো প্রায়ই সংবেদনশীল।
এর বদলে:
{"email":"EMAIL_1","password":"PASSWORD_1","mfa_code":"MFA_CODE_1","customer_id":"CUSTOMER_ID_1"}
SQL-এর ক্ষেত্রেও একই ধারণা: টেবিল নাম, joins, এবং কন্ডিশন রাখুন, কিন্তু লিটারালগুলো মুছে ফেলুন।
- রাখুন:
WHERE user_id = USER_ID_1 AND created_at > DATE_1 - মুছে ফেলুন: আসল আইডি, টাইমস্ট্যাম্প, ইমেইল, ঠিকানা
প্যাটার্ন 4: সংবেদনশীল ব্লকগুলোর সারসংক্ষেপ দিন
যদি একটি ফাংশনে ব্যবসায়িক নিয়ম বা মালিকানাধীন লজিক থাকে, তা পেস্ট না করে বর্ণনা করুন। কীই বা প্রভাব ফেলে তা রাখুন: ইনপুট, আউটপুট, সাইড-ইফেক্ট, এবং এর ত্রুটি হ্যান্ডলিং।
উদাহরণ সারাংশ:
“signRequest(payload) একটি JSON পে-লোড নেয়, timestamp ও nonce যোগ করে, তারপর method + path + body থেকে HMAC SHA-256 সিগনেচার তৈরি করে। এটি {headers, body} রিটার্ন করে। ত্রুটি ঘটে যখন পে-লোডে non-ASCII ক্যারেক্টার থাকে।”
এটি সাধারণত এনকোডিং, ক্যানোনিকালাইজেশন, এবং সিগনেচার মিসম্যাচ নির্ণয় করার জন্য যথেষ্ট তথ্য দেয়, পুরো ইমপ্লিমেন্টেশন শেয়ার না করেই।
প্যাটার্ন 5: একটি সংক্ষিপ্ত রিড্যাকশন নোট যোগ করুন
আপনার প্রম্পটের শেষে উল্লেখ করুন আপনি কী সরিয়েছেন ও কী রেখেছেন। এতে ব্যাক-এন্ড-ফোরথ কমে এবং আপনাকে আরো পেস্ট করতে বলা হওয়ার সম্ভাবনা কমে।
উদাহরণ:
“Redacted: tokens, emails, customer data, full request bodies. Kept: endpoint paths, status codes, header names, stack trace frames, and the exact error text.”
এমন প্রম্পট প্যাটার্ন যা অতিরিক্ত শেয়ার এড়ায় কিন্তু উত্তর পায়
সহকারীকে এমন একটি সহকর্মীর মতো ভাবুন যার কেবল আপনি কাজ করছেন অংশটি দরকার। পুরো ফাইলের বদলে ইন্টারফেস ও কন্ট্রাক্ট শেয়ার করুন: ফাংশন সিগনেচার, টাইপ, অনুরোধ/প্রতিক্রিয়া শেপ, এবং সঠিক ত্রুটি টেক্সট।
সাধারণ ভাষায় একটি ন্যূনতম রেপ্রো প্রায়ই যথেষ্ট: আপনি কী ইনপুট দিয়েছিলেন, কী আশা করেছিলেন, কী ঘটল, এবং কিছু পরিবেশ নোট (রানটাইম ভার্সন, OS, ফ্রেমওয়ার্ক ভার্সন)। আপনার পুরো প্রজেক্ট ইতিহাস দরকার নেই।
কিছু টেমপ্লেট যা ভাল কাজ করে:
- “এই ফাংশন সিগনেচার ও কলার দিলে, এই ত্রুটির সবচেয়ে সম্ভাব্য কারণগুলো কী এবং প্রথমে আমি কী পরীক্ষা করব?” (শুধু রিলেভেন্ট ফাংশন ও কলিং লোকেশন শেয়ার করুন)
- “আমি এই অনুরোধ (স্যানিটাইজড) পাঠাই এবং এই প্রতিক্রিয়া পাই (স্যানিটাইজড)। সার্ভার কেন এই স্ট্যাটাস কোড রিটার্ন করতে পারে?” (হেডার নাম রাখুন, অথ মান সরান)
- “এখানে রেপ্রো ধাপ, প্রত্যাশিত বনাম প্রকৃত আউটপুট, এবং পরিবেশ আছে। বিচ্ছিন্ন করার জন্য 3টি ফোকাসড এক্সপেরিমেন্ট সাজেস্ট করুন।”
- “এই লগ এক্সট্র্যাক্ট ব্যর্থতা দেখায় সাথে 10 লাইন আগে ও পরে। সহজ ব্যাখ্যা কী, এবং কোন একটা অতিরিক্ত লগ লাইন যোগ করলে এটি নিশ্চিত হবে?”
- “এখানে আমার স্যানিটাইজড কনফিগ আছে যা দেখায় কোন কী আছে। কোনগুলো এই ইস্যুর জন্য ভুল সেট হয়েছে বলে মনে হতে পারে?” (কী গুলো, মান নয়)
একটি স্যানিটাইজড কনফিগ ব্লক একটি মাঝামাঝি উপায়। এটি কোন নাবলিকটা আছে দেখায় কিন্তু সিক্রেট দেয় না:
# sanitized
DB_HOST: "<set>"
DB_PORT: "5432"
DB_USER: "<set>"
DB_PASSWORD: "<redacted>"
JWT_SECRET: "<redacted>"
OAUTH_CLIENT_ID: "<set>"
OAUTH_CLIENT_SECRET: "<redacted>"
নিরাপদ প্রম্পটের উদাহরণ:
“Login fails with 401. Expected 200. Actual response body: ‘invalid token’. Environment: Node 20, local dev, time sync enabled. Request contract: Authorization: Bearer redacted. Verify steps: token is issued by /auth/login and used on /me. What are the top causes (clock skew, audience mismatch, signing secret mismatch), and what single check confirms each?”
কোডিং সহায়তার জন্য নিরাপদ ফাইল-শেয়ারিং কর্মপ্রবাহ
একটি নির্ভরযোগ্য অভ্যাস হলো শেয়ারিংকে একটি ছোট পুনরুত্পাদন প্যাকেজ হিসেবে দেখা। নিরীক্ষণের জন্য পর্যাপ্ত জিনিস শেয়ার করুন, এবং আর কিছু নয়।
একটি ব্যবহারিক পদ্ধতি হলো একটি অস্থায়ী “শেয়ার ফোল্ডার” যা আপনার আসল রিপো থেকে আলাদা। ফাইলগুলো ম্যানুয়ালি কপি করুন, পুরো প্রজেক্ট শেয়ার না করে। এটি ইচ্ছাকৃত পছন্দ চাপায়।
ওয়ার্কফ্লো সহজ রাখুন:
- কেবল যা রেপ্রোডিউস করে তা কপি করুন (প্রায় 1–3 ফাইল, প্লাস একটি কনফিগ টেমপ্লেট)
- একটি সংক্ষিপ্ত README-স্টাইল নোট যোগ করুন: প্রত্যাশিত আচরণ, প্রকৃত আচরণ, কিভাবে রান করবেন, কী ইচ্ছাকৃতভাবে অনুপস্থিত
- সিক্রেট ও এন্ডপয়েন্টগুলো স্টাব করুন: বাস্তব টোকেন, কী, হোস্টনেমগুলো প্লেসহোল্ডারে ও উদাহরণ ডোমেইন বা লোকালহোস্ট পোর্টে প্রতিস্থাপন করুন
- যদি ডেটা প্রয়োজন হয়, ছোট সিন্থেটিক ফিক্সচার দিন (উদাহরণ: 10–20 সারি ফেইক ইমেইল ও আইডি), ডাটাবেস ডাম্প নয়
- "শুধু কেয়ার করার জন্য" কোনো পুরাতন লগ, অপ্রাসঙ্গিক মডিউল, ডুপ্লিকেট ভার্সন রাখবেন না
ফোল্ডার তৈরি করার পরে, এটিকে একটি বাইরের দর্শকের মতো পড়ুন। যদি কোনো ফাইল নির্দিষ্ট সমস্যায় সহায়তা না করে, সেটি সেখানে থাকা উচিত নয়।
রিড্যাক্ট করার সময় কোড বা লগ ভাঙবেন না। টাইপ ও স্ট্রাকচার রাখতে এমন প্লেসহোল্ডার ব্যবহার করুন যা স্পষ্ট। উদাহরণস্বরূপ, বদলান:
DATABASE_URL=postgres://user:[email protected]:5432/app
এর সাথে:
DATABASE_URL=postgres://user:REDACTED@localhost:5432/app
যদি বাগটি তৃতীয় পক্ষের রেস্পন্সে নির্ভরশীল, আপনার README-তে রেস্পন্স শেপ লিখে একটি সিন্থেটিক JSON ফাইল যোগ করুন যেটি মিল রাখে। আসল ট্র্যাফিক শেয়ার না করেই অর্থপূর্ণ ডিবাগিং করা যায়।
ধাপে ধাপে: সাহায্য চাওয়ার জন্য একটি প্রাইভেসি-ফার্স্ট কর্মপ্রবাহ
একটি পুনরাবৃত্তি-যোগ্য লুপ ব্যবহার করুন যাতে চাপের সময় আপনি হঠাৎ করে সমস্ত কিছু শেয়ার না করেন।
-
প্রথমে দুই বাক্য লিখুন।
- সমস্যা বিবৃতি: সহজ ভাষায় কি ভাঙছে
- সীমাবদ্ধতা: আপনি কী শেয়ার করবেন না (উদাহরণ: “No API keys, no customer data, no internal hostnames”).
-
ন্যূনতম ইনপুট সংগ্রহ করুন। কেবল যা রেপ্রোডিউস বা সমস্যাটি বুঝতে সাহায্য করে তা আনুন: ব্যর্থ লাইনের আশেপাশের ছোট স্নিপেট, সঠিক ত্রুটি টেক্সট, রিলেভেন্ট সংস্করণ, এবং 3 থেকে 5 টি রেপ্রো ধাপ।
-
স্ট্রাকচার না ভেঙে রিড্যাক্ট করুন। সিক্রেট প্লেসহোল্ডার দিয়ে বদলান এবং স্ট্রাকচার বজায় রাখুন। আচরণে প্রভাব না ফেলার এমন আইডেন্টিফায়ারগুলো (প্রজেক্ট নাম, টেন্যান্ট আইডি, ইমেইল) মুছুন। প্লেসহোল্ডার ধারাবাহিক রাখুন।
API_KEY=sk_live_...
becomes
API_KEY=<API_KEY>
customer-1234-prod-db
becomes
<DB_HOST_PROD>
-
লক্ষ্যভিত্তিক প্রশ্ন করুন। “সবচেয়ে সম্ভবত কারণ কী?” সঙ্গে “আমি কী পরিবর্তন করব?” জুড়ুন। যদি আপনি প্যাচ চান, শুধুমাত্র প্রদত্ত স্নিপেটে সীমাবদ্ধ পরিবর্তন চাইুন এবং অনুমানগুলো লেবেল করতে বলুন।
-
লোকালি যাচাই করুন, তারপর একটি নতুন ডিটেইল যোগ করুন। প্রস্তাবটি টেস্ট করুন। যদি তা ব্যর্থ হয়, কেবল একটিই নতুন তথ্য যোগ করুন (পরবর্তী স্ট্যাক ট্রেস লাইন, একটি কনফিগ ফ্ল্যাগ, একটি সংকীর্ণ রেপ্রো)। সোজাসুজি পুরো ফাইল পেস্ট করবেন না।
এই ধাপে ধাপে প্রকাশ সাধারণত আপনাকে কার্যকর উত্তর এনে দেয় এবং গোপন তথ্য ও অপ্রাসঙ্গিক কোডকে প্রম্পটে জড়ায় না।
উদাহরণ: সিক্রেট প্রকাশ না করে অথ ত্রুটি ডিবাগ করা
সাধারণ পরিস্থিতি: আপনার ল্যাপটপ ও স্টেজিং-এ লগইন কাজ করে, কিন্তু প্রোডাকশনে ফেল করে। দ্রুত সাহায্য দরকার, কিন্তু আপনি আসল টোকেন, ইউজার ইমেইল, অভ্যন্তরীণ হোস্টনেম বা পুরো অথ মিডলওয়্যার পেস্ট করতে পারবেন না।
শুরু করুন যা আপনি পর্যবেক্ষণ করতে পারেন: রিকোয়েস্ট/রেস্পন্স শেপ, স্ট্যাটাস কোড, এবং একটি সংক্ষিপ্ত স্ট্যাক ট্রেস। যদি JWT-সম্পর্কিত হয়, আপনি নন-সেন্সিটিভ হেডার ডিটেইল (প্রত্যাশিত অ্যালগরিদম) ও টাইমিং ডিটেইল শেয়ার করতে পারেন (সার্ভার টাইম ড্রিফট)। বাকিটা প্লেসহোল্ডার রাখুন।
একটি নিরাপদ বান্ডলে প্রায়ই থাকে:
- Request: method, path, সাধারণ হেডার (Authorization: "Bearer <JWT_REDACTED>"), এবং বডির ফিল্ড নাম (রিয়েল ভ্যালু নয়)
- Response: status (401/403), সাধারণ এরর কোড/মেসেজ, এবং একটি করিলেশন আইডি যদি এটি কোনো ইউজারের সাথে জড়িত না
- Logs: ব্যর্থতার চারপাশের 5–10 লাইন, টোকেন/ইমেইল/হোস্ট রিড্যাক্ট করা
- Stack trace: শুধুমাত্র শীর্ষ ফ্রেমগুলো যেখানে ভ্যালিডেশন ব্যর্থ হচ্ছে
পরে একটি ফোকাসড প্রশ্ন করুন। প্রোডাকশন-নির্দিষ্ট অথ ব্যর্থতা সাধারণত হয় ক্লক স্কিউ, ভুল issuer/audience, ভিন্ন সিগনিং কী, কী রোটেশন মিসিং, বা প্রক্সি/হেডার পার্থক্য থেকে।
প্রম্পট প্যাটার্ন:
I have a production-only login/auth failure. Locally it passes.
Observed behavior:
- Endpoint: POST /api/login
- Production response: 401 with message "invalid token" (generic)
- Staging/local: 200
Sanitized request/response:
- Authorization: Bearer <JWT_REDACTED>
- Expected claims: iss=<ISSUER_PLACEHOLDER>, aud=<AUDIENCE_PLACEHOLDER>
- Token validation library: <LIB_NAME_AND_VERSION>
Sanitized log snippet:
<PASTE 5-10 LINES WITH TOKENS/EMAILS/HOSTS REDACTED>
Question:
Given this, what are the top causes of JWT validation failing only in production, especially clock skew or claim mismatch? What specific checks and log lines should I add to confirm which one it is?
হাইপোথিসিজ পাওয়ার পর, নিরাপদভাবে ভ্যালিডেট করুন। কেবল নন-সেনসিটিভ ফ্যাক্টস লগ করুন (exp, iat, now, এবং ব্যর্থতার রিজন কোড)। একটি ছোট টেস্ট লিখুন যা একটি পরিচিত-ভাল টোকেন ফিক্সচার ফিড করে এবং ভ্যালিডেটরের আচরণ আছাড় করে।
একটি সহজ পরিকল্পনা:
- সার্ভার টাইম এবং টোকেনের exp/iat লগ করুন (কখনও কাঁচা টোকেন নয়)
- প্রোডাকশনে issuer/audience/env কনফিগ মানগুলো কনফার্ম করুন (হ্যাশ বা রিড্যাক্টেড স্ট্রিং হিসেবে)
- ক্লক স্কিউ টলরেন্সের জন্য একটি টেস্ট যোগ করুন (উদাহরণ 60–120 সেকেন্ড)
- লোকালি জেনারেট করা সিনথেটিক টোকেন দিয়ে পুনরুত্পাদন করুন
- নিশ্চিত হলে অস্থায়ী লগিং সরিয়ে ফেলুন
সাধারণ ভুল ও ফাঁদ যা এড়াতে হবে
গোপনীয়তা সুবিধাগুলো হারানোর দ্রুততম পথ হলো "একটা ছোট জিনিস" শেয়ার করা যা চুপচাপ সবকিছু ধারণ করে। একটি পূর্ণ .env বা কনফিগ ফাইল পেস্ট করা ক্লাসিক উদাহরণ। এমনকি যদি আপনি স্পষ্ট সিক্রেট মুছে ফেলেন, এসব ফাইল প্রায়ই অভ্যন্তরীণ হোস্টনেম, সার্ভিস নাম, ফিচার ফ্ল্যাগ, এবং এনভায়রনমেন্ট কনটেক্সট রাখে যা আপনার সিস্টেম ম্যাপ করে।
পূর্ণ স্ট্যাক ট্রেস আর একটি প্রায়ই লিকের উৎস। এতে ইউজারনেম, মেশিন নাম, রিপো নাম, এবং অ্যাবসলিউট পাথ যেমন /Users/alex/company-payments/... থাকতে পারে। কখনো কখনো এতে কুয়ারি স্ট্রিং, HTTP হেডার, বা টোকেন সহ ত্রুটি অবজেক্টও থাকে। যদি ট্রেস দরকার হয়, কেবল প্রাসঙ্গিক ফ্রেম কপি করুন এবং পাথগুলো ধারাবাহিক প্লেসহোল্ডারে প্রতিস্থাপন করুন।
বাস্তব কাস্টমার পে-লোড গুলো "ছোট" হলেও ঝুঁকিপূর্ণ। একটি JSON বডি ইমেইল, ঠিকানা, অর্ডার আইডি, বা ফ্রি-টেক্সট নোট থাকতে পারে। নিরাপদ পদ্ধতি হলো একই শেপ ও এজ কেস বজায় রেখে ফেইক পে-লোড তৈরি করা, আসল মান নয়।
অসমঞ্জস প্লেসহোল্ডারও সমস্যা করে। যদি USER_ID এক জায়গায় "কাস্টমার আইডি" বোঝায় এবং অন্য জায়গায় "অভ্যন্তরীণ অ্যাকাউন্ট আইডি" বোঝায়, ভুল নির্ণয় পাবেন। একটি স্কীম বেছে নিন এবং অনুবর্তী হোন।
যদি আপনার মেসেজ একজন অচেনাকে লগ ইন করতে, আপনার সার্ভার খুঁজে পেতে, বা কোনো কাস্টমার শনাক্ত করতে সাহায্য করে, তাহলে এটিকে আরেকবার রিভিউ করুন।
দ্রুত চেকলিস্ট ও পরবর্তী ধাপ
সতর্ক হতে গেলে দ্রুততা আপনার শত্রু। একটি সংক্ষিপ্ত রুটিন আপনাকে দ্রুত উত্তর পেতে সাহায্য করে এবং গোপন ডেটা প্রম্পটে না ঢুকতে দেয়।
একবার সিক্রেটগুলোর জন্য পাস করুন, তারপর আইডেন্টিফায়ারগুলোর জন্য দ্বিতীয় পাস:
- যেকোনো কিছু মুছে ফেলুন যা অ্যাক্সেস দেয়: API কী, OAuth ক্লায়েন্ট সিক্রেট, প্রাইভেট কী, সেশন কুকি, রিফ্রেশ টোকেন, অথ হেডার।
- "হিডেন" এক্সেস পাথগুলি সরান: সাইনড URL, প্রি-সাইনড আপলোড লিংক, ওয়েবহুক সিক্রেট, পাসওয়ার্ড রিসেট লিংক, ইনভাইট লিংক।
- অভ্যন্তরীণ আইডেন্টিফায়ার প্রতিস্থাপন করুন: অভ্যন্তরীণ ডোমেইন, হোস্টনেম, IP, অ্যাকাউন্ট ID, ইউজার ID, অর্গ ID, অর্ডার ID, টিকেট নম্বর
- লগগুলো স্যানিটাইজ করুন: রিকোয়েস্ট বডি, কুয়ারি স্ট্রিং, স্ট্যাক ট্রেস (ফাইল পাথ, ইউজারনেম, এনভায়রনমেন্ট ভ্যারিয়েবল সহ)
- স্কোপ নিশ্চিত করুন: শুধুই ব্যর্থ পথ, কলার, এবং ইনপুট/আউটপুট কন্ট্রাক্ট
রিড্যাক্ট করার পরে স্ট্রাকচার বজায় রাখুন। টাইপ, স্কিমা, ফিল্ড নাম, স্ট্যাটাস কোড, ও উদাহরণ পে-লোড কাঠামো রেখে আসল মানগুলোর জায়গায় প্লেসহোল্ডার দিন।
চাপের সময় ধারাবাহিক রাখতে, একটি ছোট রিড্যাকশন নিয়মমালা লিখে রাখুন এবং তা পুনরায় ব্যবহার করুন। টিমের জন্য এটিকে একটি শেয়ার করা টেমপ্লেটে পরিণত করুন: দুই ব্লক — “আমি কী শেয়ার করছি” (ফাইল, ফাংশন, এন্ডপয়েন্ট) ও “আমি কী শেয়ার করছি না” (সিক্রেট, প্রোডাকশন ডেটা, অভ্যন্তরীণ ডোমেইন)।
একটি অতিরিক্ত সুরক্ষার স্তর চাইলে আলাদা পরিবেশে পরীক্ষা করুন এবং পরিবর্তনগুলি রিভার্সযোগ্য রাখুন। Koder.ai (koder.ai)-তে planning mode আপনাকে সবচেয়ে ছোট পরিবর্তন নির্ধারণে সাহায্য করে, এবং স্ন্যাপশট ও রোলব্যাকে সহজভাবে পরীক্ষা করা যায় যাতে অতিরিক্ত সংবেদনশীল কনটেক্সট প্রম্পটে না আসে।
সাধারণ প্রশ্ন
How do I know what “minimum context” to share for coding help?
শুরু করুন এমন ছোট অংশ দিয়ে যা আপনার প্রশ্নের উত্তর দিতে পারে: ব্যর্থ ইনপুট, প্রত্যাশিত বনাম প্রকৃত আউটপুট, এবং সংশ্লিষ্ট স্বল্প কোড পথ।
একটি ভালো ডিফল্ট বান্ডল হলো:
- সঠিক ত্রুটি বার্তা
- ব্যর্থতার চারপাশের 5–10টি প্রাসঙ্গিক লগ লাইন
- সংশ্লিষ্ট ছোট ফাংশন(গুলি) (সম্পূর্ণ ফাইল নয়)
- রানটাইম/ফ্রেমওয়ার্ক সংস্করণ -SANITIZED অনুরোধ/প্রতিক্রিয়া শেপ (কী এবং হেডার নাম, গোপন মান নয়)
What should I never paste into a chat when debugging?
পেস্ট করবেন না:
- সিক্রেটস: API কী, টোকেন, প্রাইভেট কী, সেশন কুকি, সাইনড ইউআরএল
- ব্যক্তিগত/নিয়ন্ত্রিত ডেটা: আসল ইমেইল, নাম, ঠিকানা, পেমেন্ট বিবরণ, সমর্থন বার্তা
- অভ্যন্তরীণ সিস্টেম ম্যাপিং: অভ্যন্তরীণ ডোমেইন, হোস্টনেম, IP, রিপো নাম, টিকেট আইডি, ফোল্ডার পাথ
- পূর্ণ
.env/কনফিগ ফাইল বা কাঁচা প্রোডাকশন লগ - মালিকানাধীন ব্যাবসায়িক লজিক (মূল্যনির্ধারণ নিয়ম, প্রতারণা চেক, প্রম্পট টেমপ্লেট)
যদি এটি একজন অচেনাকে লগইন করতে, কাউকে শনাক্ত করতে, বা আপনার সিস্টেম ম্যাপ করতে সাহায্য করে, তাহলে রিড্যাক্ট বা সারাংশ দিন।
What’s the safest way to redact tokens, IDs, and emails without breaking the example?
প্লেসহোল্ডার ধারাবাহিকভাবে ব্যবহার করুন যেন ফ্লো পড়তে সহজ থাকে।
উদাহরণ স্কিমা:
TOKEN_1,TOKEN_2API_KEY_1USER_ID_1,CUSTOMER_ID_1EMAIL_1
প্রয়োজন হলে একটি সংক্ষিপ্ত লেজেন্ড যোগ করুন:
TOKEN_1: Authorization bearer token used on/meCUSTOMER_ID_1: identifier used in database lookup
When should I keep the original format of a secret (like a JWT) while redacting it?
বাগ যদি পার্সিং বা ভ্যালিডেশনের উপর নির্ভর করে, তখন ফরম্যাট বজায় রাখুন।
সাধারণ ক্ষেত্রে:
- JWT: তিনটি ডট-বিচ্ছিন্ন অংশ ধরে রাখুন, সমমানের দৈর্ঘ্য সহ
- UUIDs:
8-4-4-4-12প্যাটার্ন বজায় রাখুন - Base64 ব্লব: অনুরূপ অক্ষর সেট এবং মোটামুটি দৈর্ঘ্য বজায় রাখুন
এটি বাস্তবসম্মত আচরণ রাখে কিন্তু আসল মান প্রকাশ করে না।
How do I share JSON or SQL that’s useful without leaking real data?
কী ও স্ট্রাকচার রাখুন, মান বদলান।
JSON-এর জন্য:
- রাখুন: ফিল্ড নাম, নেস্টিং, টাইপ
- বদলান: ইমেইল, আইডি, টোকেন, ঠিকানা, ফ্রি-টেক্সট নোট
SQL-এর জন্য:
- রাখুন: টেবিল নাম, joins, শর্ত
- বদলান: লিটারাল (IDs, timestamps, emails)
উদাহরণ:
WHERE user_id = USER_ID_1 AND created_at > DATE_1
If my code includes proprietary logic, how can I ask for help without sharing it?
এটি ইনপুট, আউটপুট এবং সমস্যা প্রভাবিত করা নির্দিষ্ট নিয়মগুলোর দিক থেকে সারাংশ করুন।
কোনো কার্যকর সারাংশে থাকা উচিত:
- ফাংশন সিগনেচার
- এটি কী যোগ/পরিবর্তন করে (হেডার, ফিল্ড, নরমালাইজেশন)
- কীভাবে এটি সাইন/ভ্যালিডেট করে (উচ্চ-স্তরের)
- নির্দিষ্ট ব্যর্থতার শর্ত (যেমন “non-ASCII পে-লোডে ব্যর্থ”)
What’s a good prompt template for getting help while sharing less?
একটি সহজ নিরাপদ প্রম্পট:
- এক বাক্যে সমস্যা
- প্রত্যাশিত বনাম প্রকৃত আচরণ
- রেপ্রো ধাপ (3–5 ধাপ) -SANITIZED আর্টিফ্যাক্ট (অনুরোধ/প্রতিক্রিয়া, নিন্মতম লগ, নিন্মতম কোড)
- স্পষ্ট প্রশ্ন ("সর্বোচ্চ কারণগুলো" + "প্রতিটি নিশ্চিত করতে একটি চেক")
এছাড়াও একটি রিড্যাকশন নোট যোগ করুন:
"Redacted: tokens, emails, customer data, internal hostnames. Kept: endpoint paths, status codes, header names, exact error text."
Why are `.env` files and full config dumps so risky, even if I remove passwords?
কারণ এগুলো প্রায় সবকিছু একসাথে থাকে:
- গোপনীয় মানগুলো সাধারণ সেটিংসের সঙ্গে মিশে থাকে
- অভ্যন্তরীণ ডোমেন, সার্ভিস নাম, ফিচার ফ্ল্যাগ থাকে
- আর্কিটেকচার সম্পর্কে ধারণা দেয়
একটি নিরাপদ বিকল্প হলো কনফিগ টেমপ্লেট:
- কীগুলো রাখুন
- সংবেদনশীল মানগুলোর জায়গায়
<set>বা<redacted>ব্যবহার করুন - কেবল সমস্যা সম্পর্কিত কী গুলো রাখুন
What should I do if the assistant asks for more context?
ক্রমবর্ধমান প্রকাশ ব্যবহার করুন:
- প্রস্তাবটি লোকালি টেস্ট করুন।
- যদি ব্যর্থ হয়, একটি নতুন ডিটেইল দিন (একটি অতিরিক্ত লগ লাইন, একটি স্ট্যাক ফ্রেম, একটি কনফিগ ফ্ল্যাগ)।
- পুরো মডিউল পেস্ট করা থেকে বিরত থাকুন।
এতে স্কোপ ছোট থাকে এবং চাপের নিচে দুর্ঘটনাজনিত লিক হওয়া রোধ হয়।
How can I debug a production-only 401/JWT auth issue without sharing real tokens or internal URLs?
একটি ব্যবহারিক বান্ডল:
- Endpoint, method, status code -SANITIZED অনুরোধ/প্রতিক্রিয়া (হেডার নাম, রিড্যাক্টেড auth মান)
- প্রত্যাশিত ক্লেইম (issuer/audience প্লেসহোল্ডার)
- টোকেন লাইব্রেরির নাম/সংস্করণ
- ব্যর্থতার চারপাশের 5–10 লগ লাইন (রিড্যাক্টেড)
- ভ্যালিডেশন যেখানে ব্যর্থ হচ্ছে সেই শীর্ষ স্ট্যাক ফ্রেমগুলি
তারপর জিজ্ঞাসা করুন:
- “প্রোডাকশন-নির্দিষ্ট প্রধান কারণগুলো (clock skew, issuer/audience mismatch, signing key mismatch) কী, এবং প্রতিটি নিশ্চিত করতে একটিই চেক কী?”