ایزوله بودن دادههای هر مشتری
یکی از رایجترین نگرانیها دربارهی هر سرویس چند-مستأجری این است: «آیا دادهی من ممکن است دست مشتری دیگری بیفتد؟» در میراکل، جواب این نگرانی فقط یک قول نیست؛ دو لایهی مستقل از هم آن را تضمین میکنند.
لایهی اول: فیلتر در کد برنامه
هر درخواستی که به سرور میرسد، بر اساس کلید API یا حساب کاربری، مشخص میشود مربوط به کدام مشتری است، و کوئریهای دیتابیس همیشه با شناسهی همان مشتری فیلتر میشوند. این لایهی معمول و رایج در اکثر سرویسهاست.
لایهی دوم (که کمتر سرویسی دارد): امنیت در سطح خود دیتابیس
اینجاست که میراکل فراتر میرود. حتی اگر بخشی از کد برنامه یک روز اشتباهی داشته باشد و فراموش کند فیلتر مشتری را اعمال کند، خودِ پایگاهداده اجازه نمیدهد یک ردیف داده متعلق به مشتری دیگر خوانده یا نوشته شود. این قابلیت با تکنولوژی «Row-Level Security» پیادهسازی شده:
- روی تمام جدولهای حساس (کاربران، اسناد، تکهمتنهای دانش، مکالمهها، پیامها، رویدادهای آنالیتیکس، پرداختها، اتصالهای تلگرام/واتساپ/ووکامرس و...) یک قانون دیتابیسی فعال است که فقط ردیفهای مربوط به همان مشتری را قابل مشاهده میکند.
- برنامهی میراکل با یک حساب کاربری دیتابیسی محدود (نه یک حساب مدیر کل) به پایگاهداده وصل میشود — یعنی حتی برنامه هم اجازهی دور زدن این قانون را ندارد.
- شناسهی مشتری فعلی، فقط برای مدت همان یک درخواست نگه داشته میشود و هرگز بین درخواستهای مختلف قاطی نمیشود.
محافظت در برابر خزیدن مخرب سایت
وقتی آدرس یک سایت برای خزیدن وارد میکنید، میراکل قبل از باز کردن هر آدرس، بررسی میکند که آن آدرس به یک سرور داخلی/خصوصی اشاره نداشته باشد — این از یک نوع حملهی امنیتی معروف به نام SSRF جلوگیری میکند که در آن یک آدرس مخرب میتواند سرور را وادار کند اطلاعات داخلی و محرمانه را برگرداند.
عکسهای چت هم همین قانون را دارند
عکسهایی که بازدیدکنندهها در چت زنده میفرستند (به «وقتی بازدیدکننده عکس میفرستد» مراجعه کنید) هم مثل هر دادهی دیگری تحت همین ایزولاسیون هستند — فقط سیستم همان مشتری اجازهی خواندن فایلهای همان مشتری را دارد.