هرگز اطلاعات محرمانه و Secretها را در اختیار هوش مصنوعی قرار ندهید
چرا Paste کردن API Key در چت AI خطرناک است و چگونه با جداسازی Secret، اسکن، و سیاست تیم جلوی نشت را بگیرید — بر اساس OWASP و GitHub.
بنیانگذار و مهندس محصول

رایجترین حادثهٔ امنیتی عصر AI Coding با هک پیچیده شروع نمیشود؛ با Paste کردن Connection String در چت برای «یک لحظه دیباگ» شروع میشود. پرامپت، زمینهٔ فایل، لاگ Agent، تاریخچهٔ ابر، و پشتیبانی فروشنده همگی میتوانند مسیر نشت باشند — حتی اگر نیتتان بیضرر باشد.
OWASP در فهرست ریسکهای LLM، افشای اطلاعات حساس را یکی از محورهای اصلی میداند. GitHub برای نشت در مخزن، Secret Scanning و Push Protection ساخته است؛ اما چت AI مسیر جداگانهای است که آن اسکن لزوماً پوشش نمیدهد.
این مقاله مرز عملی میکشد: چه چیزی را هرگز به مدل ندهید، جایگزین چیست، و اگر اشتباه کردید چه کنید.

پاسخ کوتاه
API Key، رمز، توکن، کلید خصوصی، کوکی نشست، دادهٔ شخصی مشتری، و محتوای محرمانهٔ قرارداد را در پرامپت، چت IDE، Agent ابری، یا Issueهای عمومی نگذارید. مقدار را از Environment Variable یا Secret store بخوانید؛ در مثالها فقط Placeholder بگذارید. اگر چیزی رفت، فوراً Rotate کنید و فرض را بر افشا بگذارید.
مدل محل نگهداری Secret نیست؛ حتی در Privacy Mode هم حداقل دسترسی را رعایت کنید.
چرا پرامپت مسیر نشت است؟
طبق منطق OWASP دربارهٔ Sensitive Information Disclosure و System Prompt Leakage، اطلاعات حساس نباید داخل دستورالعملها یا ورودیهایی بنشیند که مدل یا مهاجم بتواند آنها را بیرون بکشد. پرامپت Injection میتواند مدل را وادار کند محتوای قبلی یا ابزارها را افشا کند.
علاوه بر حمله، ریسک عملیاتی هم هست: همکار تاریخچه را میبیند، جلسه روی ابر ذخیره میشود، یا فایل زمینه شامل .env است. GitHub نشان میدهد Secret حتی در Issue و کامنت PR هم اسکن میشود — یعنی فرهنگ Paste کردن خطرناک است، چه در Git چه در AI.
چه چیزهایی را هرگز ندهید؟
- کلیدهای API و توکنهای CI/CD و cloud.
- رمز دیتابیس و connection string کامل.
- کلید خصوصی SSH/TLS و فایلهای pem/p12.
- توکن جلسه، کوکی، و OTP واقعی.
- دادهٔ واقعی مشتری، شمارهٔ ملی، کارت، پروندهٔ پزشکی.
- اسرار تجاری که افشایشان خسارت حقوقی دارد.
جایگزین: .env.example با مقدار جعلی، توضیح معماری بدون دادهٔ زنده، و لاگ redacted. برای دیباگ، از محیط Staging با Secret جدا استفاده کنید.
کنترلهای لایهای
جداسازی طراحی
همان اصل مقالهٔ ۰۴۷: برنامه Secret را از سورس و از پرامپت جدا میخواند. Agent باید بداند «کلید را از env به نام X بخوان» نه اینکه مقدار را ببیند. در CI از Secrets مخزن استفاده کنید و echo نکنید.
اسکن و پیشگیری در Git
طبق مستندات GitHub About secret scanning، اسکن تاریخچه و سطوح متنی مخزن را برای الگوهای شناختهشده میگردد و Push Protection جلوی ورود برخی Secretها را میگیرد. این لایه را روشن کنید — ولی جایگزین ممنوعیت Paste در AI نیست.
سیاست ابزار AI
در Cursor، Privacy Mode را برای تیم جدی بگیرید. در Copilot سازمانی، دادهٔ Business/Enterprise طبق FAQ برای آموزش مدل استفاده نمیشود؛ روی طرح فردی opt-out را بررسی کنید. در Claude Code، مجوزها و سندباکس را طوری بگذارید که خواندن مسیرهای Secret بدون تأیید ممکن نباشد.
حکمرانی NIST
NIST AI RMF ویژگی Privacy-Enhanced و توابع GOVERN/MANAGE را برای محدود کردن دادهٔ حساس در چرخهٔ AI مطرح میکند. ترجمهٔ عملی: فهرست کنید کدام سیستمها به مدل وصلاند، چه دادهای میرود، و چه کسی مسئول حادثه است.
چکلیست تیمی یکروزه
- قانون نوشته شود: هیچ Secret واقعی در چت AI؛ تخطی = Rotate فوری.
- .env و کلیدها gitignore؛ .env.example بدون مقدار واقعی.
- Secret Scanning و Push Protection را در GitHub بررسی کنید.
- در Agent، مسیرهای credentials را deny یا نیازمند تأیید کنید.
- آموزش کوتاه با مثال اشتباه رایج (Paste استکتریس حاوی توکن).
- کانال Incident برای Rotate و ابطال کلید تعریف کنید.
اگر Secret را به AI دادید چه کنید؟
- فرض افشا: کلید را در سرویس صادرکننده باطل/Rotate کنید.
- جلسهٔ چت را پاک یا قفل کنید اگر ابزار اجازه میدهد؛ روی اتکا به حذف کامل حساب نکنید.
- لاگ دسترسی سرویس را برای سوءاستفاده بررسی کنید.
- اگر کلید در Git هم Commit شده، مسیر مقالهٔ ۰۸۲ را دنبال کنید.
- علت ریشهای را رفع کنید: چرا دیباگ بدون Placeholder سخت بود؟
اسطورههایی که خطر را زیاد میکنند
- «Privacy Mode یعنی میتوانم کلید بگذارم» — خیر؛ فقط آموزش/retention را محدود میکند، نیاز به Secret را از بین نمیبرد.
- «مدل که اینترنت ندارد پس امن است» — نشت داخلی و ذخیرهٔ جلسه همچنان مطرح است.
- «فقط یک تست بود» — باتهای اسکنکننده دقیقه به دقیقه کار میکنند؛ انسانها هم اشتباه کپی میکنند.
جمعبندی برای تصمیم
قانون ساده و سخت: مدل نه خزانهٔ Secret است نه محیط امن پیشفرض. طراحی بدون hard-code، اسکن Git، سیاست AI، و Rotate سریع چهار پایهٔ دفاعاند. تیمی که این را جدی نگیرد، اولین Paste عجلهای را با حادثه واقعی پرداخت میکند.
امروز یک کلید مشکوک داخل تاریخچهٔ چت یا مخزن را Rotate کنید؛ فردا سیاست را بنویسید.
سناریوهای واقعی نشت از مسیر AI
سناریو ۱: توسعهدهنده stack trace را از Production در چت میگذارد؛ وسط لاگ یک JWT یا کلید موقت است. مدل برای کمک همان را تکرار میکند یا در خلاصه نگه میدارد.
سناریو ۲: Agent برای اجرای تست به فایل .env واقعی دسترسی خواندن دارد و محتوا را در خروجی توضیح میدهد. حتی بدون نیت بد، تاریخچهٔ جلسه آلوده میشود.
سناریو ۳: کسی برای تولید مثال، کلید زندهٔ Stripe را در پرامپت میگذارد تا «فرمت درست را ببینی». رباتهای اسکن و انسانهای دیگر همان را میبینند.
در هر سه حالت پاسخ اول یکی است: Rotate. پاک کردن پیام کافی نیست.
Placeholder و دادهٔ مصنوعی
بهجای کلید واقعی بنویسید YOUR_API_KEY_HERE یا مقدار واضحاً جعلی با پیشوند test_. برای دادهٔ مشتری از نامهای ساختگی و شناسههای غیرقابلپیگیری استفاده کنید. اگر مدل به دادهٔ واقعی نیاز دارد تا باگ را بازتولید کند، آن بازتولید باید در محیط کنترلشده با دادهٔ ماسکشده باشد نه در چت ابری عمومی.
برای آموزش تیم، یک مخزن نمونه با Secret جعلی بسازید و نشان دهید اسکنر GitHub یا pre-commit چگونه هشدار میدهد. ترس مبهم کمتر از تمرین عملی بازدارنده است.
تفاوت حریم خصوصی ابزار با ممنوعیت Secret
Privacy Mode، ZDR، و «داده برای آموزش استفاده نمیشود» ریسکهای مهمی را کم میکنند؛ اما هیچکدام مجوز گذاشتن کلید Production داخل پرامپت نیستند. حداقل دسترسی، جداسازی محیط، و کوتاهعمر بودن اعتبارنامه همچنان لازم است. فرض کنید هر متنی که به مدل میدهید ممکن است توسط انسان دیگری در سازمان دیده شود یا در پشتیبان سیستم باقی بماند.
برای سازمانها، قرارداد پردازش داده و فهرست subprocessors را بخوانید. برای افراد، حداقل از Paste کردن Secret در ابزارهای رایگان چندمستأجری خودداری کنید.
ادغام با فرآیند Incident
نشت از AI باید در runbook امنیتی شما ردیف جدا داشته باشد: تشخیص (گزارش خود فرد یا هشدار)، مهار (Rotate)، بررسی سوءاستفاده، اطلاع به ذینفعان در صورت نیاز قانونی، و اصلاح فرآیند. مقالهٔ ۰۸۲ برای نشت Git است؛ همان منطق Rotate-اول اینجا هم صادق است.
بعد از حادثه فقط افراد را سرزنش نکنید. بپرسید چرا مسیر درست سختتر از Paste بود. اگر ساختن Secret در Staging یک کلیک است، رعایت سیاست آسان میشود.
چکلیست Review برای PRهای AI-assisted
- آیا در Diff مقدار شبیه کلید دیده میشود؟
- آیا تستها به Secret زنده وابستهاند؟
- آیا اسکریپت Demo مقدار را چاپ میکند؟
- آیا مستند، اسکرین، یا notebook ضمیمه شده که Secret دارد؟
این چکلیست را به قالب PR اضافه کنید تا Reminder انسانی بماند.
چه چیزهایی «تقریباً Secret»اند و باز هم خطرناکاند؟
گاهی افراد فقط API Key را خطرناک میدانند. در عمل شناسهٔ داخلی مشتری، URL ادمین خصوصی، ساختار دقیق فایروال، و حتی نام جدولهای حساس میتواند به مهاجم کمک کند. حداقلسازی داده در پرامپت یعنی فقط همان قطعهای را بدهید که برای حل مسئله لازم است، با نامهای عمومیشده.
کد اختصاصی هم بسته به قرارداد میتواند محرمانه باشد. قبل از فرستادن ماژول اصلی به ابزار شخصی رایگان، مجوز حقوقی و سیاست شرکت را چک کنید.
کنترل فنی کمکی (بدون اتکای کامل)
اسکنر پیش از ارسال پرامپت، فیلتر IDE، و قفل مسیر .env مفیدند اما کامل نیستند. الگوی کلیدهای داخلی یا رمزهای بدون پیشوند شناختهشده از صافی رد میشوند. بنابراین کنترل فنی مکمل قانون انسانی است نه جایگزین آن.
در Agentهای چندابزاری، هر ابزار متصل (تقویم، تیکت، دیتابیس) را جدا ارزیابی کنید. دادن دسترسی خواندن تیکتهای پشتیبانی ممکن است PII را وارد زمینه کند.
پیام مدیریتی یکخطی
«سرعت دیباگ با Paste کلید، هزینهٔ Rotate و بیخوابی Incident را ندارد.» این جمله را در کانال مهندسی پین کنید. سیاست بدون حمایت مدیریت در اولین موعد تحویل شکسته میشود.
لایهٔ سازمانی: از سیاست تا ابزار
سیاست امنیتی بدون ابزار فراموش میشود؛ ابزار بدون سیاست دور زده میشود. ترکیب درست این است: سند یکصفحهای ممنوعیت Secret در LLM، آموزش ۱۵ دقیقهای، کنترل فنی (gitignore، scanning، deny path)، و کانال گزارش بدون مجازات برای کسی که اشتباه کرده و سریع Rotate میکند.
در تأمینکنندهٔ AI، تنظیمات retention و آموزش مدل را برای حساب سازمانی قفل کنید. برای پیمانکاران، مشخص کنید آیا حق دارند کد شما را در حساب شخصی ابزار بگذارند یا نه. بسیاری از نشتها از همین شکاف قراردادی میآید.
اگر از Agent ابری استفاده میکنید، Secret را در سیستم مدیریت اسرار با دسترسی موقت تزریق کنید نه در متن پرامپت کاربر. انسان باید بتواند بدون دیدن مقدار، به Agent بگوید از نام متغیر استفاده کند.
برای دادهٔ شخصی، مقررات محلی و سیاست شرکت را جدا از «محرمانه بودن فنی» ببینید. حتی اگر کلید نیست، PII در پرامپت میتواند مسئلهٔ حقوقی بسازد.
برای پیمانکاران خارجی یک چکلیست onboarding امنیتی جدا بگذارید: ابزارهای مجاز، ممنوعیت حساب شخصی برای کد مشتری، و مسیر گزارش نشت. بدون این، سیاست داخلیتان در محیط بیرونی اعمال نمیشود.
به یاد داشته باشید Secret Scanning مخزن، چتهای محلی و اسکرینشاتهای Slack را پوشش نمیدهد. دفاع باید چندکاناله باشد.
اگر از مدل برای تولید تنظیمات استفاده میکنید، خروجی را همیشه با Placeholder بررسی کنید تا مدل از روی عادت مثالهای واقعیمانند نسازد که بعداً کسی اشتباهاً زنده فرض کند.
جمعبندی عملی: کمتر Paste کنید، بیشتر از نام متغیر حرف بزنید، و هر حادثه را با Rotate و اصلاح مسیر درست تمام کنید.
یک تمرین ماهانه مفید است: در محیط غیرحساس عمداً یک کلید جعلی با الگوی واقعی را در چت آزمایشی Paste کنید و ببینید آیا تیم، اسکنر یا فرآیند شما واکنشی نشان میدهد. هدف شکار همکار نیست؛ یافتن نقاط کور دفاع است.
اگر ابزار AI شما امکان ذخیرهٔ دانش پروژه یا Memory دارد، بررسی کنید محتوای ذخیرهشده بعداً در زمینهٔ جلسات دیگر برنمیگردد. Secretی که یکبار وارد Memory شود میتواند ماندگارتر از یک پیام معمولی باشد.
در نهایت، فرهنگ مهمتر از ابزار است: وقتی کسی سریع اشتباه را اعلام کند تشویق شود، نه تنبیه. تنبیه باعث پنهانکاری و تأخیر در Rotate میشود و خسارت را بزرگتر میکند.
اگر فقط یک عادت بسازید، همین باشد: قبل از ارسال هر پرامپت بلند، یکبار برای Secret و PII اسکن چشمی کنید — درست مثل اینکه قبل از Push به Diff نگاه میکنید.
منابع و مراجع
- OWASP GenAI LLM Top 10 — OWASP GenAI — https://genai.owasp.org/llm-top-10/
- OWASP Top 10 for LLM Applications (project) — OWASP — https://owasp.org/www-project-top-10-for-large-language-model-applications/
- OWASP GenAI LLM Top 10 2026 resource — OWASP — https://genai.owasp.org/resource/owasp-genai-llm-top-10-2026/
- About secret scanning — GitHub Docs — https://docs.github.com/en/code-security/secret-scanning/introduction/about-secret-scanning
- NIST AI RMF — NIST — https://www.nist.gov/itl/ai-risk-management-framework
- NIST AI 100-1 — NIST — https://doi.org/10.6028/NIST.AI.100-1
- Claude Code Security — Anthropic — https://code.claude.com/docs/en/security
- Cursor Privacy Mode help — Cursor — https://cursor.com/help/security-and-privacy/privacy
اگر شک دارید چیزی Secret هست یا نه، آن را به مدل ندهید.
نویسنده
سهیل ابراهیمپور بنیانگذار FutureForge است. روی طراحی محصول، معماری و استقرار نرمافزار سفارشی کار میکند.
یادداشتهای مرتبط
اگر در انتخاب معماری یا مسیر توسعه مطمئن نیستید، میتوانید درباره پروژه صحبت کنیم.
مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ میکنیم.




