کدی که از ChatGPT یا ابزارهای مشابه دریافت میکنید ممکن است بدون خطا اجرا شود، اما همچنان اطلاعات محرمانه را افشا کند، ورودی ناامن بپذیرد یا یک پکیج مخرب نصب کند. در این راهنما یاد میگیرید چگونه امنیت کد هوش مصنوعی را با یک فرایند مرحلهای بررسی کنید، ابزارهای مناسب را بشناسید و پیش از تحویل پروژه یا انتشار روی سرور، ریسکهای مهم را کاهش دهید.
چرا کدهای تولیدشده با هوش مصنوعی به بازبینی امنیتی نیاز دارند؟
مدلهای زبانی کد را مانند یک مهندس نرمافزار تحلیل و طراحی نمیکنند. آنها براساس الگوهای موجود در دادههای آموزشی و احتمال قرار گرفتن کلمات و دستورات در کنار یکدیگر، پاسخ میسازند. در نتیجه ممکن است کدی تولید کنند که از نظر ظاهری منطقی و حتی قابل اجرا باشد، اما با معماری پروژه، سیاستهای امنیتی سازمان یا شرایط واقعی استفاده هماهنگ نباشد.
برای مثال، مدل نمیداند فایل اکسل شما حاوی اطلاعات حقوق کارکنان است، دیتابیس آزمایشی نیست یا توکنی که در پرامپت قرار دادهاید به حساب اصلی شرکت دسترسی دارد؛ مگر اینکه این محدودیتها را بهوضوح بیان کنید. حتی با ارائه توضیحات کامل نیز خروجی باید بازبینی و آزمایش شود.
اجرای صحیح با اجرای امن یکسان نیست. یک اسکریپت میتواند وظیفه موردنظر را انجام دهد و همزمان تمام فایلهای یک پوشه را بخواند، خطاها را همراه با اطلاعات حساس ثبت کند یا دسترسی بیش از اندازهای به سرویسهای دیگر داشته باشد.
مقایسه کدنویسی انسانی و کدنویسی با هوش مصنوعی
- سرعت تولید: هوش مصنوعی معمولاً در ساخت نمونه اولیه، توابع تکراری و توضیح کد سریعتر است.
- شناخت زمینه پروژه: توسعهدهنده انسانی میتواند محدودیتهای کسبوکار، سطح محرمانگی داده و ساختار زیرساخت را بهتر درک کند.
- ثبات کیفیت: کیفیت خروجی هوش مصنوعی به مدل، پرامپت و اطلاعات زمینهای وابسته است و ممکن است در پاسخهای مختلف تغییر کند.
- مسئولیت امنیت: مسئولیت نهایی ارزیابی، تست و انتشار کد همچنان بر عهده فرد یا تیم اجراکننده است.
بنابراین خطرات استفاده از کد ChatGPT به معنای ناامن بودن همه خروجیها نیست. هوش مصنوعی یک دستیار سریع و مفید است، اما نباید جایگزین بازبینی فنی، تست و کنترل دسترسی شود.
شایعترین باگها و خطرات امنیتی در کدهای هوش مصنوعی
آسیب پذیری کدهای هوش مصنوعی معمولاً از همان دسته خطاهایی است که در کدنویسی انسانی هم دیده میشود. تفاوت مهم این است که کاربران ممکن است به دلیل ظاهر مرتب و توضیحات مطمئن مدل، خروجی را بدون بررسی بپذیرند.
خطر توهم پکیجها و کتابخانههای نامعتبر
مدل هوش مصنوعی ممکن است نام پکیجی را پیشنهاد دهد که واقعی نیست یا نام آن را با یک کتابخانه دیگر ترکیب کرده باشد. به این پدیده توهم پکیج یا Package Hallucination گفته میشود. مهاجمان میتوانند بعضی از این نامهای ساختگی را در مخازن عمومی ثبت کنند تا کاربر بهجای ابزار معتبر، بسته مخرب آنها را نصب کند.
فرض کنید هوش مصنوعی برای پردازش فایل اکسل، پکیجی با نامی حرفهای و مرتبط پیشنهاد میکند. اگر بدون بررسی دستور نصب را اجرا کنید، ممکن است بستهای ناشناس به فایلها، متغیرهای محیطی یا شبکه سیستم دسترسی پیدا کند.
پیش از نصب هر وابستگی، نام دقیق آن را در مخزن رسمی مانند PyPI برای پایتون یا npm برای جاوااسکریپت بررسی کنید. سابقه انتشار، ناشر، مخزن کد، تعداد استفادهکنندگان، تاریخ بهروزرسانی و شباهت نام آن با پکیجهای مشهور را ببینید. زیاد بودن دانلود نیز بهتنهایی تضمین امنیت نیست.
نشت اطلاعات حساس و کلیدهای دسترسی
قرار دادن رمز عبور، کلید API، توکن ربات، رشته اتصال دیتابیس یا آدرسهای داخلی در کد، یکی از رایجترین خطاهاست. این اطلاعات ممکن است وارد مخزن Git، فایل گزارش، نسخه پشتیبان یا فایل تحویلی به مشتری شوند.
اطلاعات حساس باید در متغیرهای محیطی یا سامانههای مدیریت اسرار نگهداری شوند. فایلهای محلی حاوی تنظیمات محرمانه نیز نباید وارد مخزن عمومی شوند. اگر یک کلید دسترسی قبلاً در چتبات، مخزن یا فایل اشتراکی قرار گرفته است، فقط حذف آن کافی نیست؛ کلید را باطل و نمونه جدیدی صادر کنید.
اطلاعات واقعی شرکت را داخل پرامپت وارد نکنید. قبل از ارسال کد، نام مشتری، اطلاعات کارکنان، دادههای مالی، کلیدها، آدرس سرورها و بخشهای محرمانه را حذف یا با داده ساختگی جایگزین کنید. سیاست حریم خصوصی، شرایط نگهداری داده و تنظیمات حساب سازمانی ابزار هوش مصنوعی نیز باید بررسی شود.
ضعف در اعتبارسنجی ورودیها و آسیبپذیریهای تزریقی
هوش مصنوعی برای کوتاه نگه داشتن پاسخ ممکن است ورودی کاربر را مستقیماً وارد یک کوئری SQL، دستور سیستمعامل یا صفحه وب کند. این روش میتواند زمینه تزریق SQL، تزریق فرمان و XSS را فراهم کند.
برای ارتباط با دیتابیس باید از کوئری پارامتری استفاده شود، نه اتصال مستقیم متن ورودی به دستور SQL. دادهای که در صفحه وب نمایش داده میشود نیز باید متناسب با محل استفاده، پاکسازی یا کدگذاری شود. اعتبارسنجی فقط به بررسی خالی نبودن فیلد محدود نیست؛ نوع، طول، قالب و محدوده مجاز داده نیز اهمیت دارد.
کنترل دسترسی ضعیف
ممکن است کد صرفاً بررسی کند که کاربر وارد حساب شده است، اما مجاز بودن او برای مشاهده یا ویرایش یک رکورد خاص را نسنجد. احراز هویت مشخص میکند کاربر چه کسی است؛ مجوزدهی مشخص میکند چه کاری اجازه دارد انجام دهد. هر دو باید در سمت سرور کنترل شوند.
اصل حداقل دسترسی را اجرا کنید. اسکریپتی که فقط باید یک فایل مشخص را بخواند، نباید به کل پوشه اشتراکی دسترسی نوشتن داشته باشد. توکن سرویس نیز نباید مجوز مدیریتی دریافت کند، مگر اینکه واقعاً ضروری باشد.
مدیریت نامناسب خطا و ثبت اطلاعات محرمانه
نمایش جزئیات فنی خطا، مسیر فایلها، ساختار دیتابیس یا اطلاعات نشست به کاربر میتواند برای مهاجم مفید باشد. از طرف دیگر، حذف کامل ثبت رویدادها نیز کشف مشکل را دشوار میکند. پیام عمومی برای کاربر و گزارش فنی کنترلشده برای تیم پشتیبانی، راهکار مناسبتری است. رمزها، توکنها و اطلاعات شخصی نباید در گزارشها ثبت شوند.
وابستگیهای قدیمی و تنظیمات ناامن
مدل ممکن است از نسخه قدیمی یک کتابخانه، الگوریتم رمزنگاری منسوخ یا تنظیمات مخصوص توسعه استفاده کند. فعال ماندن حالت اشکالزدایی، رمز پیشفرض، دسترسی عمومی سرویس یا مجوز بیش از اندازه فایلها نمونههایی از این مشکل هستند. نسخه وابستگیها و تنظیمات محیط انتشار باید مستقل از پیشنهاد مدل بررسی شوند.
ریسکهای ویژه اسکریپتهای پایتون، VBA و اتوماسیون
کاربران اداری معمولاً اسکریپت را برای تغییر گروهی فایلها، ارسال ایمیل یا پردازش اکسل دریافت میکنند. در این سناریوها دستورات حذف و جابهجایی فایل، اجرای فرمان سیستم، دانلود از اینترنت، دسترسی به Outlook و ماکروهای خودکار اهمیت ویژه دارند.
در VBA، دستوراتی مانند اجرای Shell، دسترسی گسترده به فایلها، دانلود محتوا و اجرای خودکار هنگام باز شدن سند باید با حساسیت بررسی شوند. ابتدا از فایلها نسخه پشتیبان بگیرید و ماکرو را روی داده آزمایشی اجرا کنید.
چکلیست گامبهگام بررسی امنیت کد قبل از انتشار نهایی
این فرایند برای بررسی امنیت کد هوش مصنوعی طراحی شده است، اما برای هر کد دریافتشده از اینترنت یا همکار ناشناس نیز کاربرد دارد.
مرحله اول: بررسی دستی و خطبهخط منطق برنامه
قبل از اجرا باید بتوانید هدف هر بخش مهم کد را با زبان ساده توضیح دهید. اگر بخشی را درک نمیکنید، از مدل بخواهید همان قسمت را خطبهخط توضیح دهد؛ اما توضیح مدل را نیز پاسخ قطعی در نظر نگیرید.
هنگام مرور دستی به این موارد دقت کنید
- کد چه فایلهایی را میخواند، تغییر میدهد یا حذف میکند؟
- آیا به اینترنت متصل میشود یا اطلاعاتی را به یک آدرس ناشناس میفرستد؟
- آیا فرمان سیستمعامل، کد پویا یا محتوای دریافتشده از اینترنت را اجرا میکند؟
- آیا به دیتابیس اصلی، ایمیل سازمانی یا پوشههای مشترک دسترسی دارد؟
- در صورت دریافت ورودی اشتباه، رفتار برنامه چیست؟
- آیا عملیات حساس بدون تأیید، محدودیت یا امکان بازگشت انجام میشود؟
کاربر کمتجربه نیز میتواند با جستوجوی نام توابع ناشناخته و درخواست توضیح درباره ورودی، خروجی و اثر جانبی آنها، بخش قابل توجهی از ریسک را شناسایی کند. با این حال، کدهای مربوط به پرداخت، احراز هویت، اطلاعات سلامت یا دادههای سازمانی حساس به بازبینی فرد متخصص نیاز دارند.
مرحله دوم: جداسازی اسرار و بررسی وابستگیها
تمام رمزها، توکنها و رشتههای اتصال را از کد خارج کنید و از متغیر محیطی یا ابزار مدیریت اسرار استفاده کنید. فایل تنظیمات محرمانه را در فهرست فایلهای نادیدهگرفتهشده مخزن قرار دهید و یک نمونه بدون اطلاعات واقعی برای راهنما بسازید.
فهرست وابستگیها را استخراج و هر مورد را در مخزن رسمی بررسی کنید. نامهای مشابه، پکیجهای تازهساختهشده، ناشر نامشخص و نبود مخزن کد عمومی نشانههایی برای بررسی بیشتر هستند. نسخهها را تا حد مناسب قفل کنید تا نصب در سیستمهای مختلف قابل پیشبینی باشد.
مرحله سوم: اسکن با ابزارهای تحلیل ایستای کد
ابزارهای SAST بدون اجرای برنامه، الگوهای مشکوک را در کد پیدا میکنند. این ابزارها بازبینی انسانی را حذف نمیکنند؛ ممکن است هشدار اشتباه بدهند یا یک آسیبپذیری واقعی را تشخیص ندهند. ارزش اصلی آنها در سرعت، تکرارپذیری و کشف خطاهای شناختهشده است.
ابزارهای رایگان و در دسترس
- Bandit: مناسب پایتون، با استفاده نسبتاً ساده و متمرکز بر الگوهای امنیتی رایج مانند اجرای فرمان و رمزنگاری ضعیف.
- Semgrep: مناسب زبانهای مختلف، با سطح استفاده متوسط و قابل استفاده برای یافتن الگوهای ناامن و تعریف قواعد سفارشی.
- pip-audit: مناسب پروژههای پایتون و برای شناسایی آسیبپذیریهای شناختهشده در وابستگیها.
- npm audit: مناسب پروژههای مبتنی بر npm و برای بررسی مشکلات شناختهشده وابستگیهای جاوااسکریپت.
- ESLint: مناسب جاوااسکریپت و TypeScript؛ با افزونهها و قواعد مناسب میتواند برخی الگوهای پرخطر را شناسایی کند.
- Gitleaks: مناسب مخازن کد و برای پیدا کردن کلیدها، توکنها و اسراری که ناخواسته ثبت شدهاند.
- CodeQL: مناسب چند زبان و تحلیل عمیقتر جریان داده؛ راهاندازی آن نسبت به ابزارهای سادهتر به دانش بیشتری نیاز دارد.
برای یک پروژه پایتون کوچک میتوان بررسی را با Bandit، pip-audit و Gitleaks آغاز کرد. در پروژه وب جاوااسکریپت نیز ESLint، npm audit و Semgrep ترکیب مناسبی برای شروع هستند. هشدار بحرانی را بدون بررسی نادیده نگیرید و نتیجه ابزار را نیز تضمین قطعی امنیت تلقی نکنید.
مرحله چهارم: تست در محیط ایزوله
تست امنیت کد قبل از انتشار باید روی داده ساختگی و در محیطی جدا از سیستم اصلی انجام شود. محیط مجازی پایتون فقط وابستگیها را جدا میکند و سندباکس امنیتی کامل نیست. برای کد ناشناس، ماشین مجازی یا کانتینری با دسترسی محدود انتخاب مناسبتری است.
محیط زنده در برابر محیط ایزوله
- محیط زنده: به داده و سرویس واقعی متصل است و یک خطا میتواند باعث حذف اطلاعات، ارسال ایمیل واقعی یا توقف سرویس شود.
- محیط ایزوله: از داده نمونه، حساب آزمایشی و دسترسی محدود استفاده میکند و پاکسازی یا بازگردانی آن سادهتر است.
در سندباکس، دسترسی شبکه را در صورت غیرضروری قطع کنید، پوشههای شخصی را در اختیار برنامه قرار ندهید و از توکنهای آزمایشی با حداقل مجوز استفاده کنید. ماشین مجازی را پیش از اجرا Snapshot بگیرید تا در صورت بروز مشکل بتوانید به وضعیت قبلی بازگردید.
مرحله پنجم: آزمون رفتار، بازبینی تغییرات و انتشار کنترلشده
فقط مسیر موفق برنامه را آزمایش نکنید. ورودی خالی، متن بسیار طولانی، کاراکترهای غیرمنتظره، فایل خراب، قطع اینترنت، نبود مجوز و پاسخ خطای سرویس خارجی را نیز امتحان کنید. برای عملیات حساس، تست خودکار بنویسید و مطمئن شوید برنامه در زمان خطا به وضعیت امن بازمیگردد.
تغییرات کد را با نسخه قبلی مقایسه کنید و در پروژههای مهم از بازبینی نفر دوم استفاده کنید. ابتدا برنامه را در محیط آزمایشی منتشر کنید، سپس با دسترسی محدود وارد محیط واقعی شوید. ثبت رویداد، هشدار و برنامه بازگشت به نسخه قبل نیز بخشی از انتشار امن است.
چکلیست سریع ۵ مرحلهای قابل ذخیره
- ۱. فهم کد: هدف، ورودی، خروجی، دسترسی فایل، شبکه و دیتابیس مشخص است.
- ۲. پاکسازی: رمز، توکن، اطلاعات مشتری و داده محرمانه در کد یا پرامپت وجود ندارد.
- ۳. راستیآزمایی: اصالت و نسخه تمام پکیجها در مخزن رسمی بررسی شده است.
- ۴. اسکن و تست: کد با ابزار مناسب اسکن و در محیط ایزوله با داده ساختگی اجرا شده است.
- ۵. انتشار کنترلشده: دسترسیها حداقلی، گزارشها امن و امکان بازگشت به نسخه قبلی فراهم است.
ارزیابی سریع ریسک و اقدام اصلاحی
- کلید API داخل کد: ریسک دسترسی غیرمجاز؛ انتقال به متغیر محیطی و تعویض کلید افشاشده.
- پکیج ناشناس: ریسک نصب بدافزار؛ بررسی مخزن رسمی، ناشر و جایگزین معتبر.
- ورودی مستقیم در SQL: ریسک تزریق؛ استفاده از کوئری پارامتری و اعتبارسنجی ورودی.
- اجرای فرمان سیستم: ریسک اجرای دستور ناخواسته؛ حذف اجرای پویا، محدود کردن آرگومانها و استفاده از API امنتر.
- دسترسی به کل پوشه: ریسک افشا یا حذف فایل؛ محدود کردن مسیر و مجوزها و تهیه نسخه پشتیبان.
- حالت اشکالزدایی در سرور: ریسک افشای اطلاعات فنی؛ غیرفعالسازی و تنظیم مدیریت خطای مناسب.
چگونه با پرامپتنویسی اصولی کدهای ایمنتری دریافت کنیم؟
پرامپت دقیق احتمال دریافت خروجی بهتر را افزایش میدهد، اما تضمین امنیت نیست. زبان، نسخه، چارچوب، نوع داده، سطح دسترسی و محدودیتهای محیط را مشخص کنید. همچنین از مدل بخواهید فرضیات خود را بیان کند و نقاط نیازمند تصمیم انسانی را علامت بزند.
قالب پیشنهادی برای درخواست کد
نقش و هدف: برای زبان و نسخه مشخص، کدی برای انجام وظیفه موردنظر تولید کن.
الزامات امنیتی: ورودیها را از نظر نوع، طول و قالب اعتبارسنجی کن؛ از کوئری پارامتری استفاده کن؛ هیچ رمز یا کلیدی داخل کد قرار نده؛ اصل حداقل دسترسی و توصیههای مرتبط OWASP را رعایت کن.
وابستگیها: فقط از پکیجهای شناختهشده استفاده کن، دلیل نیاز و نسخه پیشنهادی هرکدام را توضیح بده و در صورت اطمینان نداشتن نام پکیج نساز.
مدیریت خطا: پیام خطا نباید اطلاعات محرمانه، مسیر داخلی یا جزئیات دیتابیس را نمایش دهد.
تست: برای ورودی معتبر، نامعتبر و شرایط شکست تست بنویس و ریسکهای باقیمانده را فهرست کن.
پس از دریافت پاسخ اول، یک گفتوگوی جداگانه برای نقد امنیتی ایجاد کنید و از مدل بخواهید کد را از دید مهاجم و براساس سناریوهای سوءاستفاده بررسی کند. بهتر است تولید کد و نقد آن در دو مرحله انجام شود، اما نتیجه هر دو مرحله همچنان به راستیآزمایی انسانی نیاز دارد.
اشتباهات رایج کاربران در استفاده از کدهای هوش مصنوعی
- کپی و اجرا بدون مطالعه: ظاهر مرتب کد نشانه امن بودن آن نیست.
- استفاده از دسترسی مدیر سیستم: اجرای کد ناشناس با دسترسی Administrator یا root دامنه خسارت را افزایش میدهد.
- ارسال اطلاعات واقعی در پرامپت: داده مشتری، قرارداد، رمز و کد محرمانه باید حذف یا ناشناسسازی شود.
- اعتماد به اولین پاسخ: پاسخ اولیه ممکن است سادهترین راهحل را ارائه دهد، نه امنترین راهحل را.
- نصب کورکورانه پکیجها: هر نام پیشنهادی باید در مخزن رسمی راستیآزمایی شود.
- نادیده گرفتن هشدار ابزارها: خاموش کردن اسکنر برای عبور سریع از خطا، مشکل امنیتی را حل نمیکند.
- تست با داده اصلی: آزمایش باید ابتدا با نسخه کپیشده و ناشناس از داده انجام شود.
- فرض امنیت کامل پس از اسکن: ابزار خودکار فقط بخشی از خطاهای شناختهشده را پیدا میکند.
چه زمانی بازبینی متخصص ضروری است؟
برای اسکریپت شخصی کمریسک، چکلیست و ابزارهای معرفیشده نقطه شروع مناسبی هستند. اما اگر کد با پرداخت، احراز هویت، اطلاعات شخصی، داده سلامت، زیرساخت سازمان، امضای دیجیتال، دسترسی مدیریتی یا کاربران زیاد در ارتباط است، بازبینی امنیتی متخصص ضروری میشود.
همچنین اگر نمیتوانید عملکرد بخش مهمی از کد را توضیح دهید، ابزارها هشدار سطح بالا گزارش میکنند یا برنامه قرار است مستقیماً روی سرور عمومی اجرا شود، انتشار را تا انجام بررسی فنی متوقف کنید.
جمعبندی
امنیت کد هوش مصنوعی با یک ابزار یا پرامپت تضمین نمیشود. فرایند مطمئن شامل فهم کد، حذف اطلاعات حساس، راستیآزمایی وابستگیها، اسکن خودکار، اجرای ایزوله و انتشار کنترلشده است. هوش مصنوعی سرعت ساخت و یادگیری را افزایش میدهد، اما تصمیم نهایی درباره پذیرش ریسک باید توسط انسان گرفته شود.
یادگیری سیستماتیک هوش مصنوعی، اتوماسیون و مهارتهای دیجیتال در آکادمی پویا حیاتی بر استفاده کاربردی و مسئولانه از ابزارها تمرکز دارد؛ رویکردی که برای ورود به بازار کار یا افزایش بهرهوری، سرعت را در کنار کنترل و دقت قرار میدهد. در هر پروژه، مسئولیت نهایی حفاظت از داده و امنیت خروجی بر عهده فرد یا تیم منتشرکننده باقی میماند.
سوالات متداول
آیا کدهای تولیدشده با ChatGPT کاملاً ناامن هستند؟
خیر. بسیاری از خروجیها قابل استفادهاند، اما هیچ کدی نباید فقط به دلیل تولید شدن توسط یک مدل معتبر تلقی شود. بازبینی، اسکن و تست قبل از انتشار ضروری است.
چگونه بفهمیم یک کتابخانه پیشنهادشده جعلی نیست؟
نام دقیق آن را در مخزن رسمی مانند PyPI یا npm جستوجو کنید و ناشر، سابقه نسخهها، مخزن کد و میزان استفاده را بررسی کنید. نامهای بسیار مشابه با پکیجهای مشهور را با دقت بیشتری بسنجید.
چرا نباید رمز و کلید API را در پرامپت وارد کنیم؟
این اطلاعات ممکن است در تاریخچه حساب، گزارشهای سازمانی یا فرایندهای پردازش سرویس باقی بمانند. از داده ساختگی استفاده کنید و اگر کلیدی افشا شد، آن را فوراً باطل و تعویض کنید.
آیا ابزاری برای سنجش خودکار امنیت کد وجود دارد؟
بله. Bandit، Semgrep، pip-audit، npm audit، Gitleaks و CodeQL از گزینههای کاربردی هستند. هیچکدام جای بازبینی انسانی و تست واقعی را بهطور کامل نمیگیرند.
چطور کد هوش مصنوعی را در ویندوز یا سرور ایزوله کنیم؟
از ماشین مجازی یا کانتینر با حساب محدود، داده ساختگی و دسترسی شبکه کنترلشده استفاده کنید. محیط مجازی پایتون فقط وابستگیها را جدا میکند و بهتنهایی سندباکس امنیتی کامل نیست.
آیا پرامپتنویسی تخصصی همه باگهای امنیتی را حذف میکند؟
خیر. پرامپت دقیق کیفیت خروجی را بهتر میکند، اما مدل ممکن است همچنان خطا کند. بررسی دستی، ابزارهای امنیتی، تست و بازبینی متخصص برای پروژههای حساس لازم است.

