رفتن به محتوا

گرفتنِ مسائلِ امنیتی هم‌زمان با نوشتنِ کد توسطِ Claude

پلاگینِ security-guidance را نصب کن تا Claude تغییرهای کدِ خودش را از نظرِ آسیب‌پذیری بازبینی کند و در همان نشست رفعشان کند.

پلاگینِ راهنماییِ امنیتی کاری می‌کند که Claude در حینِ کار، تغییرهای کدِ خودش را از نظرِ آسیب‌پذیری‌های رایج بازبینی کند و آنچه پیدا می‌کند را در همان نشست رفع کند. این پلاگین مسائلی مثلِ injection، deserializationِ ناامن، و APIهای ناامنِ DOM را پیش از رسیدنِ کد به یک pull request می‌گیرد و این‌طور کم می‌کند که چقدر بازبینیِ امنیتی به بازبینان انسانیِ پایین‌دست می‌افتد.

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

این پلاگین همراهِ در-نشستِ Code Review است، که روی pull requestها اجرا می‌شود. این پلاگین آنچه به PR می‌رسد را کم می‌کند. Code Review آنچه می‌رسد را می‌گیرد. برای اینکه پلاگین چطور با بازبینیِ درخواستی و اسکنِ CI لایه می‌شود، این چطور با سایرِ ابزارهای امنیتی جور درمی‌آید را ببین.

  • Claude Code CLI نسخه‌ی 2.1.144 یا بالاتر
  • Python 3.8 یا بالاتر روی PATHِ تو. پلاگین به‌ترتیب python3، python، و py -3 را امتحان می‌کند
  • یک مخزنِ git برای دایرکتوری‌ای که در آن کار می‌کنی. بازبینی‌های پایانِ نوبت و کامیت در برابرِ وضعیتِ git diff می‌گیرند و بیرون از یک مخزن بی‌سروصدا رد می‌شوند. بررسیِ الگوی به‌ازای هر ویرایش همه‌جا کار می‌کند

در اولین اجرا، پلاگین یک محیطِ مجازی زیرِ ~/.claude/security/ می‌سازد و Claude Agent SDK را در آن نصب می‌کند، که نیازمندِ pip و دسترسی به شبکه است. اگر آن نصب شکست بخورد، بازبینیِ کامیت به‌جای بازبینیِ ایجنتیک به یک بازبینیِ تک‌شلیک عقب‌نشینی می‌کند. روی Windows گامِ محیطِ مجازی رد می‌شود، پس بازبینیِ ایجنتیکِ کامیت فقط در صورتی اجرا می‌شود که claude-agent-sdk از پیش قابلِ import باشد و در غیرِ این صورت به همان شکل عقب‌نشینی می‌کند.

در یک نشستِ Claude Code، از مارکت‌پلیسِ رسمیِ Anthropic نصب کن:

/plugin install security-guidance@claude-plugins-official

نصب برای یک محدوده اعلان می‌دهد. محدوده‌ی کاربر را انتخاب کن تا پلاگین در تنظیماتِ کاربرِ تو نوشته شود، تا در هر نشستِ محلیِ تازه‌ای که روی این ماشین شروع می‌کنی بارگذاری شود. اگر Claude Code گزارش داد که مارکت‌پلیس پیدا نشد، اول /plugin marketplace add anthropics/claude-plugins-official را اجرا کن، سپس نصب را دوباره امتحان کن.

سپس آن را در نشستِ فعلی با /reload-plugins فعال کن، که تغییرهای در انتظارِ پلاگین را بدونِ ری‌استارت اعمال می‌کند:

/reload-plugins

فعال‌سازی در نشست‌های ابری و مخزن‌های اشتراکی

Section titled “فعال‌سازی در نشست‌های ابری و مخزن‌های اشتراکی”

پلاگین‌های در محدوده‌ی کاربر به Claude Code on the web منتقل نمی‌شوند، چون آن نشست‌ها به‌جای ماشینِ تو روی زیرساختِ Anthropic اجرا می‌شوند. برای فعال‌کردنِ پلاگین آنجا، یا روشن‌کردنش برای هرکسی که یک مخزن را clone می‌کند، آن را در تنظیماتِ check-in‌شده‌ی پروژه اعلام کن:

