علیرضا اسکندری
آموزش طراحی وب‌سایت با کمک هوش‌مصنوعیثبت‌نام با تخفیف (۴۰٪ تخفیف)

امنیت در وایب کد

۹ شهریور ۱۴۰۵ · ۱۰ دقیقه مطالعه

در این مقاله درباره امنیت کدها در دنیای وایب کدینگ صحبت میکنیم.

امنیت در وایب کد

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

۴۵٪ از تسک‌های کدنویسی با کمک هوش مصنوعی، طبق مطالعه‌ای در دسامبر ۲۰۲۵ روی ریپوهای متن‌باز، یک آسیب‌پذیری امنیتی جدید ایجاد می‌کنند. این راهنما برای این است که تو جزو این آمار نباشی.

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

وایب‌کدینگ دقیقاً یعنی چی؟

اصطلاح وایب‌کدینگ را آندری کارپاتی اوایل ۲۰۲۵ مطرح کرد: به‌جای اینکه کد را خط‌به‌خط بنویسی، چیزی را که می‌خواهی با زبان طبیعی توضیح می‌دهی و ایجنت آن را به یک نرم‌افزار واقعی تبدیل می‌کند. در این مدل، نقش تو از تایپ کردن سینتکس به هدایت نیت، بازبینی خروجی و تصمیم گرفتن دربارهٔ چیزی که برای شیپ امن است تغییر می‌کند.

این راهنما این طیف را در سه سطح بررسی می‌کند و برای هر سطح یک چک‌پوینت امنیتی دارد.

پشتهٔ وایب‌کدینگ

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

  1. تو — درخواست / نیت

  2. ایجنت — برنامه‌ریزی + نوشتن

  3. کد — دیفِ تولیدشده

  4. چک‌پوینت — رمزها · احراز هویت · وابستگی‌ها · بازبینی انسانی یا SAST. اگر رد شود، برمی‌گردد به ایجنت.

  5. شیپ — زنده

مرحله‌ای که بیشتر پروژه‌های وایب‌کد شده حذفش می‌کنند، مرحلهٔ ۴ است. در هر سطح پایین‌تر می‌بینی که دقیقاً چه چیزهایی را باید در این مرحله چک کنی.

سطح ۱ · مبتدی — بدون نیاز به کدنویسی

اپ‌بیلدرها: توضیحش بده، یک محصول هاست‌شده تحویل بگیر

این پلتفرم‌ها یک توضیح متنی را به یک اپلیکیشن کامل تبدیل می‌کنند؛ از دیتابیس و هاستینگ گرفته تا صفحات احراز هویت. حتی لازم نیست ادیتور کد را باز کنی. اما همین راحتی می‌تواند ریسک هم داشته باشد: پلتفرم به‌جای تو دربارهٔ امنیت تصمیم می‌گیرد و این تصمیم‌ها معمولاً در پس‌زمینه گرفته می‌شوند. تازه، پیش‌فرض خیلی وقت‌ها «باز» است.

  • Lovable (Lovable AB) — با یک پرامپت، یک اپ فول‌استک می‌سازد و ادیتور بصری و هاستینگ مبتنی بر Supabase هم دارد. بهترین برای: بنیان‌گذارهای غیرفنی که می‌خواهند اولین پروتوتایپشان را بسازند.

  • Bolt.new (StackBlitz) — اپ وب را مستقیم داخل مرورگر و با WebContainers می‌سازد و اجرا می‌کند. بهترین برای: پروتوتایپ سریع و پروژه‌های هکاتونی.

  • v0 (Vercel) — کامپوننت‌های React با کیفیت پروداکشن و حالا حتی اپ کامل، همراه با Design Mode. بهترین برای: ساخت یک رابط کاربری تمیز و صیقلی که واقعاً بتوانی به کاربر بدهی.

  • Replit Agent (Replit) — اسکلت‌بندی، کدنویسی و دیپلوی را داخل یک IDE ابری انجام می‌دهد و دیتابیس و هاستینگ هم دارد. بهترین برای: دانشجوها و کسانی که برای اولین بار می‌خواهند یک محصول کامل بسازند.

  • Base44 / سبک Zite (various) — بیلدرهای اپ تجاری که ورک‌فلو، دیتابیس و سطح دسترسی‌ها را به شکل بصری نشان می‌دهند. بهترین برای: ابزارهای داخلی، پورتال‌ها و داشبوردهایی که قرار است یک غیرمهندس مالک و مدیرشان باشد.

