Laravel Chronicle: لاگهای حسابرسی با زنجیره رمزنگاری
خلاصهٔ کاملتر
یکی از مشکلات رایج در سیستمهای لاگگیری اینه که هر کسی با دسترسی به دیتابیس میتونه یه ردیف رو بدون هیچ اثری ویرایش یا حذف کنه. Laravel Chronicle ساخته Vasileios Ntoufoudis این مشکل رو با رویکردی متفاوت حل میکنه: به جای فقط نوشتن ردیفها توی یه جدول، یه زنجیره هش رمزنگاریشده با SHA-256 روی تمام ورودیها میسازه.
ایده اصلی اینه که هر رکورد جدید، هش رکورد قبلی رو در خودش داره. یعنی همه ورودیها به هم وصلان و اگه حتی یه ورودی تغییر کنه یا پاک بشه، کل زنجیره میشکنه و Chronicle بلافاصله هشدار میده. این یعنی دیگه نمیشه بیسروصدا توی لاگها دست برد.
برای نوشتن یه رکورد جدید کافیه از Chronicle facade و متد record() استفاده کنی:
use Chronicle\Facades\Chronicle;
Chronicle::record()
->actor($reviewer)
->action('application.approved')
->subject($application)
->metadata(['from' => 'pending', 'to' => 'approved'])
->tags(['applications', 'workflow'])
->commit();هر ورودی حداقل به یه actor، یه action و یه subject نیاز داره. فیلدهای metadata و tags هم برای اضافه کردن context بیشتر به درد میخورن.
Chronicle برای جستجو توی لاگها هم scopeهای آماده داره که میشه براساس actor، subject، action یا tag فیلتر کرد:
use Chronicle\Entry\Entry;
Entry::forActor($reviewer);
Entry::forSubject($application);
Entry::action('application.approved');
Entry::withTag('workflow');برای لجرهای بزرگ، Chronicle از database cursor برای stream کردن ورودیها یکییکی پشتیبانی میکنه تا مصرف حافظه ثابت بمونه. همچنین cursorPaginateLedger() برای مرور صفحهبندیشده بدون لود کل جدول هم در دسترسه.
یکی از قابلیتهای جالب Chronicle اینه که میشه در لحظههای خاص یه checkpoint امضاشده ثبت کرد. این checkpoint شامل وضعیت فعلی زنجیره، الگوریتم امضا، امضای رمزنگاریشده و timestamp هست. اگه بعداً کسی ادعا کنه که لاگ در یه تاریخ مشخص سالم بوده، این snapshot قابل تأیید برای اثبات اون وضعیت موجوده.
برای زمانی که نیاز داری دادههای حسابرسی رو از سیستمت خارج کنی — مثلاً تحویل به یه حسابرس خارجی یا نگهداری آفساید — Chronicle میتونه کل لجر رو به صورت یه دیتاست مستقل و امضاشده export کنه:
php artisan chronicle:exportاین دستور سه فایل میسازه: entries.ndjson، manifest.json و signature.json. هر کسی که این پکیج رو داشته باشه میتونه با دستور php artisan chronicle:verify-export صحت این خروجی رو مستقلاً تأیید کنه.
Chronicle برای اپلیکیشنهایی که به لاگهای حسابرسی قابل اعتماد نیاز دارن خیلی مناسبه — از جمله گردشکارهای انطباق، سوابق مالی، لاگهای امنیتی و تحلیلهای forensic.
نکات کلیدی:
- Chronicle یه زنجیره هش SHA-256 روی لاگها میسازه که دستکاری هر ورودی رو آشکار میکنه
- هر رکورد شامل هش رکورد قبلیه، پس تمام ورودیها به هم وابستهان
- برای جستجو scopeهای آماده
forActor،forSubject،actionوwithTagوجود داره - پشتیبانی از database cursor برای لجرهای بزرگ بدون مشکل حافظه
- امکان ثبت checkpoint امضاشده برای تأیید وضعیت لجر در یه زمان مشخص
- export کامل لجر به سه فایل قابل تأیید مستقل با
chronicle:export - مناسب برای سیستمهای مالی، انطباق، امنیت و forensic




