رفتن به محتوای اصلی
Ledgeriano
امنیت

لجریانو چطور از داده‌های حسابداری شما محافظت می‌کند

دفاتر شما سوابق مالی حساسی دارند؛ به همین دلیل حفاظت از آن‌ها چندلایه است: ارتباط رمزنگاری‌شده، اطلاعات ورود هش‌شده، دسترسی سخت‌گیرانه برای هر کسب‌وکار، اسنادی که بی‌صدا بازنویسی نمی‌شوند و گزارش ممیزی از همه تغییرات. این صفحه فقط کارهایی را شرح می‌دهد که محصول واقعاً انجام می‌دهد.

سپر و قفل برای حفاظت از دفتر حسابداری در کنار خط زمانی گزارش ممیزی
در یک نگاه

کنترل‌های امنیتی که در همه حساب‌ها فعال است

این کنترل‌ها برای همه مشتریان روشن است؛ سطح امنیتی ویژه یا پولی وجود ندارد.

HTTPS در همه‌جا

وب‌سایت، نرم‌افزار و API از طریق اتصال رمزنگاری‌شده HTTPS ارائه می‌شوند.

رمز عبور هش‌شده

رمز عبور به‌صورت هش bcrypt ذخیره می‌شود و هیچ‌کس در لجریانو نمی‌تواند آن را بخواند.

ورود دومرحله‌ای

کدهای یک‌بارمصرف زمان‌محور (TOTP) را از هر اپلیکیشن احراز هویت اضافه کنید. کلید مخفی آن رمزنگاری‌شده نگهداری می‌شود.

کلید API فقط یک بار نمایش داده می‌شود

کلیدها به‌صورت هش SHA-256 ذخیره می‌شوند، فقط به یک کسب‌وکار دسترسی دارند و هر زمان قابل تعویض یا ابطال‌اند.

دسترسی مبتنی بر نقش

هر درخواست با نقش و مجوزهای عضو در همان کسب‌وکار مشخص سنجیده می‌شود.

سند قطعی محافظت‌شده

سند قطعی ویرایش نمی‌شود و با سند برگشتی اصلاح می‌شود؛ تاریخ قفل هم دوره‌های بسته‌شده را ثابت نگه می‌دارد.

گزارش ممیزی کامل

چه کسی، چه کاری، چه زمانی و از کدام IP انجام داده؛ همراه با مقدار قبلی و جدید هر فیلد تغییرکرده.

وب‌هوک امضاشده

هر ارسال یک امضای HMAC-SHA256 روی زمان ارسال و بدنه پیام دارد.

با جزئیات

پشت هر کنترل امنیتی چه اتفاقی می‌افتد

امنیت حساب کاربری و ورود

رمز عبور شما هرگز به شکل خوانا ذخیره نمی‌شود و عامل دوم جلوی کسی را می‌گیرد که فقط رمز شما را دارد.

  • رمز عبور پیش از ذخیره با الگوریتم bcrypt هش می‌شود. رمز باید دست‌کم ۸ نویسه و شامل حرف و عدد باشد.
  • ورود دومرحله‌ای از کدهای استاندارد TOTP استفاده می‌کند و با اپلیکیشن‌های رایج احراز هویت کار می‌کند. کلید مخفی مشترک در پایگاه داده رمزنگاری‌شده است.
  • تلاش‌های ناموفق پیاپی برای ورود و کدهای دومرحله‌ای اشتباه محدود می‌شوند تا حدس زدن رمز کند شود.
  • حساب‌های جدید نشانی ایمیل خود را با یک پیوند امضاشده تأیید می‌کنند.
  • فرم بازیابی رمز عبور، چه ایمیل ثبت شده باشد چه نه، پاسخ یکسانی می‌دهد؛ پس نمی‌توان از آن برای کشف حساب‌ها استفاده کرد.
  • بازنشانی رمز عبور همه نشست‌ها را می‌بندد و تغییر آن، شما را از همه دستگاه‌های دیگر خارج می‌کند.

نشست‌هایی که می‌بینید و می‌بندید

هر ورود یک توکن نشست می‌سازد که پس از ۳۰ روز منقضی می‌شود و هر زمان بخواهید می‌توانید آن را ابطال کنید.

  • توکن نشست ۳۰ روز پس از ورود منقضی می‌شود و توکن‌های منقضی‌شده هر روز به‌طور خودکار از پایگاه داده حذف می‌شوند.
  • در پروفایل خود فهرست نشست‌های فعال را به تفکیک دستگاه و مرورگر می‌بینید و می‌توانید هر کدام را ببندید.
  • خروج از حساب، توکن را روی سرور حذف می‌کند، نه فقط در مرورگر.
  • اگر حسابی تعلیق شود، نشست‌های باز آن از درخواست بعدی از کار می‌افتند.

کلیدهای API و دسترسی از طریق API

کلیدهای API به‌صورت هش SHA-256 ذخیره می‌شوند؛ بنابراین هر کلید فقط یک بار، هنگام ساخت، به شما نشان داده می‌شود.

  • فقط مالک کسب‌وکار می‌تواند کلید API بسازد، ببیند، تعویض یا ابطال کند.
  • هر کلید متعلق به یک کسب‌وکار است و به هیچ کسب‌وکار دیگری دسترسی ندارد.
  • هر کلید مجوز مشخصی دارد: فقط خواندن، یا خواندن و نوشتن. برای ابزارهای گزارش‌گیری از کلید فقط‌خواندنی استفاده کنید.
  • می‌توانید برای کلید تاریخ انقضا تعیین کنید. کلید ابطال‌شده یا منقضی از درخواست بعدی رد می‌شود.
  • تعویض کلید، کلید قبلی را ابطال و در یک مرحله کلید تازه‌ای با همان تنظیمات صادر می‌کند.
  • هر کلید محدودیت نرخ درخواست جداگانه دارد (به‌طور پیش‌فرض ۱۲۰ درخواست در دقیقه) که در سرآیندهای X-RateLimit-Limit و X-RateLimit-Remaining اعلام می‌شود.
  • هر درخواست API با متد، مسیر، کد وضعیت، نشانی IP و مدت پاسخ ثبت می‌شود و برای هر کلید، زمان و IP آخرین استفاده نمایش داده می‌شود.
  • کلید یکتایی (Idempotency Key) اجازه می‌دهد درخواست را بدون ساخته شدن سند تکراری دوباره بفرستید. صفحه برنامه‌نویسان و راهنمای API حسابداری را ببینید.

وب‌هوک‌های امضاشده

هر ارسال وب‌هوک با HMAC-SHA256 و کلید مخفی مخصوص همان وب‌هوک امضا می‌شود و امضا شامل زمان ارسال است تا پیام‌های تکراری و قدیمی قابل رد کردن باشند.

  • هر ارسال سرآیندهای X-Ledgeriano-Signature (عبارت sha256= و سپس چکیده هگز)، X-Ledgeriano-Timestamp، X-Ledgeriano-Event و X-Ledgeriano-Delivery را دارد.
  • امضا روی زمان ارسال، یک نقطه و بدنه خام درخواست محاسبه می‌شود.
  • هر ارسال شناسه یکتا دارد تا سرور شما بتواند پیام‌های تکراری را نادیده بگیرد.
  • ارسال ناموفق تا ۵ بار و با فاصله‌های فزاینده (۳۰ ثانیه، سپس ۲، ۱۰ و ۳۰ دقیقه) دوباره تلاش می‌شود.
  • می‌توانید کلید مخفی وب‌هوک را تعویض کنید؛ ارسال‌های بعدی بلافاصله با کلید جدید امضا می‌شوند.
بررسی امضای وب‌هوک در Node.jsامضا را از بدنه خام پیام بسازید، مقایسه را در زمان ثابت انجام دهید و پیام‌هایی را که زمان ارسالشان چند دقیقه گذشته است رد کنید.
import crypto from "node:crypto";

// rawBody: the exact request body string, before JSON parsing
export function verifyLedgerianoWebhook(rawBody, headers, secret) {
  const timestamp = headers["x-ledgeriano-timestamp"];
  const signature = headers["x-ledgeriano-signature"] ?? ""; // "sha256=<hex>"

  // Reject messages older than 5 minutes
  if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;

  const expected = "sha256=" + crypto
    .createHmac("sha256", secret)
    .update(`${timestamp}.${rawBody}`)
    .digest("hex");

  return signature.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}