چک‌پوینت امنیتی · سطح ۱ — فرانت‌اند قفل نیست، فقط پرده است.

اپ‌بیلدرها خیلی راحت یک دکمه یا صفحه را پشت لاگین پنهان می‌کنند و اسمش را می‌گذارند «محافظت‌شده». اما اگر روت API اصلی خودش دسترسی را بررسی نکند، هرکسی می‌تواند با داشتن URL از پشت این پرده رد شود.

  • قوانین دیتابیس را خودت مستقیم بررسی کن. اگر از Supabase یا Firebase استفاده می‌کنی، برو سراغ بخش قوانین دسترسی. «Allow read/write if true» یکی از پیش‌فرض‌های خطرناک در خیلی از پروژه‌های تولیدشده است.

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

  • مستقیم از بیلدر بخواه: «قوانین احراز هویت این پروژه را بررسی کن و هر جدول یا روتی را که کنترل دسترسی ندارد، لیست کن.» بیشتر ابزارهای این سطح اگر دقیق از آن‌ها بخواهی، این کار را انجام می‌دهند؛ اما معمولاً خودشان به‌صورت پیش‌فرض سراغش نمی‌روند.

سطح ۲ · متوسط — هنوز خودت کد را باز می‌کنی

IDEهای بومی هوش مصنوعی و دستیارهای کدنویسی

در این سطح، وارد یک ادیتور واقعی می‌شوی. هر فایل و هر دیف را می‌بینی و حرف آخر هم با توست. برای کسی که می‌تواند کد را بخواند ولی نمی‌خواهد همه‌چیز را خودش تایپ کند، این نقطهٔ شیرین وایب‌کدینگ است؛ جایی که بخش بزرگی از وایب‌کدینگ حرفه‌ای در ۲۰۲۶ واقعاً اتفاق می‌افتد.

  • Cursor (Anysphere) — یک IDE کامل با Agent برای تغییرات چندفایلی و مدل Composer. بهترین برای: اگر فقط یک ابزار همه‌کاره می‌خواهی، یکی از قوی‌ترین گزینه‌هاست.

  • Devin Desktop (Cognition · قبلاً Windsurf) — Cognition در اواسط ۲۰۲۵ ویندسرف را خرید. ایجنت Cascade می‌تواند تغییرات چندفایلی انجام دهد و اتوکامپلیت هم دارد. بهترین برای: کسانی که یک جایگزین ساده‌تر و کم‌تنظیم‌تر برای Cursor می‌خواهند.

  • GitHub Copilot (Microsoft / GitHub) — حالا حالت ایجنت چندمرحله‌ای را داخل VS Code و GitHub دارد و از نظر یکپارچگی با PR و کنترل‌های سازمانی بسیار قوی است. بهترین برای: تیم‌هایی که از همان ابتدا به کنترل، تطبیق و مدیریت سازمانی نیاز دارند.

  • Cline (متن‌باز) — یک اکستنشن رایگان VS Code با قابلیت‌های ایجنتی؛ کلید API را خودت می‌آوری. بهترین برای: کسانی که می‌خواهند کنترل کاملی روی مدل و هزینهٔ آن داشته باشند.

  • Aider (متن‌باز) — یک جفت‌برنامه‌نویس ترمینالی که ریپوی گیت محلی را ویرایش می‌کند و برای تغییرات کامیت ایجاد می‌کند. بهترین برای: کسانی که می‌خواهند ردپای تغییرات در ورژن‌کنترل کاملاً قابل‌بررسی باشد.

  • Tabnine (Tabnine) — تمرکز اصلی روی حریم خصوصی سازمانی است، با امکان اجرای مدل به‌صورت air-gapped یا روی زیرساخت خودت. بهترین برای: صنایع تحت‌نظارت و تیم‌هایی که نمی‌خواهند کدشان به API عمومی ارسال شود.