{
"enabledPlugins": {
"security-guidance@claude-plugins-official": true
}
}

مدیران می‌توانند با تنظیمِ enabledPlugins در managed settings، پلاگین را در سطحِ کلِ سازمان فعال کنند.

پلاگین چه چیزی را بررسی می‌کند

Section titled “پلاگین چه چیزی را بررسی می‌کند”

پلاگین کارِ Claude را در سه نقطه بازبینی می‌کند، هرکدام در عمقی متفاوت:

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

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

نمونه‌ی دسته‌های الگو:

  • اجرای پویای کد: eval(، new Function، os.system، child_process.exec
  • deserializationِ ناامن: pickle
  • تزریقِ DOM: dangerouslySetInnerHTML، .innerHTML =، document.write
  • فایل‌های ورک‌فلو: ویرایش‌های زیرِ .github/workflows/، که می‌توانند دسترسی‌های سطحِ مخزن بدهند

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

می‌توانی با یک فایلِ security-patterns.yaml، الگوهای خودت را به این لایه اضافه کنی.

یک نوبت یک دورِ پاسخِ Claude است: تو پیامی می‌فرستی، Claude کار می‌کند و پاسخ می‌دهد، و نوبت پایان می‌یابد. پس از هر نوبت، پلاگین یک git diff از هرآنچه طیِ نوبت در درختِ کاری تغییر کرده محاسبه می‌کند، از جمله تغییرهای ابزارهای ویرایشِ Claude، فرمان‌های Bash، و ساب‌ایجنت‌ها، و آن را به یک بازبینیِ جداگانه‌ی Claude که متمرکز بر امنیت است می‌فرستد. بازبینی در پس‌زمینه اجرا می‌شود، پس پاسخِ Claude به تأخیر نمی‌افتد. اگر بازبینی مسائلی پیدا کند، Claude با یافته‌ها دوباره پرامپت می‌شود و به‌عنوانِ پیگیری به آن‌ها رسیدگی می‌کند.

این کار مسائلی را می‌گیرد که یک تطبیقِ رشته‌ای نمی‌تواند، مثلِ:

  • دورزدنِ مجوزدهی (Authorization bypass)
  • ارجاع‌های مستقیمِ ناامن به شیء (Insecure direct object references)
  • injection
  • جعلِ درخواستِ سمتِ سرور (Server-side request forgery)
  • رمزنگاریِ ضعیف

هم یافته و هم رفعِ Claude را مستقیماً در نشستِ خود می‌بینی. بازبینی تا ۳۰ فایلِ تغییرکرده در هر نوبت را پوشش می‌دهد و حداکثر سه‌بارِ پشتِ‌سرِ‌هم شلیک می‌کند پیش از اینکه نوبت را به تو بازگرداند.

در هر کامیت یا pushی که Claude می‌زند

Section titled “در هر کامیت یا pushی که Claude می‌زند”

وقتی Claude از طریقِ ابزارِ Bashِ خود git commit یا git push اجرا می‌کند، پلاگین یک بازبینیِ عمیق‌ترِ ایجنتیک از تغییر را در پس‌زمینه اجرا می‌کند. این بازبینی کدِ پیرامون را می‌خواند، از جمله فراخواننده‌ها، sanitizerها، و فایل‌های مرتبط، تا پیش از گزارش‌دادن تصمیم بگیرد که آیا یک یافته واقعی است. این کانتکستِ اضافی، false positiveها را روی الگوهایی که در انزوا خطرناک به‌نظر می‌رسند ولی در کدبیسِ تو امن‌اند، پایین نگه می‌دارد.

این لایه فقط روی کامیت‌ها و pushهایی شلیک می‌شود که Claude از طریقِ ابزارِ Bashِ خود می‌زند. کامیت‌هایی که از shellِ خودت اجرا می‌کنی، از جمله گریزِ shell با ! درونِ یک نشست، بازبینی نمی‌شوند. بازبینی‌های کامیت و push به ۲۰ مورد در هر ساعتِ غلتان محدود می‌شوند. اگر یافته‌های بازبینیِ کامیت با آنچه بازبینیِ پایانِ نوبت پیش‌تر گزارش کرده تکراری باشد، Claude دوباره پرامپت نمی‌شود، پس یک کامیتِ تمیز هیچ خروجیِ دیداری از این لایه تولید نمی‌کند.

استقلال و محدودیت‌های بازبینی

Section titled “استقلال و محدودیت‌های بازبینی”

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

هیچ‌یک از لایه‌ها نوشتن یا کامیت را مسدود نمی‌کنند. یافته‌ها به‌عنوانِ دستور به Claudeِ نویسنده می‌رسند، Claude در گفتگو به آن‌ها رسیدگی می‌کند، و مدلِ بازبین ممکن است مسائلی را از قلم بیندازد. پلاگین را به‌عنوانِ یک لایه از دفاعِ لایه‌لایه ببین، نه یک راهکارِ امنیتیِ کامل. این چطور با سایرِ ابزارهای امنیتی جور درمی‌آید را ببین.

قواعدِ خودت را اضافه کن

Section titled “قواعدِ خودت را اضافه کن”

پلاگین دو نقطه‌ی گسترش دارد: یک فایلِ راهنماییِ Markdown برای بازبینی‌های مدل‌محور، و یک فایلِ الگوی YAML یا JSON برای تطبیقِ رشته‌ای به‌ازای هر ویرایش. هر دو افزایشی‌اند. می‌توانی بررسی اضافه کنی اما نمی‌توانی از این فایل‌ها بررسی‌های داخلی را غیرفعال کنی.

راهنمایی برای بازبینی‌های مدل‌محور اضافه کن

Section titled “راهنمایی برای بازبینی‌های مدل‌محور اضافه کن”

.claude/claude-security-guidance.md را در پروژه‌ات بساز و مدلِ تهدید و چک‌لیستِ بازبینی‌ات را به زبانِ ساده توصیف کن. بازبینی‌های مدل‌محور آن را به‌عنوانِ کانتکستِ اضافی در کنارِ چک‌لیستِ آسیب‌پذیریِ داخلی بارگذاری می‌کنند.

مثالِ زیر برای یک سرویسِ وب با مسیرهای ادمینِ نقش‌محدود و یک سیاستِ لاگ‌گیریِ داده‌ی مشتری است:

# Security guidance for this repo
- Do not log `customer_id` or `account_number` at INFO level or above.
- All routes under `/admin` must call `require_role("admin")` before any database read.
- Use `crypto.timingSafeEqual` for token comparison instead of `===`.

این قواعد راهنمایی برای بازبین‌اند، نه گاردریلِ قطعی. پلاگین تخلف‌ها را به‌عنوانِ یافته برای رفع توسطِ Claude رو می‌کند، اما نوشتن را مسدود نمی‌کند و تضمین نمی‌کند هر تخلفی گرفته شود. راهنمایی فقط افزایشی است: قاعده‌ای که می‌گوید یک دسته‌ی آسیب‌پذیری را نادیده بگیر، آن یافته‌ها را سرکوب نمی‌کند. برای اعمالِ سخت، پلاگین را با یک هوک که ویرایش را مسدود می‌کند یا یک بررسیِ CI جفت کن.

الگوهای سفارشیِ به‌ازای ویرایش اضافه کن

Section titled “الگوهای سفارشیِ به‌ازای ویرایش اضافه کن”

.claude/security-patterns.yaml را بساز تا قواعدِ regex یا زیررشته‌ای به بررسیِ الگوی به‌ازای ویرایش اضافه کنی. این‌ها به‌عنوانِ تطبیق‌های رشته‌ایِ قطعی در کنارِ الگوهای داخلی اجرا می‌شوند:

patterns:
- rule_name: internal_api_key
substrings: ["sk_live_", "AKIA"]
reminder: "Hardcoded API key prefix. Load credentials from the secret manager."
- rule_name: tenant_unfiltered_query
regex: "\\.objects\\.all\\(\\)"
paths: ["**/src/tenants/**"]
reminder: "Multi-tenant code must filter by org_id."
فیلدنوعتوضیح
rule_namestringشناسه‌ای که در هشدار نمایش داده می‌شود
reminderstringمتنِ هشدار که به کانتکستِ Claude چسبانده می‌شود، با سقفِ ۱ کیلوبایت
regexstringregexِ Python که در برابرِ محتوای ویرایش‌شده تطبیق داده می‌شود
substringslistزیررشته‌های عینی؛ این یا regex را بده
pathslistالگوهای globِ اختیاری؛ قاعده فقط روی فایل‌های مطابق اعمال می‌شود. globها در برابرِ مسیرِ کاملِ فایل تطبیق می‌خورند، پس الگوهای نسبت به پروژه را با **/ پیشوند بزن
exclude_pathslistالگوهای globِ اختیاری برای رد کردن؛ همان تطبیقِ paths

پلاگین .claude/security-patterns.yml و .claude/security-patterns.json را هم با همان طرحواره می‌خواند. JSON روی هر نصبِ Python کار می‌کند. شکل‌های YAML نیازمندِ قابلِ import بودنِ PyYAML‌اند، که پلاگین آن را برایت نصب نمی‌کند. پلاگین تا ۵۰ قاعده‌ی سفارشی بارگذاری می‌کند و regexهایی را که مستعدِ catastrophic backtracking به‌نظر می‌رسند رد می‌کند.

مکان‌های جستجوی فایلِ قاعده

Section titled “مکان‌های جستجوی فایلِ قاعده”

پلاگین claude-security-guidance.md و security-patterns.yaml را در همان مکان‌ها جستجو می‌کند، مستقل از اینکه پلاگین چطور فعال شده است:

محدودهمسیرنکات
کاربر~/.claude/claude-security-guidance.mdروی هر پروژه‌ای روی ماشینِ تو اعمال می‌شود
پروژه.claude/claude-security-guidance.mdبا مخزن check in می‌شود
پروژه‌ی محلی.claude/claude-security-guidance.local.mdgitignore‌شده، برای بازنویسی‌های شخصی

پلاگین همه‌ی مکان‌های موجود را بارگذاری و به‌هم پیوست می‌کند، با سقفِ ترکیبیِ ۸ کیلوبایت برای فایلِ راهنمایی. مدیران می‌توانند با push‌کردنِ فایلِ محدوده‌ی کاربر به ~/.claude/ از طریقِ مدیریتِ دستگاه، قواعدِ سطحِ سازمان را توزیع کنند. همان مسیرها برای security-patterns.yaml اعمال می‌شوند.

بررسیِ الگوی به‌ازای ویرایش هیچ فراخوانِ مدل نمی‌زند و هیچ هزینه‌ای اضافه نمی‌کند. بازبینی‌های پایانِ نوبت و کامیت هرکدام استفاده‌ی مدلیِ اضافی خرج می‌کنند که مثلِ هر درخواستِ دیگرِ Claude به استفاده‌ی تو منظور می‌شود. بازبینیِ کامیت ایجنتیک است و ممکن است چند نوبتِ مدلی در هر کامیت بگیرد، با سقفِ ۲۰ بازبینی در هر ساعتِ غلتان. انتظار داشته باش تقریباً یک فراخوانِ بازبینی در هر نوبتی که فایل‌ها را تغییر می‌دهد و یک بازبینیِ عمیق‌تر در هر کامیت، هر دو مشمولِ سقف‌های بالا.

هر دو بازبینیِ مدل‌محور به‌صورتِ پیش‌فرض از Claude Opus 4.7 استفاده می‌کنند. SECURITY_REVIEW_MODEL را برای انتخابِ مدلی متفاوت برای بازبینیِ پایانِ نوبت و SG_AGENTIC_MODEL را برای بازبینیِ کامیت تنظیم کن.

این پلاگین روی همه‌ی پلن‌ها در دسترس است.

غیرفعال‌کردن یا حذفِ نصب

Section titled “غیرفعال‌کردن یا حذفِ نصب”

برای خاموش‌کردنِ لایه‌های منفرد در حالی که بقیه را نگه می‌داری، متغیرِ محیطیِ متناظر را تنظیم کن:

متغیراثر
ENABLE_PATTERN_RULES=0غیرفعال‌کردنِ بررسیِ الگوی به‌ازای ویرایش
ENABLE_STOP_REVIEW=0غیرفعال‌کردنِ بازبینیِ diffِ پایانِ نوبت
ENABLE_COMMIT_REVIEW=0غیرفعال‌کردنِ بازبینیِ کامیت و push
ENABLE_CODE_SECURITY_REVIEW=0غیرفعال‌کردنِ همه‌ی بازبینی‌های مدل‌محور یک‌جا
SECURITY_GUIDANCE_DISABLE=1غیرفعال‌کردنِ کاملِ پلاگین بدونِ حذفِ نصب

برای مکثِ پلاگین در محدوده‌ی کاربرِ تو:

/plugin disable security-guidance@claude-plugins-official

برای حذفِ آن از محدوده‌ی کاربرِ تو:

/plugin uninstall security-guidance@claude-plugins-official

اگر پلاگین از طریقِ .claude/settings.jsonِ یک پروژه فعال شده باشد، غیرفعال‌کردنِ آن از /plugin یک override در .claude/settings.local.jsonِ تو می‌نویسد به‌جای ویرایشِ فایلِ check-in‌شده، پس پلاگین برای تو خاموش می‌ماند در حالی که هم‌تیمی‌هایت تحتِ تأثیر نیستند. اگر از طریقِ managed settings فعال شده باشد، فقط یک مدیر می‌تواند آن را غیرفعال کند.

پلاگین چطور با Claude Code یکپارچه می‌شود

Section titled “پلاگین چطور با Claude Code یکپارچه می‌شود”

پلاگین کاملاً روی هوک‌ها ساخته شده، یعنی سازوکارِ اجرای کدِ خودت در نقاطِ مشخصی از حلقه‌ی Claude. این هوک‌ها را ثبت می‌کند:

رویدادِ هوکهدف
SessionStartراه‌اندازیِ محیطِ Pythonِ پلاگین
UserPromptSubmitگرفتنِ خطِ پایه‌ی درختِ کاری که بازبینیِ پایانِ نوبت در برابرِ آن diff می‌گیرد
PostToolUse روی Edit، Write، و NotebookEditتطبیقِ الگوی به‌ازای ویرایش
Stopبازبینیِ diffِ پایانِ نوبت، که در پس‌زمینه اجرا می‌شود
PostToolUse روی Bash، فیلترشده به git commit و git pushبازبینیِ کامیت و push، که در پس‌زمینه اجرا می‌شود

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

این چطور با سایرِ ابزارهای امنیتی جور درمی‌آید

Section titled “این چطور با سایرِ ابزارهای امنیتی جور درمی‌آید”

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

مرحلهابزارچه چیزی را پوشش می‌دهد
در نشستپلاگینِ راهنماییِ امنیتیآسیب‌پذیری‌های رایج در کدی که Claude می‌نویسد، رفع‌شده در همان نشست
درخواستی/security-reviewیک گذرِ امنیتیِ یک‌باره روی شاخه‌ی فعلی، که وقتی بخواهی اجرا می‌شود
در pull requestCode Review، پلن‌های Team و Enterpriseبازبینیِ چندایجنتیِ درستی و امنیت با کانتکستِ کاملِ کدبیس
در CIتحلیلگرهای ایستا و اسکنرهای وابستگیِ موجودِ توقواعدِ مختصِ زبان، بررسی‌های زنجیره‌ی تأمین، و اعمالِ سیاست که پلاگین تلاشی برایش نمی‌کند

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

پلاگین تشخیص‌های زمانِ اجرا را در ~/.claude/security/log.txt می‌نویسد. اگر بازبینی‌ها ظاهر نمی‌شوند، اول آنجا را بررسی کن.

دلایلِ رایجی که یک لایه‌ی بازبینی بدونِ پیامی در گفتگو رد می‌شود:

  • دایرکتوری یک مخزنِ git نیست: بازبینی‌های پایانِ نوبت و کامیت به وضعیتِ git نیاز دارند و بیرون از یک مخزن رد می‌شوند
  • نشست هیچ احرازِ هویتِ Anthropic ندارد: بازبینی‌های مدل‌محور رد می‌شوند و فقط بررسیِ الگوی به‌ازای ویرایش اجرا می‌شود
  • یک فایلِ security-patterns.yaml هست اما PyYAML قابلِ import نیست: فایل نادیده گرفته می‌شود. به‌جایش از security-patterns.json استفاده کن

برای عمیق‌ترشدن در قطعاتی که این صفحه به آن‌ها می‌پردازد: