Shen-Backpressure: کنترل دسترسی تضمینی در کد تولیدی هوش مصنوعی
خلاصهٔ کاملتر
شکستهشدن کنترل دسترسی (Broken Access Control) هنوز رتبه اول OWASP Top 10 رو داره — نه بهخاطر اینکه کسی موافق اشتراکگذاری داده بین تنانتهاست، بلکه چون این قوانین در جای اشتباهی از سیستم نگهداری میشن: توی پرامپت، توی چکلیست ریویو، توی انتظار مشترکی که هر مهندس جدید — یا هر بار فراخوانی مدل — اون رو بهدرستی اعمال کنه. با AI که بیشتر کدها رو مینویسه، این انتظار کاملاً شکست میخوره.
نویسنده بین دو نوع gate تمایز میذاره: behavioral gates (دستورالعملهای پرامپتی مثل «احراز هویت رو فراموش نکن») و structural gates (کامپایلر، type checker، linter). تفاوت اصلی اینه که structural gate یه جواب قطعی درباره کد جلوی خودش میده — نه وابسته به اینکه مدل قانون رو بهیاد بیاره. وقتی gate شکست میخوره، خروجیش مستقیم وارد iteration بعدی loop میشه و این همون «backpressure» معناشه.
Shen-Backpressure از زبان Shen — یه Lisp ایستا با سیستم تایپ مبتنی بر sequent calculus — استفاده میکنه تا قوانین امنیتی رو بهشکلی بنویسی که ماشین بتونه بررسیشون کنه. بعد ابزار shengen این spec رو به «guard type»های زبان هدف تبدیل میکنه. مثلاً برای auth چندتنانتی، زنجیره اثبات اینطوریه: jwt-token → authenticated-user → tenant-access → resource-access. هر حلقه از این زنجیر باید ثابت بشه تا بشه حلقه بعدی رو ساخت.
در Go، فیلدهای guard type عمداً unexported هستن، یعنی تنها راه ساختن یه TenantAccess معتبر، صدازدن constructor رسمیشه — که خودش چک عضویت رو اجرا میکنه. handler دیگه نیازی به if جداگانه برای بررسی دسترسی نداره؛ مقداری که بهش میرسه از قبل «اثباتشده» است:
func (h *Handler) ListResources(w http.ResponseWriter, r *http.Request) {
access, err := shenguard.NewTenantAccess(authUser, tenantID, isMember)
if err != nil {
http.Error(w, "forbidden", http.StatusForbidden)
return
}
resources := h.db.GetResources(access.TenantID())
// ...
}اگه مدل سعی کنه این زنجیر رو دور بزنه و مستقیم یه مقدار خام بفرسته، بیلد fail میشه — قبل از اینکه هیچ باینریای تولید بشه. این همون «no» کوتاه و مکانیکیه که نویسنده میخواد بهجای پاراگرافهای پرامپت ببینه.
این رویکرد محدودیتهای واضحی هم داره: نوشتن spec هزینه داره، کد generated شده مقدسه (دستی ویرایشش کنی، audit gate رد میکنه)، و در Go کد داخل خود guard package میتونه تئوری مقادیر جعلی بسازه. ادعا این نیست که bypass کردن «غیرممکن» میشه، بلکه اینه که از روی غفلت و تصادف عملاً غیرممکن میشه — و برای کدهای تولیدی با هوش مصنوعی، این تفاوت خیلی مهمه.
نکات کلیدی:
- کنترل دسترسی شکسته هنوز رتبه اول OWASP هست و پرامپتدادن به مدل برای حل این مشکل کافی نیست
- Shen-Backpressure با نوشتن spec در زبان Shen و تولید guard type در زبان هدف، قوانین امنیتی رو به بستر کامپایلر منتقل میکنه
- زنجیره اثبات (jwt-token → authenticated-user → tenant-access → resource-access) مطمئن میشه که هر مرحله احراز هویت واقعاً طی شده
- شکست gate بهصورت خودکار وارد iteration بعدی loop هوش مصنوعی میشه — این همون backpressure واقعیه
- ادعا اینه که مدل بهتر کافی نیست؛ بستر ساختاری قویتر بیشتر اهمیت داره
- Go و TypeScript هدفهای اصلی فعلی هستن و ابزار sb CLI نصب و راهاندازیشو آسون میکنه