چک‌پوینت امنیتی · سطح ۲ — دیف را بخوان؛ فقط روی Accept نزن.

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

  • با هر دیف تولیدشده توسط هوش مصنوعی مثل درخواست پول از طرف یک غریبه رفتار کن. قبل از Accept کردن نگاهش کن، مخصوصاً وقتی پای احراز هویت، پرداخت یا کوئری دیتابیس وسط است.

  • مراقب پکیج‌های توهمی باش. مطالعهٔ Cloud Security Alliance در ۲۰۲۶ نشان داد نزدیک به ۱ مورد از هر ۵ نمونه‌کد تولیدشده به پکیجی اشاره می‌کند که اصلاً وجود ندارد. مهاجم‌ها می‌توانند همان اسم را از قبل ثبت کنند که به آن slopsquatting می‌گویند؛ بنابراین یک npm install که هوش مصنوعی پیشنهاد می‌دهد، ممکن است بدافزار وارد پروژه کند.

  • اسکن لحظه‌ای برای پیدا کردن رمزها را فعال کن. طبق GitGuardian ۲۰۲۶، کامیت‌هایی که با کمک هوش مصنوعی ساخته شده‌اند تقریباً دو برابر بیشتر از کامیت‌های کاملاً انسانی اطلاعات محرمانه لو می‌دهند.

  • همیشه از کوئری پارامتری‌شده استفاده کن. اگر جایی چیزی مثل "SELECT * WHERE id = " + input دیدی، یک SQL injection می‌تواند درست همان‌جا منتظرت باشد.

سطح ۳ · پیشرفته — ایجنت اجرا می‌کند، تو نظارت می‌کنی

ورک‌فلوهای ایجنتی و چندایجنتی

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

  • Claude Code (Anthropic) — یک ایجنت ترمینالی که به کل کدبیس وصل می‌شود، برنامه‌اش را توضیح می‌دهد و قبل از اجرای دستور یا تغییرات چندفایلی از تو تأیید می‌گیرد. بهترین برای: خودمختاری چندفایلی همراه با برنامه‌ای که می‌توانی ببینی و کنترل کنی.

  • Devin (Cognition) — یک مهندس خودمختار که تیکت می‌گیرد، برنامه‌ریزی می‌کند، کد می‌نویسد و با دخالت محدود انسان PR باز می‌کند. بهترین برای: سپردن تیکت‌های مشخص و قابل‌تعریف که بعداً به‌صورت PR بازبینی می‌کنی.

  • OpenHands (متن‌باز · قبلاً OpenDevin) — یک ایجنت خودمختار داخل کانتینر sandbox با دسترسی به شل، مرورگر و ادیتور؛ مناسب برای سلف‌هاست. بهترین برای: تیم‌هایی که می‌خواهند ایجنت را کاملاً کنترل و sandbox کنند.

  • MCP (Model Context Protocol · استاندارد باز) — خودش یک ابزار نیست؛ بیشتر شبیه لوله‌کشی زیرساختی بین ایجنت و سرویس‌های مختلف است. به ایجنت اجازه می‌دهد از طریق فراخوانی‌های کنترل‌شده به دیتابیس و API وصل شود، نه اینکه دسترسی خام داشته باشد. بهترین برای: مشخص کردن دقیق اینکه ایجنت به چه چیزهایی دسترسی دارد و چه کارهایی می‌تواند انجام دهد.

  • ریویورهای PR با هوش مصنوعی (CodeRabbit، Greptile و مشابه) — بات‌هایی که هر PR، حتی PRهای تولیدشده با AI، را بررسی می‌کنند. بهترین برای: داشتن یک جفت چشم خودکار دیگر روی چیزی که ایجنت اول نوشته است.

  • n8n + نودهای ایجنت (n8n) — اتوماسیون ورک‌فلو که ایجنت را به سیستم‌های موجود وصل می‌کند. بهترین برای: وصل کردن ایجنت به بقیهٔ سیستم‌های کسب‌وکار، نه فقط کدبیس.

چک‌پوینت امنیتی · سطح ۳ — با ایجنت خودمختار مثل یک نیروی تازه‌استخدام‌شده رفتار کن.

