رفتن به محتوای اصلی
بازگشت به وبلاگ

توسعه و اتصال فنی

جلوگیری از جعل خط لاگ؛ کنترل‌کاراکتر و کدگذاری در JSON و CSV

یک ورودی معمولی می‌تواند شامل خط جدید یا جداکننده باشد. اگر آن را مستقیم در متن گزارش بچسبانید، یک رخداد ممکن است مانند دو رخداد نمایش داده شود. موضوع این راهنما تمامیت قالب رویداد و کدگذاری مقصد است؛ فهرست داده خصوصی یا طراحی عمومی audit log موضوع جداگانه‌ای دارد.

یک ورودی معمولی می‌تواند شامل خط جدید یا جداکننده باشد. اگر آن را مستقیم در متن گزارش بچسبانید، یک رخداد ممکن است مانند دو رخداد نمایش داده شود. موضوع این راهنما تمامیت قالب رویداد و کدگذاری مقصد است؛ فهرست داده خصوصی یا طراحی عمومی audit log موضوع جداگانه‌ای دارد.

مرز فیلد را از متن پیام جدا کنید

ورودی آزمایشی بی‌خطر «خط اول» سپس LF و «خط دوم» است. هدف نفوذ نیست؛ می‌خواهیم ببینیم یک مقدار رشته‌ای در مسیر logger، جمع‌کننده و exporter چند رخداد می‌سازد. اگر زمان و سطح گزارش از متن آزاد استخراج شوند، مرز اعتماد شکسته است. این فیلدها باید توسط برنامه معتبر تعیین شوند.

یک فهرست مجاز فیلد بسازید؛ مثلاً event_id،event_type و sample_text. فیلد افزوده و طول خارج قرارداد باید سیاست رد یا حذف امن داشته باشند. حذف یک فیلد نامعتبر نباید کل رخداد امنیتی را بی‌صدا حذف کند؛ یک نشانه اعتبارسنجی با زمینه محدود و امن ثبت شود.

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

sample = "line one\nline two"
event = {"event_id": "demo-01", "sample_text": sample}
encoded = json.dumps(event, ensure_ascii=False)
assert len(encoded.splitlines()) == 1
assert json.loads(encoded)["sample_text"] == sample

در JSON Lines، هر رخداد باید یک خط فیزیکی معتبر باشد؛ serializer نویسه LF داخل مقدار را escape می‌کند. این با حذف معنا از رشته فرق دارد. اگر مقصد فقط متن ساده است، می‌توان نمایش کنترل‌شده مانند علامت آشکار LF داشت، اما آن سیاست باید مستند و برگشت‌پذیری موردنیاز روشن باشد.

CSV ممکن است یک فیلد نقل‌قول‌شده چندخطی داشته باشد و همچنان یک رکورد منطقی باشد. پس شمار خط فیزیکی معیار درست تعداد رکورد CSV نیست؛ فایل را با parser بخوانید. همچنین exporter بعدی نباید JSON را decode و مقدار خام را در logger خطی بچسباند؛ درست بودن مرز اول، مرزهای بعدی را تضمین نمی‌کند.

آزمون مسیر کامل، نه فقط تابع escape

سه خروجی را از همان رویداد بسازید: JSON Lines، CSV و صفحه نمایش گزارش. انتظار تعداد رخداد منطقی یک در همه مقصدهاست و نوع رویداد نباید از sample_text تغییر کند. در نمایش HTML هم کدگذاری متناسب همان زمینه لازم است؛ escape مربوط به JSON جای آن را نمی‌گیرد.

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

کاربرگ همراه و منبع

دریافت CSV اختصاصی این راهنما؛ تمام رکوردها و شناسه‌های کاربرگ ساختگی‌اند. مقادیر نمونه را به داده یا نتیجه واقعی مشتری تعبیر نکنید.

OWASP: پالایش و کدگذاری داده لاگ؛ Python: کدگذاری JSON؛ Python: نویسنده CSV. منابع در ۱ نوامبر ۲۰۲۶ خوانده شدند؛ مثال و الگوی اجرایی بالا پیشنهاد آموزشی تحریریه است، نه تأیید قابلیت محصول.

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

برای این نیاز، کدام خدمت مناسب‌تر است؟

تماس و منشی، چت سایت و تحلیل مکالمه سه مسیر متفاوت‌اند. ابتدا خدمت متناسب نیازتان را انتخاب کنید.

انتخاب میان سه خدمتراهنمای شروع با تیم اپرا

برآورد هزینه