گرفتنِ مسائلِ امنیتی همزمان با نوشتنِ کد توسطِ Claude
پلاگینِ security-guidance را نصب کن تا Claude تغییرهای کدِ خودش را از نظرِ آسیبپذیری بازبینی کند و در همان نشست رفعشان کند.
پلاگینِ راهنماییِ امنیتی کاری میکند که Claude در حینِ کار، تغییرهای کدِ خودش را از نظرِ آسیبپذیریهای رایج بازبینی کند و آنچه پیدا میکند را در همان نشست رفع کند. این پلاگین مسائلی مثلِ injection، deserializationِ ناامن، و APIهای ناامنِ DOM را پیش از رسیدنِ کد به یک pull request میگیرد و اینطور کم میکند که چقدر بازبینیِ امنیتی به بازبینان انسانیِ پاییندست میافتد.
بهمحضِ نصب، پلاگین بهصورتِ خودکار اجرا میشود. چیزی برای فراخوانی نیست و فرمانِ جداگانهای نیست که به یاد بسپاری.
این پلاگین همراهِ در-نشستِ Code Review است، که روی pull requestها اجرا میشود. این پلاگین آنچه به PR میرسد را کم میکند. Code Review آنچه میرسد را میگیرد. برای اینکه پلاگین چطور با بازبینیِ درخواستی و اسکنِ CI لایه میشود، این چطور با سایرِ ابزارهای امنیتی جور درمیآید را ببین.
پیشنیازها
Section titled “پیشنیازها”- 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 باشد و در غیرِ این صورت به همان شکل عقبنشینی میکند.
نصبِ پلاگین
Section titled “نصبِ پلاگین”در یک نشستِ 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 را در سه نقطه بازبینی میکند، هرکدام در عمقی متفاوت:
- در هر ویرایشِ فایل: یک تطبیقِ سریعِ الگو برای فراخوانهای پرخطر، بدونِ فراخوانِ مدل
- در پایانِ هر نوبت: یک بازبینیِ مدلیِ پسزمینه روی هرآنچه آن نوبت تغییر داده
- در هر کامیت یا pushی که Claude میزند: یک بازبینیِ عمیقترِ ایجنتیک که کدِ پیرامون را میخواند
میتوانی هر لایه را با افزودنِ قواعدِ خودت گسترش دهی. بررسیهای داخلی را نمیتوان جداگانه حذف کرد، اما میتوانی هر لایه را مستقل غیرفعال کنی.
در هر ویرایشِ فایل
Section titled “در هر ویرایشِ فایل”وقتی Claude در یک فایل مینویسد، پلاگین محتوای جدید را برای الگوهای پرخطرِ شناختهشده اسکن میکند. این یک تطبیقِ الگوست بدونِ فراخوانِ مدل، پس هیچ هزینهی استفادهای اضافه نمیکند.
نمونهی دستههای الگو:
- اجرای پویای کد:
eval(،new Function،os.system،child_process.exec - deserializationِ ناامن:
pickle - تزریقِ DOM:
dangerouslySetInnerHTML،.innerHTML =،document.write - فایلهای ورکفلو: ویرایشهای زیرِ
.github/workflows/، که میتوانند دسترسیهای سطحِ مخزن بدهند
این بررسی پس از نشستنِ ویرایش اجرا میشود و هشدار را به کانتکستِ Claude برای گامِ بعدی میچسباند. هر هشدار بهازای هر الگو بهازای هر فایل بهازای هر نشست یکبار شلیک میشود، پس تطابقهای تکراری در همان فایل گفتگو را سیل نمیکنند.
میتوانی با یک فایلِ security-patterns.yaml، الگوهای خودت را به این لایه اضافه کنی.
در پایانِ هر نوبت
Section titled “در پایانِ هر نوبت”یک نوبت یک دورِ پاسخِ 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_name | string | شناسهای که در هشدار نمایش داده میشود |
reminder | string | متنِ هشدار که به کانتکستِ Claude چسبانده میشود، با سقفِ ۱ کیلوبایت |
regex | string | regexِ Python که در برابرِ محتوای ویرایششده تطبیق داده میشود |
substrings | list | زیررشتههای عینی؛ این یا regex را بده |
paths | list | الگوهای globِ اختیاری؛ قاعده فقط روی فایلهای مطابق اعمال میشود. globها در برابرِ مسیرِ کاملِ فایل تطبیق میخورند، پس الگوهای نسبت به پروژه را با **/ پیشوند بزن |
exclude_paths | list | الگوهای 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.md | gitignoreشده، برای بازنویسیهای شخصی |
پلاگین همهی مکانهای موجود را بارگذاری و بههم پیوست میکند، با سقفِ ترکیبیِ ۸ کیلوبایت برای فایلِ راهنمایی. مدیران میتوانند با pushکردنِ فایلِ محدودهی کاربر به ~/.claude/ از طریقِ مدیریتِ دستگاه، قواعدِ سطحِ سازمان را توزیع کنند. همان مسیرها برای security-patterns.yaml اعمال میشوند.
هزینهی استفاده
Section titled “هزینهی استفاده”بررسیِ الگوی بهازای ویرایش هیچ فراخوانِ مدل نمیزند و هیچ هزینهای اضافه نمیکند. بازبینیهای پایانِ نوبت و کامیت هرکدام استفادهی مدلیِ اضافی خرج میکنند که مثلِ هر درخواستِ دیگرِ 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 request | Code Review، پلنهای Team و Enterprise | بازبینیِ چندایجنتیِ درستی و امنیت با کانتکستِ کاملِ کدبیس |
| در CI | تحلیلگرهای ایستا و اسکنرهای وابستگیِ موجودِ تو | قواعدِ مختصِ زبان، بررسیهای زنجیرهی تأمین، و اعمالِ سیاست که پلاگین تلاشی برایش نمیکند |
هر مرحلهی بعدی آنچه را که مراحلِ پیشین از قلم انداختهاند میگیرد. ارزشِ پلاگین کاهشِ حجمی است که به آنها میرسد، نه حذفِ نیاز به آنها.
عیبیابی
Section titled “عیبیابی”پلاگین تشخیصهای زمانِ اجرا را در ~/.claude/security/log.txt مینویسد. اگر بازبینیها ظاهر نمیشوند، اول آنجا را بررسی کن.
دلایلِ رایجی که یک لایهی بازبینی بدونِ پیامی در گفتگو رد میشود:
- دایرکتوری یک مخزنِ git نیست: بازبینیهای پایانِ نوبت و کامیت به وضعیتِ git نیاز دارند و بیرون از یک مخزن رد میشوند
- نشست هیچ احرازِ هویتِ Anthropic ندارد: بازبینیهای مدلمحور رد میشوند و فقط بررسیِ الگوی بهازای ویرایش اجرا میشود
- یک فایلِ
security-patterns.yamlهست اما PyYAML قابلِ import نیست: فایل نادیده گرفته میشود. بهجایش ازsecurity-patterns.jsonاستفاده کن
منابعِ مرتبط
Section titled “منابعِ مرتبط”برای عمیقترشدن در قطعاتی که این صفحه به آنها میپردازد:
- Code Review: بازبینیِ چندایجنتیِ زمانِ PR را راهاندازی کن
- خودکارسازیِ اقدامها با هوکها: بررسیهای خودت را در همان نقاطِ چرخهی عمر بساز
- کشف و نصبِ پلاگینها: سایرِ پلاگینهای رسمی را مرور کن