سطح دسترسی و جداسازی کسب‌وکارها

هر کسب‌وکار دفتری جداست و هر درخواست، پیش از برگرداندن هر داده‌ای، با عضویت و نقش شما در همان کسب‌وکار سنجیده می‌شود.

  • کاربری که عضو فعال یک کسب‌وکار نیست، حتی با نشست معتبر، خطای عدم دسترسی می‌گیرد.
  • اعضا نقش‌هایی با مجوزهای جزئی دارند. می‌توانید از نقش‌های پیش‌فرض استفاده کنید یا نقش خودتان را تعریف کنید.
  • برخی کارها فقط در اختیار مالک است، از جمله مدیریت کلیدهای API و حذف کسب‌وکار. با حذف کسب‌وکار، کلیدهای API فعال آن هم ابطال می‌شوند.
  • اعضا با دعوت‌نامه ایمیلی اضافه می‌شوند و مالک هر زمان می‌تواند عضوی را حذف کند.
  • به کسب‌وکار تعلیق‌شده نه از نرم‌افزار و نه از API نمی‌توان دسترسی داشت.

یکپارچگی دفاتر و گزارش ممیزی

سند قطعی ویرایش یا حذف نمی‌شود و هر تغییر در کسب‌وکار با نام انجام‌دهنده، زمان و محل آن ثبت می‌شود.

  • سند فقط وقتی ذخیره می‌شود که تراز باشد، یعنی جمع بدهکار با جمع بستانکار برابر باشد.
  • سند قطعی با سند برگشتی اصلاح می‌شود. مالک می‌تواند برگرداندن سند قطعی به موقت را فعال کند (به‌طور پیش‌فرض خاموش است) و هر بار انجام آن ثبت می‌شود.
  • تاریخ قفل، ثبت، ویرایش، قطعی کردن یا برگشت اسناد را در دوره‌های بسته‌شده، هم در نرم‌افزار و هم از طریق API، مسدود می‌کند.
  • اسناد افتتاحیه، اختتامیه و برگشتی را سیستم می‌سازد، نه کاربر. در راهنمای بستن سال مالی بیشتر بخوانید.
  • گزارش ممیزی نوع عملیات، کاربر یا کلید API، نشانی IP، مرورگر، زمان و فیلدهای تغییرکرده را با مقدار قبلی و جدید نگه می‌دارد.
  • اگر کارشناس پشتیبانی ما برای رفع مشکل به‌جای یک کاربر وارد شود، این دسترسی پس از یک ساعت منقضی می‌شود و در گزارش ممیزی ثبت می‌شود.

زیرساخت، ذخیره‌سازی و پرداخت

ترافیک با HTTPS رمزنگاری می‌شود، مدارک بارگذاری‌شده در فضای خصوصی می‌مانند و اطلاعات پرداخت هیچ‌وقت شامل شماره کارت شما نیست.

  • ledgeriano.com و api.ledgeriano.com از طریق HTTPS (TLS) ارائه می‌شوند و پاسخ‌ها سرآیندهای امنیتی مانند X-Content-Type-Options: nosniff و سیاست ارجاع‌دهنده سخت‌گیرانه دارند.
  • پیوست اسناد و رسیدهای پرداخت در فضای ذخیره‌سازی خصوصی نگهداری می‌شوند و فقط از طریق درخواست احرازشده به افراد دارای دسترسی ارائه می‌شوند.
  • سرویس در حالت عملیاتی و با اشکال‌زدایی خاموش اجرا می‌شود. خطاهای پیش‌بینی‌نشده به‌جای جزئیات داخلی، یک کد پیگیری کوتاه نشان می‌دهند.
  • گردانندگان سرویس از پایگاه داده و فضای ذخیره‌سازی فایل‌ها نسخه پشتیبان تهیه می‌کنند.
  • ما هیچ‌وقت شماره کارت دریافت نمی‌کنیم. پرداخت رمزارزی از طریق NowPayments انجام می‌شود و اعلان‌های پرداخت آن پیش از افزودن اعتبار با امضای HMAC-SHA512 بررسی می‌شوند.
  • در پرداخت با واریز بانکی، اعتبار فقط پس از بررسی رسید واریز توسط مدیر سیستم اضافه می‌شود.