روز اول به یک نیروی جدید رمز روت ادمین نمی‌دهی. ایجنتی که به کلید API زنده و ترمینال دسترسی دارد هم دقیقاً همین احتیاط را می‌خواهد؛ شاید حتی بیشتر، چون با سرعت ماشین کار می‌کند و ممکن است در چند ثانیه کاری انجام دهد که انسان برایش چند دقیقه وقت می‌گذاشت.

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

  • هر چیزی را که کد اجرا می‌کند sandbox کن. ترجیحاً داخل کانتینر یا VMای که به رازهای غیرضروری دسترسی ندارد.

  • برای اقدامات حساس، همیشه تأیید انسانی داشته باش. حذف کردن، force-push، دیپلوی پروداکشن و عملیات مالی باید منتظر تأیید یک انسان بمانند.

  • دسترسی ابزارهای MCP را دقیق محدود کن. مشخص کن ایجنت به کدام جدول‌ها و کدام عملیات دسترسی دارد. «دسترسی کامل» همان پیش‌فرضی است که می‌تواند حادثه بسازد.

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

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

کجای کد تولیدشده با هوش مصنوعی واقعاً شکست می‌خورد؟

این‌ها فقط فرضیه نیستند. هر عدد از پژوهش‌های مستقل سال‌های ۲۰۲۵ و ۲۰۲۶ روی کد واقعی تولیدشده با هوش مصنوعی آمده است.

  • ۸۶٪ — نقص‌های XSS در نمونه‌های تولیدشده

  • ۵ از ۵ — ایجنت‌هایی که در همان تست SSRF ایجاد کردند

  • ۴۵٪ — تسک‌هایی که یک آسیب‌پذیری جدید ایجاد کردند

  • ۱۹٫۷٪ — نمونه‌هایی که به یک پکیج توهمی اشاره داشتند

  • ۲٫۱ برابر — نرخ افشای رمز در مقایسه با کامیت‌های صرفاً انسانی

منابع: Georgetown CSET (XSS)، Tenzai / BeyondScale (SSRF)، مطالعهٔ ریپوی متن‌باز دسامبر ۲۰۲۵ (نرخ آسیب‌پذیری تسک)، Cloud Security Alliance آوریل ۲۰۲۶ (slopsquatting)، GitGuardian ۲۰۲۶ (افشای رمز).

چک‌لیست پنج‌دقیقه‌ای قبل از شیپ

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

  • هیچ رمزی در کد قابل‌مشاهدهٔ سمت کلاینت نیست. باندل فرانت‌اند و ریپو را برای کلید API، توکن و رمز عبور جست‌وجو کن. این اطلاعات باید فقط در متغیرهای محیطی سمت سرور باشند.

  • تمام کنترل‌های دسترسی روی سرور انجام می‌شوند، نه فقط در UI. مخفی کردن یک دکمه، کنترل دسترسی نیست.

  • قوانین دیتابیس صریح هستند، نه باز و پیش‌فرض. مخصوصاً اگر از Supabase، Firebase یا هر Backend-as-a-Service دیگری استفاده می‌کنی.

  • تمام کوئری‌ها پارامتری‌شده‌اند. از چسباندن مستقیم رشته‌ها در SQL، NoSQL یا دستورهای شل خودداری کن.

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

  • برای احراز هویت، پرداخت و فرم‌های عمومی rate limiting فعال است.

  • CORS فقط به دامنه‌های واقعی محدود شده، نه اینکه به‌خاطر پیش‌فرض اسکفولد برای همه باز باشد.

  • از خود هوش مصنوعی خواسته‌ای: «این کد را مشخصاً از نظر مشکلات امنیتی بررسی کن.» این را به‌عنوان یک پاس جدا انجام بده، نه فقط اینکه بپرسی «کار می‌کند یا نه؟»

نسبت بازبینی به کد تو

اگر ایجنت همین الان چهار ساعت از زمان کدنویسی‌ات را ذخیره کرده، حرکت منطقی این نیست که چهار ساعت زودتر شیپ کنی. بخشی از این زمان را صرف بازبینی کن، کاری که بدون هوش مصنوعی شاید اصلاً وقتش را نداشتی. وایب‌کدینگ نیاز به تفکر امنیتی را حذف نمی‌کند؛ فقط جای آن را در فرایند عوض می‌کند. تیم‌هایی که مرحلهٔ چک‌پوینت را اختیاری می‌دانند، همان‌هایی هستند که ممکن است چند هفته یا چند ماه بعد سر از گزارش‌های امنیتی دربیاورند.

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

امنیت در وایب کد | علیرضا اسکندری