بهترین روش‌های امنیت پرامپت (Prompt Security) مجموعه‌ای از تکنیک‌های چندلایه است که برای کاهش ریسک تزریق، نشت و اجرای دستور مخرب در سامانه‌های مبتنی بر مدل‌های زبانی بزرگ (Large Language Models یا LLM) به کار می‌رود.
این روش‌ها شامل پاک‌سازی ورودی، جداسازی دستور و داده، محدودسازی ابزارها، اعتبارسنجی خروجی، پایش مداوم و Red Teaming دوره‌ای است.
هر لایه، بخشی از ریسک را کاهش می‌دهد و ترکیب آن‌ها یک معماری دفاعی عملی می‌سازد.
امنیت پرامپت یک وضعیت پایدار نیست، یک فرایند مستمر است.
این راهنما اصول، پیاده‌سازی و ملاحظات عملی امنیت پرامپت را به‌صورت فنی بررسی می‌کند.

بهترین روش‌های امنیت پرامپت، مجموعه‌ای از اقدامات فنی و فرایندی است که برای محافظت از سامانه‌های LLM در برابر حملات طراحی شده است. این روش‌ها، پاسخ به یک واقعیت بنیادین هستند: مدل‌های زبانی، دستور و داده را در یک جریان متنی مشترک پردازش می‌کنند و همین ویژگی، بستر تزریق و نشت را فراهم می‌کند. برای درک این روش‌ها، ابتدا باید با تزریق پرامپت چیست و نشت پرامپت و خطرات آن آشنا باشیم.

در تجربه کار روی سامانه‌های تولیدی، دیده‌ام که امنیت پرامپت اغلب به یک نکته حاشیه‌ای در طراحی معماری تقلیل می‌یابد. این در حالی است که یک تزریق موفق می‌تواند به افشای داده، اجرای دستور مخرب و حتی اختلال در خدمات حیاتی منجر شود. اگر با دفاع در برابر تزریق پرامپت آشنا هستید، آماده‌اید تا به لایه‌های عمیق‌تر این حوزه وارد شوید.

امنیت پرامپت را می‌توان با امنیت شبکه مقایسه کرد: در هر دو حوزه، هیچ لایه‌ای به‌تنهایی کافی نیست و دفاع مؤثر، ترکیبی از چند لایه مستقل است. در ادامه، این لایه‌ها را به‌تفصیل بررسی می‌کنیم. برای مطالعه بیشتر درباره اصول پایه امنیت، می‌توانید صفحه Prompt Injection را در ویکی‌پدیا ببینید.

اصول بنیادین امنیت پرامپت

قبل از ورود به جزئیات فنی، باید چند اصل بنیادین را بپذیریم:

ورودی کاربر هرگز قابل‌اعتماد نیست

این اصل، پایه امنیت در معماری وب است و در سامانه‌های LLM نیز صادق است. هر ورودی کاربر، باید به‌عنوان یک ورودی بالقوه خصمانه در نظر گرفته شود.

خروجی مدل نیز قابل‌اعتماد نیست

هر خروجی مدل، تا زمانی که اعتبارسنجی نشده، باید به‌عنوان یک ورودی بالقوه خطرناک تلقی شود. این اصل، در سامانه‌هایی که خروجی به یک ابزار اجرایی ارسال می‌شود، حیاتی است.

اصل کمترین دسترسی

هر ابزار، هر مدل و هر کاربر، باید فقط دسترسی‌های لازم برای انجام وظیفه خود را داشته باشد. این اصل، سطح حمله را به‌شدت کاهش می‌دهد.

پیش‌فرض بر رد

در صورت شک، سامانه باید پاسخ را رد کند، نه اینکه ریسک کند. این اصل، در سامانه‌های حساس مانند مالی و پزشکی حیاتی است.

دفاع در عمق

