آنچه از یک فضای کاری محافظت میکند، ساده و بیتعارف.
نه گواهینامهای که نداریم، نه صفتی بهجای کنترل. اینجا میبینید چه چیزی اعمال میشود، کجا اعمال میشود، و چه چیزی کم است.
جداسازی ساختاری است، نه نظارتی.
هر پرسوجو روی دادهٔ متعلق به یک فضای کاری، شناسهٔ آن فضا را در شرطش دارد. مسیر دسترسی بدون این محدودیت وجود ندارد که کسی یادش برود از آن استفاده کند.
خرابیای که این طراحی حذفش میکند همان خرابی همیشگی است: سامانهای درست، که در آن یک اندپوینت تازه که با عجله نوشته شده یک شرط WHERE را جا انداخته. اگر لایهٔ داده به پرسشی که نام فضای کاری در آن نیست پاسخ ندهد، آن اندپوینت به یک نشتی کامپایل نمیشود — اصلاً کامپایل نمیشود.
آزمونهای نشتِ خصمانه این ویژگی را تثبیت میکنند، بهجای اینکه به قرارداد نانوشته اعتماد شود؛ چون یک قرارداد نانوشته فقط بهاندازهٔ آخرین کسی که فایل را خوانده معتبر است.
internal/tenancy · migrations/0002
گزارش ممیزی در پایگاه داده فقط-افزودنی است، نه در برنامه.
یک تریگر روی هر بهروزرسانی یا حذف خطا میدهد. برنامهای که تصمیم میگیرد تاریخ را بازنویسی نکند یک سیاست است؛ پایگاه دادهای که از آن سر باز میزند یک کنترل است.
این همان تفاوتی است که حسابرس دربارهٔ آن میپرسد و فروشنده معمولاً پاسخی ندارد. اگر تنها چیزی که جلوی ویرایش عطفبهماسبق را میگیرد این باشد که هیچ مسیری در کد چنین کاری نمیکند، آنگاه یک اسکریپت پشتیبانی، یک مهاجرت پایگاه داده یا اپراتوری با یک کنسول میتواند این کار را بکند و گزارش هرگز نمیفهمد.
internal/tenancy · migrations/0002 audit_log_immutable()
کلیدها بدون قطعی چرخش میکنند. ورود در برابر فیشینگ مقاوم است.
چرخشی که به پنجرهٔ تعمیرات نیاز دارد، چرخشی است که انجام نمیشود.
- 01
شناسهٔ کلید، با اعتبار همپوشان
کلیدهای API و کلیدهای امضای وبهوک هر فضای کاری یک شناسهٔ کلید دارند. در طول چرخش هر دو معتبرند، پس با برنامهٔ زمانی خودتان جابهجا میشوید و بعد کلید قدیمی را باطل میکنید.internal/tenancy · internal/outbox/sign.go
- 02
پسکی برای اعضا و برای اپراتورها
WebAuthn با احراز کاربر و اجبار به اعتبارنامهٔ قابلکشف — نه اختیاری، چون این کلیدها جلوی یک جریان پولی نشستهاند. ورود قابلکشف حساب را از روی خودِ اعتبارنامه پیدا میکند، پس چیزی تایپ نمیشود و چیزی برای فیشینگ باقی نمیماند.internal/passkey
- 03
دو-عاملی با اپلیکیشن، ذخیرهشده به شکل درست
راز TOTP را نمیشود هش کرد — تأیید، کدها را دوباره از روی آن میسازد — پس رازهای اعضا با AES-256-GCM و زیرکلیدی مخصوص همان کاربرد مهر و موم میشوند، نه اینکه آشکار ذخیره شوند. شمارندهٔ هر کد پذیرفتهشده بازنوشته میشود، پس یک کد را نمیشود درون پنجرهٔ اعتبارش دوباره استفاده کرد.internal/membertotp · internal/secretbox
- 04
هرجا میشود هش، هرجا نمیشود مهر و موم
رمز عبور یا کد بازیابی هش میشود، چون پلتفرم فقط باید بتواند بگوید «همین است یا نه؟». رازی که پلتفرم باید دوباره بخواندش مهر و موم میشود، و انبارهایی که پیش از این ساختار ساخته شدهاند در حال انتقال به آناند، نه اینکه به حال خود رها شوند.internal/secretbox
هیچ چیز از دل نشانیای که شما تنظیم کردهاید بیرون نمیرود.
مقصد یک وبهوک ذاتاً ورودیای است که مهاجم میتواند بر آن اثر بگذارد — نشانیای است که یک فضای کاری تایپ میکند و پلتفرم بعد آن را از درون شبکهٔ خودش فراخوانی میکند.
توزیعکننده پیش از ارسال درخواست یک نگهبان خروج اجرا میکند بهجای آنکه به نام میزبان اعتماد کند، و این تنها ترتیبی است که به کار میآید: بررسیای که پس از تفکیک نام انجام شود، یا روی رشته بهجای روی خودِ نشانی، همان بررسیای است که حملهٔ بازپیوند DNS برای عبور از آن ساخته شده. مقصدهای لوکال و شبکهٔ خصوصی فقط در محیط آزمایشی و اجراهای سرتاسری مجازند، و این تخفیف یک پرچم صریح است، نه حدسزدن محیط.
internal/outbox/ssrf.go · internal/outbox/dispatcher.go
ما امین دارایی نیستیم، و کد از تبدیلشدن به آن سر باز میزند.
نه وجوه اعضا. نه کلید خصوصی. نه اعتبارنامهٔ پلتفرم درون مسیر پرداخت یک فضای کاری.
اعضا به شما پرداخت میکنند
internal/rails
پیکربندی، مالِ ما را رد میکند
internal/rails
برداشت دستور میدهد، پول را جابهجا نمیکند
internal/claims
احراز هویت بدون نگهداشتن مدرک.
نشست ارائهدهنده روی حساب خودِ شما اجرا میشود. آنچه برمیگردد یک تصمیم است و یک شناسهٔ برگشتناپذیر.
این شناسه فقط برای اعمال قاعدهٔ «یک نفر، یک جایگاه» کافی است و نه بیشتر. برای بازسازی یک هویت کافی نیست، و نکته دقیقاً همین است: امنترین راه نگهداری اسکن گذرنامه، نگهنداشتن آن است، و یک نشت نمیتواند دادهای را افشا کند که هرگز ذخیره نشده.
internal/verification
چیزهایی که ادعایش را نداریم.
اگر دارید پرسشنامهٔ ارزیابی تأمینکننده را پر میکنید، اینها سطرهاییاند که در آنها رد میشویم. بهتر است اینجا بدانید تا در ماه چهارم.
See /contact#security
پرسشنامه را بفرستید، یا یک محیط آزمایشی بردارید و خودتان ببینید.
هر دو خوب است. یکیشان سریعتر است.