بهترین شیوههای امنیتی
تسلط کامل بر سازوکارهای امنیتی Claude Code — کنترل دسترسی، محافظت از فایلهای حساس، رهگیری فرمانها، مدیریت کلید API
به کلید API نیاز دارید؟ ثبتنام ←نقاط پایانی و Base URL ←
در این صفحه
بهترین شیوههای امنیتی¶
Claude Code یک دستیار برنامهنویسی هوش مصنوعی قدرتمند است، اما «قدرتمند» به این معنا هم هست که به دسترسیهای سیستمی بالا نیاز دارد — خواندن و نوشتن فایلها، اجرای فرمانها و دسترسی به شبکه. این مانند دادن دسترسی مدیر به یک کارآموز است: توانمند، اما مرزهای امنیتی ضروریاند.
این سند به شما کمک میکند تا یک دفاع امنیتی جامع ایجاد کنید؛ از استفاده شخصی تا همکاری تیمی، و از محیطهای توسعه تا خودکارسازی CI/CD، تا با خیال راحت از بهرهوری کدنویسی با هوش مصنوعی لذت ببرید بدون اینکه در دامهای امنیتی بیفتید.
درک مدل امنیتی Claude Code¶
Claude Code در ترمینال شما اجرا میشود¶
این نکته حیاتی است و پایه درک همه اقدامات امنیتی را تشکیل میدهد: Claude Code نه در یک سندباکس ابری، بلکه مستقیماً در ترمینال محلی شما اجرا میشود.
این به این معناست:
- میتواند هر فایلی روی دستگاه شما را بخواند (تا زمانی که کاربر شما مجوز داشته باشد)
- میتواند هر فرمان پوسته را اجرا کند
- میتواند به متغیرهای محیطی شما دسترسی داشته باشد (از جمله هر اطلاعات محرمانهای که ممکن است در آنها باشد)
- میتواند دادهها را از طریق شبکه ارسال و دریافت کند
البته Claude Code سازوکارهای امنیتی داخلی برای محدود کردن این تواناییها دارد. اما همیشه باید این واقعیت بنیادین را به یاد داشته باشید: حداکثر مجوزهای آن، مجوزهای کاربر شماست.
سازوکار تأیید دسترسی¶
فلسفه امنیتی اصلی Claude Code حضور انسان در چرخه است. بهطور پیشفرض، پیش از اجرای عملیات زیر تأیید شما را درخواست میکند:
- نخستین استفاده از یک ابزار
- اجرای فرمانهای پوسته (بهویژه فرمانهایی که از پیش تأیید نکردهاید)
- نوشتن فایلهای جدید یا تغییر فایلهای موجود
- دسترسی به منابع شبکه
درخواستهای دسترسی که میبینید تقریباً به این شکلاند:
Claude wants to run: rm -rf node_modules && npm install
Allow?
(y) Yes, allow once
(a) Always allow "npm install" commands
(n) No, deny
اصل کلیدی: اگر مطمئن نیستید که یک عملیات امن است، «No» را انتخاب کنید. همیشه میتوانید بعداً، هنگامی که وضعیت را درک کردید، آن را تأیید کنید.
سه خط دفاعی¶
سیستم امنیتی Claude Code از سه خط دفاعی تشکیل شده است:
First Line: Permission Mode (Global Policy)
↓
Second Line: Allow/Deny Rules (Fine-grained Control)
↓
Third Line: Hooks (Custom Interception Logic)
در ادامه به هر یک از آنها میپردازیم.
پیکربندی مجوزها¶
مقایسه حالتهای مجوز¶
Claude Code شش حالت مجوز ارائه میدهد که تقریباً از بالاترین سطح امنیت به پایینترین مرتب شدهاند:
| حالت | ویرایش فایل | اجرای دستور | موارد استفاده | سطح امنیت |
|---|---|---|---|---|
plan |
ممنوع | ممنوع (فقط خواندنی) | بازبینی کد، تحلیل معماری | بالاترین |
default |
بار اول پرسیده میشود | هر بار پرسیده میشود | توسعه روزمره | بالا |
dontAsk |
فقط از پیش تأییدشده | فقط از پیش تأییدشده | CI/CD، اسکریپتها (فهرست مجاز) | بالا |
acceptEdits |
تأیید خودکار | هر بار پرسیده میشود | وظایفی که نیاز به تغییرات مکرر فایل دارند | متوسط |
auto |
بررسی طبقهبند | بررسی طبقهبند | وظایف طولانی، وقفههای کمتر | متوسط |
bypassPermissions |
تأیید خودکار | تأیید خودکار | کانتینرها/ماشینهای مجازی ایزوله | پایین |
توضیح تفصیلی هر حالت:
حالت plan: Claude فقط میتواند کد را جستوجو و مطالعه کند و نمیتواند هیچ تغییری ایجاد کند. مناسب برای سناریوهایی که میخواهید Claude کد را تحلیل کند اما نمیخواهید به چیزی دست بزند. با Shift+Tab به این حالت تغییر دهید.
حالت default: حالت روزمره پیشنهادی. Claude بار اولی که از نوعی ابزار استفاده میکند میپرسد؛ پس از تأیید شما، عملیات مشابه دوباره پرسیده نمیشوند. دستورهای Shell همیشه نیاز به تأیید دارند.
حالت acceptEdits: به قابلیتهای ویرایش فایل Claude اعتماد کنید اما در مورد اجرای دستور هوشیار بمانید. مناسب برای سناریوهایی که نیاز دارید Claude تغییرات گستردهای در فایلهای کد ایجاد کند اما نمیخواهید دستورهای دلخواه را اجرا کند.
حالت dontAsk: هرگز نمیپرسد؛ هر چیزی که از پیش تأیید نشده باشد (از طریق --allowedTools یا قواعد مجاز) رد میشود. مناسب برای CI و اسکریپتها: رفتار ثابت و قابل بازتولید.
حالت auto: اقداماتی که نیاز به تأیید دارند به یک طبقهبند میروند؛ این طبقهبند موارد خطرناک را مسدود میکند و بقیه را عبور میدهد. از Claude Code 2.1.283، نشستهای تعاملی در حالت auto شروع میشوند؛ از 2.1.285، claude -p که از طریق QCode اجرا میشود نیز زمانی که هیچ حالتی تنظیم نشده باشد در auto شروع میشود. درخواستهای طبقهبند (مدل claude-sonnet-5) در مصرف شما حساب میشوند. به مجوزها مراجعه کنید.
حالت bypassPermissions: همه بررسیهای مجوز را نادیده میگیرد. فقط داخل یک کانتینر یا ماشین مجازی ایزوله از آن استفاده کنید؛ در CI، dontAsk را همراه با فهرست مجاز ترجیح دهید.
مشاهده و تغییر از طریق /permissions¶
میتوانید هر زمان در Claude Code عبارت /permissions را تایپ کنید تا وضعیت فعلی مجوزها را مشاهده کنید:
/permissions
خروجی حالت فعلی، ابزارهای تأییدشده، قواعد مجاز/مسدود و موارد بیشتر را نشان میدهد.
پیکربندی مجوزها در settings.json¶
پیکربندی مجوزها در settings.json ذخیره میشود و به دو سطح تقسیم میگردد:
سطح کاربر (بر همه پروژهها اثر میگذارد): ~/.claude/settings.json
سطح پروژه (فقط بر پروژه فعلی اثر میگذارد): .claude/settings.json
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run lint)",
"Bash(npm run test:*)",
"Bash(git status)",
"Bash(git add:*)",
"Bash(git diff:*)",
"Bash(git log:*)",
"Bash(node:*)",
"Bash(python:*)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(git push --force:*)",
"Bash(curl:*)",
"Bash(wget:*)",
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)"
]
}
}
توضیح نحو قواعد:
| نحو | معنا | مثال |
|---|---|---|
Bash(cmd) |
تطابق دقیق دستور | Bash(npm run lint) |
Bash(cmd:*) |
تطابق پیشوند دستور | Bash(git log:*) با همه دستورهایی که با git log شروع میشوند مطابقت دارد |
Read(path) |
تطابق خواندن فایل | Read(.env) |
Write(path) |
تطابق نوشتن فایل | Write(src/**) |
** |
نویسه جایگزین چندسطحی دایرکتوری | Read(secrets/**) با همه فایلها در همه سطوح زیر secrets مطابقت دارد |
* |
نویسه جایگزین تکسطحی | Read(.env.*) با .env.local، .env.production و غیره مطابقت دارد |
مهم: قواعد مسدود اولویت بالاتری از قواعد مجاز دارند. حتی اگر عملیاتی را در بخش مجاز تأیید کنید، اگر با یک قاعده مسدود هم مطابقت داشته باشد، باز هم رد میشود.
محافظت از فایلهای حساس¶
استفاده از .claudeignore برای کنار گذاشتن پوشههای حساس¶
ساختار فایل .claudeignore همانند .gitignore است. فایلها و پوشههای فهرستشده برای Claude Code بهطور کامل نامرئی هستند:
فایل .claudeignore را در ریشه پروژه ایجاد کنید:
# Environment variables and keys
.env
.env.*
secrets/
*.pem
*.key
*credentials*
# Sensitive configuration
config/production.yml
config/secrets.yml
# Personal data
data/users/
*.sqlite
*.db
# Other sensitive directories
.aws/
.ssh/
.gnupg/
توجه: .claudeignore باعث میشود Claude بهطور کامل نتواند این فایلها را ببیند — حتی نمیداند این فایلها وجود دارند. این کار کاملتر از قواعد Deny است.
استفاده از Hooks برای رهگیری تغییرات در فایلهای حساس¶
اگر میخواهید Claude بتواند فایلهای خاصی را بخواند اما آنها را تغییر ندهد، میتوانید از Hooks برای کنترل دقیق استفاده کنید:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "python3 -c \"\nimport sys, json, os\ntool_input = json.loads(os.environ.get('TOOL_INPUT', '{}'))\npath = tool_input.get('file_path', '') or tool_input.get('path', '')\nprotected = ['.env', 'credentials', 'secret', '.pem', '.key']\nfor p in protected:\n if p in path.lower():\n print(f'BLOCKED: Modification of files containing {p} is not allowed', file=sys.stderr)\n sys.exit(2)\n\""
}
]
}
]
}
}
این Hook مسیر فایل را پیش از تلاش Claude برای نوشتن یا ویرایش فایل بررسی میکند. اگر مسیر شامل کلیدواژههای حساس باشد، عملیات را مسدود میکند (کد خروج 2 به معنای مسدودسازی است).
قالب پیکربندی محافظت¶
برای پروژههای تیمی، توصیه میشود یک فایل پیکربندی امنیتی استاندارد ایجاد کنید که در مخزن ذخیره شود:
// .claude/settings.json (committed to Git)
{
"permissions": {
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)",
"Read(**/*.pem)",
"Read(**/*.key)",
"Write(.git/**)",
"Bash(rm -rf:*)",
"Bash(git push --force:*)",
"Bash(git reset --hard:*)",
"Bash(chmod 777:*)",
"Bash(curl|wget:*)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$TOOL_INPUT\" | python3 -c \"import sys,json; cmd=json.load(sys.stdin).get('command',''); blocked=['DROP TABLE','DELETE FROM','TRUNCATE','password','token','secret']; [sys.exit(2) for b in blocked if b.lower() in cmd.lower()]\""
}
]
}
]
}
}
امنیت اجرای دستور¶
درک رفتار ابزار Bash¶
Claude Code دستورهای شل را از طریق ابزار Bash اجرا میکند. بهطور پیشفرض، بهجز دستورهایی که از قبل تأیید کردهاید، هر اجرا نیازمند تأیید شماست.
چند رفتار قابل توجه:
- دستورها در محیط شل فعلی شما اجرا میشوند
- متغیرهای محیطی برای دستورها قابل مشاهدهاند
- دستورها میتوانند فایلسیستم را تغییر دهند
- دستورها میتوانند نرمافزار نصب کنند
- دستورها میتوانند به شبکه دسترسی داشته باشند
کدام دستورها بهصورت خودکار تأیید میشوند¶
وقتی یک الگوی دستور را به فهرست allow در settings.json اضافه میکنید، دستورهای منطبق بهصورت خودکار و بدون درخواست تأیید اجرا میشوند.
دستورهای ایمن پیشتأییدشده که توصیه میشوند:
{
"permissions": {
"allow": [
"Bash(git status)",
"Bash(git diff:*)",
"Bash(git log:*)",
"Bash(git branch:*)",
"Bash(ls:*)",
"Bash(cat:*)",
"Bash(head:*)",
"Bash(tail:*)",
"Bash(wc:*)",
"Bash(find:*)",
"Bash(grep:*)",
"Bash(npm run lint:*)",
"Bash(npm run test:*)",
"Bash(python -m pytest:*)"
]
}
}
مسدود کردن دستورهای خطرناک¶
دستورهای زیر باید همیشه در فهرست Deny باشند و هرگز اجازه اجرای خودکار نداشته باشند:
{
"permissions": {
"deny": [
"Bash(rm -rf:*)",
"Bash(rm -r /:*)",
"Bash(git push --force:*)",
"Bash(git push -f:*)",
"Bash(git reset --hard:*)",
"Bash(git checkout -- .:*)",
"Bash(git clean -f:*)",
"Bash(chmod 777:*)",
"Bash(chown:*)",
"Bash(dd:*)",
"Bash(mkfs:*)",
"Bash(shutdown:*)",
"Bash(reboot:*)"
]
}
}
مسدودسازی سفارشی دستورها با Hooks¶
برای منطق مسدودسازی پیچیدهتر، از Hooks استفاده کنید:
مثال 1: مسدود کردن همه دستورهای درخواست شبکه
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$TOOL_INPUT\" | python3 -c \"\nimport sys, json\ncmd = json.load(sys.stdin).get('command', '')\nnet_cmds = ['curl', 'wget', 'nc ', 'netcat', 'ssh ', 'scp ', 'rsync']\nfor nc in net_cmds:\n if nc in cmd:\n print(f'BLOCKED: Network commands are not allowed ({nc})', file=sys.stderr)\n sys.exit(2)\n\""
}
]
}
]
}
}
مثال 2: ثبت همه دستورها در گزارش حسابرسی
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$(date '+%Y-%m-%d %H:%M:%S') [Bash] $TOOL_INPUT\" >> ~/.claude/audit.log"
}
]
}
],
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "echo \"$(date '+%Y-%m-%d %H:%M:%S') [FileChange] $TOOL_INPUT\" >> ~/.claude/audit.log"
}
]
}
]
}
}
این به شما یک گزارش حسابرسی کامل از عملیات میدهد که میتوانید هر زمان به آن مراجعه کنید تا ببینید Claude Code چه کاری انجام داده است.
امنیت کلید API¶
کلیدهای API را در CLAUDE.md سختکد نکنید¶
این رایجترین اشتباه امنیتی است. فایل CLAUDE.md معمولاً در مخزن Git کامیت میشود و Claude Code هر بار که شروع به کار میکند آن را میخواند. اگر این فایل شامل کلید API باشد، آنگاه:
- کلید در تاریخچه Git کامیت میشود (حتی اگر بعداً حذف شود)
- کلید برای Claude Code قابل مشاهده است و ممکن است در لاگها یا نتایج تحلیل ظاهر شود
- سایر اعضای تیم همگی میتوانند این کلید را ببینند
روش نادرست:
<!-- CLAUDE.md -->
## API Configuration
Database connection: postgresql://admin:P@ssw0rd@localhost:5432/mydb
OpenAI Key: sk-xxxxxxxxxxxxxxxxxxxx
روش صحیح:
<!-- CLAUDE.md -->
## API Configuration
- Database connection and API Keys are managed via .env file
- .env file is not committed to Git (already in .gitignore)
- New developers need to copy .env.example and fill in their own credentials
استفاده از متغیرهای محیطی برای مدیریت کلید¶
رویکرد پیشنهادی مدیریت کلید:
# .env (not committed to Git)
DATABASE_URL=postgresql://admin:P@ssw0rd@localhost:5432/mydb
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
REDIS_URL=redis://localhost:6379
# .env.example (committed to Git, without actual values)
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
OPENAI_API_KEY=sk-your-key-here
REDIS_URL=redis://localhost:6379
اطمینان حاصل کنید که .env هم در .gitignore و هم در .claudeignore قرار دارد:
# .gitignore
.env
.env.local
.env.production
# .claudeignore (if you don't want Claude to read .env)
.env
.env.*
مراحل اقدام پس از افشای کلید API¶
اگر گمان میکنید کلید API افشا شده است (برای مثال، بهطور تصادفی در Git کامیت شده است)، فوراً مراحل زیر را اجرا کنید:
1. Rotate the key immediately
- Go to the corresponding service's console to generate a new API Key
- Update all environment variables using that Key
2. Remove from Git history
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch .env" \
--prune-empty --tag-name-filter cat -- --all
Or use the safer BFG Repo-Cleaner:
bfg --delete-files .env
git reflog expire --expire=now --all
git gc --prune=now --aggressive
3. Force push the cleaned history
git push --force --all
4. Check for abnormal usage
- Review API usage logs for any abnormal calls
- Check billing records for any abnormal charges
5. Notify the team
- Inform all developers to re-clone the repository
- Update keys in all deployment environments
رهنمودهای امنیتی تیم¶
اشتراکگذاری قالب settings.json¶
یک پیکربندی پایه امنیتی یکپارچه برای تیم بسازید و آن را در .claude/settings.json پروژه ثبت کنید:
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run:*)",
"Bash(git status)",
"Bash(git diff:*)",
"Bash(git log:*)",
"Bash(python -m pytest:*)"
],
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)",
"Read(**/*.pem)",
"Read(**/*.key)",
"Read(**/*credential*)",
"Write(.git/**)",
"Bash(rm -rf:*)",
"Bash(git push --force:*)",
"Bash(git reset --hard:*)",
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(ssh:*)",
"Bash(scp:*)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"$(date -Iseconds) TOOL_USE: $TOOL_INPUT\" >> .claude/audit.log"
}
]
}
]
}
}
اعضای تیم میتوانند پیکربندی شخصی را در ~/.claude/settings.json (سطح کاربر) اضافه کنند، اما قواعد Deny سطح پروژه را نمیتوان لغو کرد.
پیکربندی امنیتی در CI/CD¶
هنگام استفاده از Claude Code در محیطهای CI/CD (حالت بدون رابط)، پیکربندی امنیتی حتی مهمتر است:
# GitHub Actions example
name: AI Code Review
on: [pull_request]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Claude Code Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
claude --print --permission-mode dontAsk \
--allowedTools "Read,Glob,Grep,Bash(git diff *)" \
"Please review the code changes in this PR, providing feedback on security and code quality" \
< /dev/null
ملاحظات امنیتی CI/CD:
| مورد | توضیح |
|---|---|
| مدیریت کلید API | از Secrets پلتفرم CI/CD (مانند GitHub Secrets) استفاده کنید؛ آن را سختکد نکنید |
| کمترین سطح دسترسی | Claude Code در محیطهای CI باید فقط مجوزهای فقطخواندنی داشته باشد و نباید کد را تغییر دهد |
| جداسازی شبکه | دسترسی شبکه خروجی را برای محیطهای CI محدود کنید |
| تنظیمات مهلت زمانی | محدودیتهای زمانی منطقی برای اجرا تعیین کنید تا از اجراهای غیرعادی طولانی جلوگیری شود |
| پاکسازی لاگ | اطمینان حاصل کنید که اطلاعات حساس در لاگهای CI قرار نمیگیرد |
ملاحظات امنیتی حالت بدون رابط¶
حالت بدون رابط (--print یا -p) برای سناریوهای غیرتعاملی به کار میرود که هیچ انسانی در چرخه برای تأیید عملیات حضور ندارد. هنگام استفاده از آن، دقت بیشتری لازم است:
# Set the permission mode explicitly: without one (since 2.1.285) it defaults to auto
# Read-only analysis: in dontAsk, anything not approved is denied
claude --print --permission-mode dontAsk "Analyze the code structure in the src/ directory"
# For write operations, pre-approve only the tools you need (naming a file in the prompt is not a security boundary)
claude --print --permission-mode dontAsk --allowedTools "Read,Edit" "Fix the type error in src/utils.py"
# Be clearly aware of the risks when using --dangerously-skip-permissions; use it only in an isolated container
claude --print --dangerously-skip-permissions "Run npm test"
دلیل اینکه --dangerously-skip-permissions چنین نام پارامتر طولانیای دارد، یادآوری این نکته است: نادیده گرفتن بررسیهای مجوز خطرناک است. فقط زمانی از آن استفاده کنید که کاملاً بر prompt ورودی کنترل دارید و عملیات ممکن را بهطور کامل درک میکنید.
امنیت سازمانی¶
کنترل دسترسی شبکه¶
اگر سازمان شما سیاستهای امنیتی شبکه سختگیرانهای دارد، میتوانید دسترسی شبکه Claude Code را به روشهای زیر کنترل کنید:
1. پیکربندی پروکسی
پروکسی HTTP را از طریق متغیرهای محیطی تنظیم کنید تا همه درخواستهای شبکه برای ممیزی و کنترل آسانتر از پروکسی عبور کنند:
# Set in .bashrc or .zshrc
export HTTP_PROXY=http://proxy.company.com:8080
export HTTPS_PROXY=http://proxy.company.com:8080
export NO_PROXY=localhost,127.0.0.1,.company.com
2. قواعد فایروال
در فایروال سازمانی، میتوانید به Claude Code اجازه دهید فقط به دامنههای ضروری دسترسی داشته باشد:
# Domains that must be allowed
api.anthropic.com # Anthropic API
*.claude.ai # Claude services
# Optional allows (based on features used)
registry.npmjs.org # npm package installation
pypi.org # Python package installation
github.com # Git operations
3. غیرفعالکردن فرمانهای شبکه در settings.json
بهعنوان یک لایه امنیتی اضافی، ابزارهای شبکه رایج را در قواعد Deny مسدود کنید:
{
"permissions": {
"deny": [
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(nc:*)",
"Bash(ssh:*)",
"Bash(scp:*)",
"Bash(rsync:*)",
"Bash(ftp:*)",
"Bash(telnet:*)"
]
}
}
ممیزی گزارشها¶
برای سازمانهایی با الزامات انطباق بیشتر، توصیه میشود یک سیستم کامل ثبت گزارش ممیزی ایجاد کنید:
1. گزارشهای عملیات
همه فراخوانیهای ابزار را از طریق Hooks ثبت کنید:
{
"hooks": {
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "python3 -c \"\nimport json, os, datetime\nlog_entry = {\n 'timestamp': datetime.datetime.now().isoformat(),\n 'user': os.environ.get('USER', 'unknown'),\n 'tool': os.environ.get('TOOL_NAME', 'unknown'),\n 'input': os.environ.get('TOOL_INPUT', '')[:500]\n}\nwith open(os.path.expanduser('~/.claude/audit.jsonl'), 'a') as f:\n f.write(json.dumps(log_entry, ensure_ascii=False) + '\\n')\n\""
}
]
}
]
}
}
2. گزارشهای نشست
خود Claude Code تاریخچه نشست را نگه میدارد که در پوشه ~/.claude/ ذخیره میشود. سازمانها میتوانند بهصورت دورهای از این گزارشها پشتیبان بگیرند.
3. ردیابی تغییرات
همراه با Git، همه تغییرات فایل دارای سوابق ردیابی کامل هستند. توصیه میشود تغییرات Claude Code روی شاخههای جداگانه انجام شود و از طریق فرایند PR ادغام شوند.
ملاحظات انطباق¶
استفاده از ابزارهای برنامهنویسی با هوش مصنوعی ممکن است شامل مسائل انطباق زیر باشد:
امنیت داده
| ریسک | اقدامات کاهشدهنده |
|---|---|
| بارگذاری کد در ابر | Claude Code کد شما را به سرورهای Anthropic بارگذاری نمیکند (بهجز زمینه در درخواستهای API) |
| افشای دادههای حساس | از .claudeignore برای حذف فایلهای حساس استفاده کنید؛ خواندن .env و فایلهای کلید را در قواعد Deny مسدود کنید |
| اطلاعات حساس در درخواستهای API | از چسباندن گذرواژهها، توکنها و سایر اطلاعات حساس در گفتگوها خودداری کنید |
مالکیت فکری
- خروجیهای Claude Code (کد تولیدشده) متعلق به کاربر است
- توجه داشته باشید که کد تولیدشده ممکن است محتوای دارای حق نسخهبرداری داشته باشد
- برای کدهای حیاتی کسبوکار، بازبینی انسانی پیش از استفاده توصیه میشود
انطباق صنعتی
- صنایع تحت مقررات مانند مالی و بهداشت و درمان ممکن است محدودیتهای بیشتری برای استفاده از هوش مصنوعی داشته باشند
- تأیید کنید که آیا سازمان شما سیاستهایی درباره استفاده از ابزارهای هوش مصنوعی دارد
- برای برآوردهکردن الزامات بازبینی انطباق، گزارشهای ممیزی را نگه دارید
مرجع سریع پیکربندی امنیتی¶
در پایان، این هم یک چکلیست مرجع سریع برای پیکربندی امنیتی:
حداقل پیکربندی امنیتی برای توسعهدهندگان فردی¶
{
"permissions": {
"deny": [
"Read(.env)",
"Read(.env.*)",
"Bash(rm -rf:*)",
"Bash(git push --force:*)"
]
}
}
پیکربندی پیشنهادی برای پروژههای تیمی¶
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run:*)",
"Bash(git status)",
"Bash(git diff:*)",
"Bash(git log:*)"
],
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)",
"Read(**/*.pem)",
"Write(.git/**)",
"Bash(rm -rf:*)",
"Bash(git push --force:*)",
"Bash(git reset --hard:*)",
"Bash(curl:*)",
"Bash(wget:*)"
]
}
}
پیکربندی سازمانی با امنیت بالا¶
{
"permissions": {
"defaultMode": "default",
"allow": [
"Bash(npm run lint)",
"Bash(npm run test)",
"Bash(git status)",
"Bash(git diff)"
],
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(secrets/**)",
"Read(**/*.pem)",
"Read(**/*.key)",
"Read(**/*credential*)",
"Read(**/*password*)",
"Write(.git/**)",
"Write(.github/**)",
"Bash(rm:*)",
"Bash(git push:*)",
"Bash(git reset:*)",
"Bash(git checkout -- :*)",
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(ssh:*)",
"Bash(scp:*)",
"Bash(nc:*)",
"Bash(python -c:*)",
"Bash(node -e:*)",
"Bash(eval:*)",
"Bash(exec:*)",
"Bash(sudo:*)",
"Bash(chmod:*)",
"Bash(chown:*)"
]
},
"hooks": {
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "python3 -c \"import json,os,datetime; f=open(os.path.expanduser('~/.claude/audit.jsonl'),'a'); f.write(json.dumps({'ts':datetime.datetime.now().isoformat(),'user':os.environ.get('USER','?'),'tool':os.environ.get('TOOL_NAME','?'),'input':os.environ.get('TOOL_INPUT','')[:500]},ensure_ascii=False)+'\\n'); f.close()\""
}
]
}
]
}
}
پرسشهای متداول¶
پرسش: آیا Claude Code کد من را به سرورهای Anthropic میفرستد؟
پاسخ: Claude Code از طریق API با Anthropic ارتباط برقرار میکند و زمینه گفتگو (شامل قطعهکدهایی که به آنها ارجاع میدهید) بهعنوان بخشی از درخواستهای API ارسال میشود. با این حال، Anthropic از دادههای ارسالشده از طریق API برای آموزش مدلها استفاده نمیکند (بر اساس شرایط استفاده از سرویس Anthropic). اگر از Claude Code از طریق یک سرویس پراکسی مانند QCode استفاده میکنید، لطفاً به سیاست حریم خصوصی آن سرویس مراجعه کنید.
پرسش: آیا Claude میتواند قواعد Deny را در settings.json دور بزند؟
پاسخ: در استفاده عادی، خیر. قواعد Deny در سطح سیستم اعمال میشوند و Claude نمیتواند از طریق مهندسی prompt یا روشهای دیگر آنها را دور بزند. با این حال، اگر بهصورت دستی حالت bypassPermissions را انتخاب کنید یا از پارامتر --dangerously-skip-permissions استفاده کنید، این قواعد دیگر اعمال نمیشوند.
پرسش: تفاوت بین .claudeignore و قواعد Deny چیست؟
پاسخ: .claudeignore باعث میشود Claude کاملاً از وجود فایلها بیخبر باشد (مشابه کاری که .gitignore برای Git انجام میدهد)، در حالی که قواعد Deny وقتی Claude تلاش میکند به فایلها دسترسی پیدا کند، دسترسی را رد میکنند. اگر نمیخواهید Claude بداند فایلهای خاصی وجود دارند، از .claudeignore استفاده کنید؛ اگر فقط نمیخواهید آنها را تغییر دهد، از قواعد Deny استفاده کنید.
پرسش: در همکاری چندنفره، اگر هر فرد settings.json متفاوتی داشته باشد، چه اتفاقی میافتد؟
پاسخ: فایل .claude/settings.json در سطح پروژه در Git ثبت میشود و تضمین میکند که تیم یک خط پایه امنیتی یکپارچه داشته باشد. افراد میتوانند پیکربندی اضافی را در ~/.claude/settings.json شخصی خود اضافه کنند، اما نمیتوانند قواعد Deny در سطح پروژه را بازنویسی کنند.
پرسش: آیا استفاده از Claude Code داخل یک کانتینر Docker امنتر است؟
پاسخ: بله. Docker یک لایه جداسازی اضافی فراهم میکند، بنابراین حتی اگر Claude Code عملیات غیرمنتظرهای انجام دهد، تأثیر آن درون کانتینر محدود میشود. روشهای پیشنهادی در کانتینرها: استفاده از mountهای فقطخواندنی برای دایرکتوریهای کد منبع، محدود کردن دسترسی به شبکه، اجرا با کاربر غیر root.
امنیت MCP و ایزولهسازی¶
MCP (Model Context Protocol) به Claude Code اجازه میدهد به ابزارها و منابع داده خارجی — پایگاههای داده، APIها، سیستمهای فایل، سرویسهای شخص ثالث و موارد دیگر — متصل شود. این کار قابلیتهای آن را بسیار گسترش میدهد، اما دسته جدیدی از ریسک امنیتی را نیز معرفی میکند: هر سرور MCP که اضافه میکنید، قطعهای از کد شخص ثالث و مجوزهای ابزاری را که اعلام میکند به مرز اعتماد شما وارد میکند. برای نحوه پیکربندی و استفاده از MCP، به پیکربندی سرور MCP مراجعه کنید؛ این بخش بر امنیت تمرکز دارد.
ریسکهای اصلی ناشی از MCP¶
- خروج غیرمجاز داده: یک سرور MCP مخرب یا در معرض نفوذ قرار گرفته میتواند آنچه را که در اختیارش میگذارید (کد، فایلها، زمینه گفتگو) بخواند و بیسروصدا آن را به مقصدی خارجی بفرستد.
- مسمومسازی ابزار: یک سرور دستورهای پنهان را در توضیحات/فراداده یک ابزار جای میدهد تا مدل را به اقدامات ناخواسته بکشاند — نوعی تزریق prompt که فراخوانیهای ابزار هوش مصنوعی را هدف میگیرد.
- نشت اعتبارنامه: اگر سرور به متغیرهای محیطی یا فایلهای محرمانه دسترسی داشته باشد، ممکن است کلیدهای API، توکنها و دیگر اعتبارنامههای حساس را سرقت کند.
- قدرت بیشازحد ابزار: سروری که ابزارهای تخریبگر مانند «حذف»، «نوشتن» یا «اجرای دستورها» را اعلام میکند، اگر از کنترل خارج شود میتواند آسیب جبرانناپذیری وارد کند.
اقدامات کاهش خطر¶
- نصب فقط از منابع مورد اعتماد: سرورهای MCP را فقط از منابع رسمی یا ممیزیشده نصب کنید و قابلیت اعتماد آنها را همانند هر وابستگی شخص ثالث ارزیابی کنید.
- بررسی دامنههای ابزار هر سرور: پیش از اتصال، هر ابزاری را که سرور اعلام میکند و کاری که هرکدام میتواند انجام دهد بررسی کنید و با «خواندن»، «نوشتن» و «اجرا» با سطوح مختلف احتیاط برخورد کنید.
- حفظ دروازههای تأیید انسانی: Claude Code پیش از فراخوانی یک ابزار از شما تأیید میگیرد. برای عملیات تخریبگر و ابزارهایی که با اعتبارنامهها سروکار دارند، بهصورت یکجا تأیید نکنید — تأیید بهازای هر بار استفاده را حفظ کنید.
- مسدود کردن دسترسی به اطلاعات محرمانه از طریق محیط ایزوله: از پیکربندی
sandbox.credentialsاستفاده کنید تا فرمانهای داخل محیط ایزوله نتوانند متغیرهای محیطی و فایلهای محرمانه را بخوانند، بهطوریکه حتی یک ابزار مسموم هم نتواند اعتبارنامهها را به دست آورد. - کمترین سطح دسترسی: به هر سرور MCP فقط حداقل مجموعه ابزارها و دامنه دسترسی لازم برای انجام کارش را بدهید — برای راحتی همهچیز را باز نکنید.
- ممیزی و ثبت گزارش: فراخوانیهای ابزار را ثبت کنید و بهطور دورهای بررسی کنید کدام سرورها فراخوانی میشوند و چه کردند، تا رفتار غیرعادی زودتر آشکار شود.
با هر سرور MCP مانند یک پیمانکار خارجی رفتار کنید که با جعبهابزار خودش وارد میشود — ابتدا هویت او را تأیید کنید، سپس محدود کنید که به چه چیزهایی میتواند دست بزند و حق تأیید هر اقدام را برای خود نگه دارید. اینگونه از قابلیتهای گستردهتر MCP بهرهمند میشوید و در عین حال مرز امنیتی خود را حفظ میکنید.
با QCode شروع کنید
یک کلید API برای Claude Code، Codex و بیشتر — بر اساس توکن، قیمت هر مدل در qcode.cc/models