هیچ لایه‌ای به‌تنهایی کافی نیست. دفاع مؤثر، ترکیبی از چند لایه مستقل است که در صورت شکست یک لایه، لایه‌های بعدی بتوانند آسیب را محدود کنند.

در امنیت مدل‌های زبانی، فرض بی‌گناهی یک اشتباه پرهزینه است.

معماری دفاع چندلایه

یک معماری دفاعی مؤثر برای سامانه‌های LLM، از چهار لایه اصلی تشکیل می‌شود:

لایههدفنمونه راهکار
ورودیکاهش سطح حملهفیلتر، پاک‌سازی، محدودسازی طول
مدلهدایت رفتارSystem Prompt مقاوم، آموزش خصمانه
خروجیجلوگیری از افشا یا اجرااعتبارسنجی، فیلتر، Escaping
ابزار و زیرساختمحدودسازی پیامدSandbox، Least Privilege، Rate Limit

هر لایه، بخشی از ریسک را کاهش می‌دهد. نکته حیاتی این است که لایه‌ها باید مستقل از یکدیگر باشند. اگر مهاجم موفق شود از لایه ورودی عبور کند، لایه‌های بعدی باید بتوانند آسیب را محدود کنند.

لایه ورودی و پاک‌سازی

لایه ورودی، اولین خط دفاعی است. در این لایه، هدف کاهش سطح حمله و حذف ورودی‌های مشکوک است. برای جزئیات بیشتر، پست پاک‌سازی پرامپت را ببینید.

پاک‌سازی ورودی

پاک‌سازی ورودی شامل حذف یا خنثی‌سازی الگوهای شناخته‌شده حمله است:

  • عبارت‌هایی مانند «دستورهای قبلی را نادیده بگیر».
  • کاراکترهای کنترلی یونیکد که در نمایش متنی دیده نمی‌شوند.
  • دنباله‌های خاص که مدل را به حالت خاصی هدایت می‌کنند.
  • تگ‌های HTML یا XML که می‌توانند مرزهای ساختاری را بشکنند.

اعتبارسنجی ساختاری

به‌جای بررسی محتوای متنی، ساختار ورودی را اعتبارسنجی کنید. اگر ورودی باید یک عدد باشد، فقط عدد بپذیرید. اگر باید یک ایمیل باشد، فرمت ایمیل را بررسی کنید. این روش، سطح حمله را به‌شدت کاهش می‌دهد.

محدودسازی طول ورودی

ورودی‌های بسیار طولانی، فضای بیشتری برای جاسازی دستور مخرب فراهم می‌کنند. محدودسازی طول ورودی، یک راهکار ساده اما مؤثر است.

نرمال‌سازی یونیکد

مهاجمان می‌توانند از کاراکترهای یونیکد مشابه برای دور زدن فیلترها استفاده کنند. نرمال‌سازی یونیکد، این نوع حملات را خنثی می‌کند.

جداسازی دستور و داده

یکی از مؤثرترین راهکارهای امنیتی، جداسازی صریح دستور (Instruction) و داده (Data) در ساختار پرامپت است. این جداسازی، مرز میان آنچه مدل باید انجام دهد و آنچه باید بر اساس آن عمل کند را روشن می‌کند.

استفاده از Delimiter

برای جداسازی بخش‌ها، از Delimiter استفاده کنید:

system: You are a helpful assistant.
<user_data>{user_input}</user_data>
instruction: Answer the user question based strictly on the context above.

البته این روش نیز نقاط ضعف خود را دارد و مهاجمان می‌توانند تگ‌ها را ببندند یا جعل کنند. به همین دلیل، این راهکار باید در ترکیب با سایر لایه‌ها استفاده شود. برای جزئیات، پست استفاده از Delimiter در پرامپت را ببینید.

رمزنگاری داده ورودی

در سامانه‌های پیشرفته، داده ورودی می‌تواند قبل از تزریق به پرامپت، رمزنگاری شود. اما این روش پیچیدگی‌های خود را دارد و باید با احتیاط استفاده شود.