گزارش‌های عملیاتی چه مدت نگهداری می‌شوند

گزارش‌ها به رفع اشکال و بررسی‌های امنیتی کمک می‌کنند، اما نباید برای همیشه بمانند. یک فرایند زمان‌بندی‌شده آن‌ها را طبق جدول زیر حذف می‌کند.

نوع سابقهمدت نگهداری
گزارش درخواست‌های API (متد، مسیر، کد وضعیت، IP، مدت پاسخ)۹۰ روز
گزارش ارسال وب‌هوک (محتوای پیام، کد وضعیت پاسخ)۳۰ روز
سابقه اجرای گردش‌کارها۱۸۰ روز
توکن‌های نشست منقضی‌شدهحدود یک روز پس از انقضا حذف می‌شوند

داده‌های حسابداری شما و گزارش ممیزی آن تا زمانی که کسب‌وکار وجود دارد نگهداری می‌شوند. جزئیات کامل در سیاست حریم خصوصی آمده است.

مسئولیت مشترک

شش عادت که دفاتر شما را امن‌تر می‌کند

امنیت پلتفرم با ماست؛ این تنظیمات در دست شماست.

  • ورود دومرحله‌ای را فعال کنید، به‌خصوص برای مالکان کسب‌وکار.
  • به هر عضو کمترین نقشی را بدهید که برای کارش لازم است و اعضایی را که می‌روند حذف کنید.
  • برای هر اتصال یک کلید API جدا بسازید، کلید فقط‌خواندنی را ترجیح دهید و تاریخ انقضا تعیین کنید.
  • کلید API را در مدیر اسرار یا متغیرهای محیطی سرور نگه دارید، نه در کد سمت کاربر یا مخزن عمومی. اگر احتمال لو رفتن کلیدی هست، آن را تعویض کنید.
  • امضای همه وب‌هوک‌ها را بررسی و پیام‌های با زمان ارسال قدیمی را رد کنید.
  • هر چند وقت یک بار گزارش ممیزی و نشست‌های فعال خود را مرور کنید.
افشای مسئولانه

آسیب‌پذیری پیدا کرده‌اید؟ اول به ما بگویید

اگر فکر می‌کنید مشکلی امنیتی در لجریانو پیدا کرده‌اید، به تیم امنیت ما ایمیل بزنید. از گزارش مشتریان و پژوهشگران مستقل استقبال می‌کنیم.

ایمیل به تیم امنیتsecurity@ledgeriano.com

آزمون را فقط با حساب‌ها و داده‌های متعلق به خودتان انجام دهید. دریافت گزارش را تأیید می‌کنیم، در طول کار شما را در جریان می‌گذاریم و رفع مشکل را اطلاع می‌دهیم. در حال حاضر برنامه پاداش باگ (Bug Bounty) نداریم.

لطفاً این موارد را بنویسید

  • شرح مشکل و اثر احتمالی آن
  • نشانی صفحه یا مسیر API آسیب‌پذیر
  • مراحل بازتولید، در صورت امکان با درخواست و پاسخ
  • راه ارتباطی برای پرسش‌های بعدی

لطفاً این کارها را نکنید

  • دسترسی، تغییر یا حذف داده‌های متعلق به مشتریان دیگر
  • آزمون حمله منع سرویس، ارسال هرزنامه یا مهندسی اجتماعی علیه کارکنان یا کاربران ما
  • انتشار جزئیات پیش از آنکه فرصت معقولی برای رفع مشکل داشته باشیم

دفاتر گروه خود را در نرم‌افزاری نگه دارید که برای کنترل ساخته شده

حساب بسازید، ورود دومرحله‌ای را روشن کنید و اعضای تیم را با نقش درست دعوت کنید. حساب‌های جدید اعتبار رایگان می‌گیرند.