# تغییرات v173 (سخت‌سازی امنیتی + اصلاحات)

## بک‌اند PHP
- `config.php`: رمز دیتابیس، IP، `pub_secret`، `cron_key` واقعی حذف شد. بدون تنظیمات، API خطای «تنظیم نشده» می‌دهد (دیگر به دیتابیس پیش‌فرض وصل نمی‌شود). نشست پیش‌فرض ۷ روز.
- `index.php`
  - `update/delete` روی `bk_invoice_messages` / `bk_direct_voice_notes` / `marketer_orders` فقط مدیر.
  - ستون‌های `status`, `status_by`, `profit_*`... در درج توسط غیرمدیر نادیده گرفته می‌شود (دیگر نمی‌شود فاکتور را «تأییدشده» ثبت کرد).
  - ورود/ثبت‌نام: جستجوی قطعی (ایمیل با `@`، وگرنه موبایل)، نرمال‌سازی ارقام فارسی، ردّ تکراری (409)، اعتبارسنجی ایمیل/موبایل.
  - پیام خطای استثناء (PDO/SQL) دیگر به کلاینت نمی‌رود؛ فقط `error_log`.
  - `/api/health` برای عموم فقط `ok/stage`؛ جزئیات فقط برای مدیر یا `BK_DEBUG_HEALTH=1`.
  - `bk_schema_has_column` فقط جدول‌های مجاز؛ `/public-invoice` حداقل طول توکن ۲۰ (توکن‌های فرانت ۲۴ هگز است).
  - `GET /api/cron-maintenance?key=` پاکسازی نشست‌های منقضی، rate limit، رویدادهای امنیتی و لاگ‌های قدیمی.
- `mk_v152.php`: `bk_get_marketer_invoices` و `bk_get_direct_voice_notes` اکنون PIN/دستگاه را الزام می‌کنند (قبلاً دور زده می‌شد)؛ آزادسازی قفل برداشت.
- `tg_v149.php`: سقف سخت‌تر برای ارسال ناشناس.
- `auth.php`: پاکسازی تصادفی نشست‌های منقضی. `.htaccess`: فقط `index.php` از وب قابل اجراست.

## SQL
- `4_BarKala_v173_hardening.sql`: یکتایی `users.phone`، تبدیل ستون‌های توکن از TEXT به VARCHAR(191) + ایندکس، ایندکس‌های پاکسازی.
- `3_..._first_admin.sql`: فقط «یک» کاربر را ارتقا می‌دهد.

## فرانت‌اند
- خروجی CSV (محصولات و مشتریان) ضد فرمول‌تزریق Excel؛ پارسر CSV ورودی با گیومهٔ چندخطی؛ escape کامل در لیست محصولات؛ `try/catch` روی ذخیرهٔ موجودی.
- `id` تکراری `grpClearChatBtn` رفع شد؛ `viewport` اجازهٔ زوم دارد؛ `manifest.json` به‌روز؛ کلاینت API دستگاه مورد اعتماد را برای RPCهای `p_sender_token` هم می‌فرستد.
- `.htaccess` هدرهای امنیتی (CSP در حالت Report-Only) برای cPanel.

## هنوز باز / محدودیت‌های طراحی
- مبلغ فاکتور/پورسانت از سمت کلاینت می‌آید؛ ثبت سفارش جعلی با توکن بازاریاب ممکن است (تأیید مدیر لازم است). محاسبهٔ سمت سرور از روی قیمت محصولات نیاز به بازطراحی دارد.
- توکن مشتری بر پایهٔ تلفن است (`bk_upsert_customer_profile`)؛ فقط سقف مبلغ و rate limit اضافه شد.
- توکن بات تلگرام در دیتابیس متن ساده است؛ فایل بکاپ را محرمانه نگه دارید.
- `bootstrap-admin` تا زمانی که مدیری نساخته‌اید باز است؛ بلافاصله بعد از نصب مدیر بسازید.
- منطق حسابداری (`acc_v149.php`) بررسی نشد (فایل ارسال نشده بود).