طراحی System Prompt مقاوم

System Prompt، دستورالعمل سطح سیستمی است که قبل از ورودی کاربر به مدل داده می‌شود. یک System Prompt خوب باید مقاوم در برابر حملات باشد. برای درک مفاهیم پایه، پست پرامپت سیستمی چیست را ببینید.

اصول طراحی System Prompt مقاوم

  • صراحت: دستورالعمل‌ها باید بدون ابهام باشند.
  • پوشش حالت‌های مرزی: رفتار مدل در شرایط غیرعادی باید مشخص باشد.
  • دستور رد درخواست‌های مشکوک: مدل باید بداند چه زمانی باید از پاسخ دادن امتناع کند.
  • عدم قرار دادن داده حساس: هرگز داده حساس را در System Prompt قرار ندهید.
  • بازبینی دوره‌ای: System Prompt باید به‌صورت دوره‌ای بازبینی و به‌روزرسانی شود.

محافظت از System Prompt

برای جلوگیری از نشت System Prompt، می‌توان از دستورالعمل‌هایی استفاده کرد که از مدل می‌خواهند آن را افشا نکند. اما این روش، یک لایه شکننده است و نباید به‌عنوان تنها مکانیزم دفاعی در نظر گرفته شود.

اعتبارسنجی خروجی

لایه خروجی، آخرین فرصت برای جلوگیری از افشا یا اجرای دستور مخرب است. پیش از آنکه خروجی مدل به کاربر نمایش داده شود یا به یک ابزار ارسال شود، باید اعتبارسنجی شود.

اعتبارسنجی قالب

اگر خروجی باید در قالب JSON باشد، فقط JSON معتبر بپذیرید. این اعتبارسنجی، خطاهای ساختاری را قبل از پردازش شناسایی می‌کند. برای جزئیات، پست JSON Schema برای کنترل پاسخ مدل را ببینید.

بررسی محتوای خروجی

خروجی مدل باید از نظر افشای داده حساس، وجود دستورهای اجرایی و محتوای نامناسب بررسی شود.

Escaping خروجی

اگر خروجی مدل به یک بستر اجرایی (مانند ترمینال یا SQL) ارسال می‌شود، باید Escaping مناسب انجام شود.

مقایسه با System Prompt

برای جلوگیری از نشت پرامپت، می‌توان خروجی مدل را با محتوای System Prompt مقایسه کرد و در صورت شباهت بالا، پاسخ را رد کرد.

امنیت ابزارها و اجرای دستور

در سامانه‌هایی که مدل زبانی به ابزارها (Tools) دسترسی دارد، امنیت ابزارها به یکی از حساس‌ترین بخش‌ها تبدیل می‌شود.

اصول امنیت ابزارها

  • Least Privilege: هر ابزار باید فقط دسترسی‌های لازم برای وظیفه خود را داشته باشد.
  • Sandbox: اجرای دستورهای مدل در یک محیط ایزوله انجام شود.
  • تأیید انسانی: برای عملیات حساس، تأیید انسانی الزامی باشد.
  • Rate Limiting: تعداد فراخوانی ابزار محدود شود.
  • Audit Logging: همه فراخوانی‌های ابزار ثبت و بررسی شوند.
  • Input Validation: ورودی ابزارها قبل از اجرا اعتبارسنجی شود.

الگوهای امنیتی ابزارها

در طراحی ابزارها، می‌توان از الگوهای زیر استفاده کرد:

  • Whitelist: فقط ابزارهای تأییدشده قابل فراخوانی باشند.
  • Parameter Validation: پارامترهای ابزار قبل از اجرا اعتبارسنجی شوند.
  • Confirmation Prompts: برای عملیات حساس، تأیید صریح کاربر لازم باشد.
  • Timeouts: هر فراخوانی ابزار یک حد زمانی مشخص داشته باشد.

پایش و تشخیص حملات

هیچ لایه دفاعی صددرصد نیست. بنابراین، باید سامانه‌ای برای پایش و تشخیص حملات در زمان اجرا داشته باشید. برای جزئیات بیشتر، پست مانیتورینگ پرامپت را ببینید.

Logging دقیق

همه ورودی‌ها، خروجی‌ها و فراخوانی‌های ابزار باید ثبت شوند. این لاگ‌ها برای تحلیل پس از حادثه و شناسایی الگوهای حمله ضروری هستند.

Anomaly Detection

می‌توان از مدل‌های تشخیص ناهنجاری برای شناسایی رفتار غیرعادی استفاده کرد. اگر یک کاربر در مدت کوتاهی درخواست‌های بسیاری با الگوی مشابه ارسال کند، این می‌تواند نشانه یک حمله باشد.

هشداردهی زودهنگام

سامانه باید در صورت شناسایی الگوهای مشکوک، به تیم امنیتی هشدار دهد. این هشدارها باید در سطوح مختلف (اطلاع، هشدار، بحرانی) دسته‌بندی شوند.

Red Teaming و ارزیابی مستمر

Red Teaming (تیم سرخ) یک رویکرد نظام‌مند برای ارزیابی امنیت سامانه‌های LLM است. در این رویکرد، یک تیم متخصص تلاش می‌کند با استفاده از تکنیک‌های مختلف، سامانه را به چالش بکشد.

مراحل Red Teaming

  1. تعریف دامنه: مشخص کنید کدام بخش‌های سامانه باید آزمایش شوند.
  2. طراحی سناریو: سناریوهای حمله متناسب با سامانه طراحی کنید.
  3. اجرا: سناریوها را در محیط آزمایشی اجرا کنید.
  4. تحلیل: نتایج را تحلیل و آسیب‌پذیری‌ها را دسته‌بندی کنید.
  5. اصلاح: بر اساس یافته‌ها، لایه‌های دفاعی را تقویت کنید.
  6. تکرار: این چرخه را به‌صورت دوره‌ای اجرا کنید.

چارچوب‌های ارزیابی

برای Red Teaming ساختاریافته، می‌توان از چارچوب‌های زیر استفاده کرد:

  • OWASP Top 10 for LLM: فهرست ده ریسک اصلی در سامانه‌های LLM.
  • NIST AI RMF: چارچوب مدیریت ریسک هوش مصنوعی.
  • MITRE ATLAS: دانش‌نامه تاکتیک‌ها و تکنیک‌های حمله به سامانه‌های AI.

حاکمیت و سیاست‌گذاری

امنیت پرامپت، فراتر از تکنیک‌های فنی است. یک چارچوب حاکمیتی برای مدیریت پرامپت‌ها، بخش اساسی هر استراتژی امنیتی است. برای جزئیات، پست حاکمیت پرامپت را ببینید.

اجزای حاکمیت پرامپت

  • سیاست‌های مکتوب: سیاست‌های امنیتی پرامپت باید مکتوب و در دسترس باشند.
  • مالکیت پرامپت: برای هر پرامپت، یک مالک مشخص تعیین شود.
  • نسخه‌بندی: همه تغییرات پرامپت باید نسخه‌بندی شوند. برای جزئیات، پست نسخه‌بندی پرامپت را ببینید.
  • بازبینی دوره‌ای: پرامپت‌ها باید به‌صورت دوره‌ای بازبینی شوند.
  • آموزش تیم: تیم باید در زمینه امنیت پرامپت آموزش ببیند.
  • پاسخ به حادثه: یک برنامه پاسخ به حادثه امنیتی باید آماده باشد.

حریم خصوصی

حفاظت از حریم خصوصی، بخشی جدایی‌ناپذیر از امنیت پرامپت است. برای جزئیات، پست حریم خصوصی در پرامپت نویسی را ببینید.

پرسش‌های پرتکرار درباره امنیت پرامپت

آیا امنیت پرامپت را می‌توان به‌طور کامل تضمین کرد؟

خیر. در وضعیت فعلی فناوری، تضمین کامل ممکن نیست. هدف، کاهش احتمال و پیامد حملات است.

مهم‌ترین لایه دفاعی در امنیت پرامپت کدام است؟

هیچ لایه‌ای به‌تنهایی مهم‌ترین نیست. دفاع مؤثر، ترکیبی از چند لایه مستقل است.

آیا پاک‌سازی ورودی کافی است؟

خیر. پاک‌سازی ورودی فقط بخشی از راهکار است. مهاجمان با تکنیک‌های مختلف می‌توانند فیلترهای ساده را دور بزنند.

آیا استفاده از مدل‌های بزرگ‌تر امنیت را افزایش می‌دهد؟

نه لزوماً. اندازه مدل، معیار مستقیمی برای مقاومت در برابر حملات نیست.

آیا Red Teaming ضروری است؟

بله. Red Teaming دوره‌ای، یکی از مؤثرترین راهکارها برای شناسایی آسیب‌پذیری‌های پنهان است.

چطور بفهمم سامانه‌ام در برابر تزریق آسیب‌پذیر است؟

سه رویکرد: تحلیل معماری، Red Teaming هدفمند و پایش رفتار در محیط تولید.

آیا امنیت پرامپت بر هزینه اجرا اثر دارد؟

بله. لایه‌های امنیتی، هزینه توکن و تأخیر را افزایش می‌دهند. این هزینه باید در برابر کاهش ریسک توجیه شود.

آیا امنیت پرامپت فقط برای سامانه‌های بزرگ ضروری است؟

خیر. هر سامانه‌ای که به مدل زبانی متصل است، در معرض حملات قرار دارد.

آیا می‌توان از یک مدل برای تشخیص تزریق در خروجی مدل دیگر استفاده کرد؟

بله. این روش که «مدل نگهبان» نامیده می‌شود، در برخی سامانه‌ها استفاده می‌شود. اما این روش نیز هزینه دارد.

آیا آموزش تیم می‌تواند از حملات جلوگیری کند؟

آموزش تیم بخشی از راهکار است، اما کافی نیست. باید لایه‌های فنی مستقل نیز ایجاد شود.

چطور تیم خود را برای مقابله با حملات آموزش دهیم؟

سه محور اصلی: آموزش مفاهیم پایه، تمرین‌های عملی Red Teaming و بازبینی منظم حوادث.

نتیجه‌گیری کاربردی

بهترین روش‌های امنیت پرامپت، مجموعه‌ای از تکنیک‌های چندلایه است که برای کاهش ریسک حملات طراحی شده‌اند. این روش‌ها شامل پاک‌سازی ورودی، جداسازی دستور و داده، طراحی System Prompt مقاوم، اعتبارسنجی خروجی، محدودسازی ابزارها، پایش مداوم و Red Teaming دوره‌ای است. هر لایه، بخشی از ریسک را کاهش می‌دهد و ترکیب آن‌ها یک معماری دفاعی عملی می‌سازد.

امنیت پرامپت یک وضعیت پایدار نیست، یک فرایند مستمر است که نیازمند بازبینی، آزمایش و بهبود مداوم است.

در پروژه‌هایی که به حفاظت از داده حساس نیاز داشتیم، ترکیب این لایه‌ها ابزار اصلی برای دستیابی به امنیت قابل‌قبول بوده است. توصیه می‌کنم امنیت پرامپت را به‌عنوان بخشی از چرخه توسعه در نظر بگیرید و از یک چارچوب حاکمیتی مشخص استفاده کنید. اگر تجربه‌ای در پیاده‌سازی این لایه‌ها در پروژه‌های واقعی دارید، تجربه خودتان را با ما به اشتراک بگذارید.