# هدرهای امنیتی برای صفحات ایستا (ثبت‌نام و غیره)
# OWASP A05 / ISO 15408 FPT_ITT.1
# نکته: CSP پس از بررسی وابستگی‌های خارجی (مثل Tailwind CDN) به اینجا اضافه شود.

# جلوگیری از لیست شدن دایرکتوری‌ها (افشای ساختار پوشه‌ها)
Options -Indexes

# نمایش صفحهٔ 404 اختصاصی پروژه برای مسیرهای ناموجود
ErrorDocument 404 /system_404.html

# مسدود کردن دسترسی مستقیم وب به فایل‌های حساس (افشای شِما/کانفیگ/پشتیبان)
# هشدار: این قانون فقط وقتی اعمال می‌شود که آپاچی AllowOverride را برای این دایرکتوری مجاز کرده باشد.
<FilesMatch "(?i)\.(sql|json|ini|md|markdown|bak|swp|old|dist|lock|env|env\.example|gitignore)$">
  Require all denied
</FilesMatch>

# لاگ‌های زمان اجرای PHP پسوند نقطه‌ای ندارند (error_log) — این قانونِ بالا
# شاملشان نمی‌شود؛ نفی بر اساس نام. شاهد: نسخهٔ مستقرشده حاوی شمارهٔ تلفن کامل بود.
<FilesMatch "(?i)^(error_log|access_log|debug_log|.+_log)$">
  Require all denied
</FilesMatch>

# استثنا: manifest.json (PWA) لازم است برای مرورگر سرو شود — این استثنا فقط همین فایل را شامل می‌شود.
<Files "manifest.json">
  Require all granted
</Files>

<IfModule mod_headers.c>
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-Frame-Options "DENY"
  Header always set Referrer-Policy "no-referrer"
  Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=(), magnetometer=(), gyroscope=(), accelerometer=()"
  Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
  # توجه: هدر CSP برای صفحات HTML توسط serve.php (با nonce یکتا) و برای پاسخ‌های
  # API توسط api/routes/api.php صادر می‌شود؛ در اینجا تکرار نمی‌شود تا با سیاستِ
  # دارای nonce تداخل (و تداخل AND) پیدا نکند.
  # جلوگیری از کش اکتشافی مرورگر برای HTML/JS/CSS: چون این فایل‌ها با هش SRI
  # نسخه‌بندی می‌شوند، کشِ ماندگار باعث ناهماهنگی «صفحهٔ کش‌شده با هش اسکریپت جدید»
  # (و پرتابِ اشتباه کاربر به صفحهٔ ورود) می‌شود. تصاویر/آپلودها همچنان قابل کش‌ماند.
  <FilesMatch "(?i)\.(html|js|css)$">
    Header set Cache-Control "no-cache, must-revalidate"
  </FilesMatch>
</IfModule>

# انتقال هدر Authorization به PHP (رفع عدم رسیدن Bearer token در آپاچی)
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP:Authorization} .
  RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  # بازآرایی ساختار (Refactor): ریدایرکت 301 از مسیرهای قدیمی دشبورد به مسیرهای جدید
  # kebab-case تا لینک/بوکمارک منتشرشدهٔ قبلی همچنان کار کند.
  RewriteCond %{REQUEST_URI} ^/([^/]+)/Dashboard[[:space:]]admin/
  RewriteRule ^Dashboard[[:space:]]admin/(.*)$ /%1/dashboard-admin/$1 [R=301,L]
  RewriteCond %{REQUEST_URI} ^/([^/]+)/Dashboard[[:space:]]user/
  RewriteRule ^Dashboard[[:space:]]user/(.*)$ /%1/dashboard-user/$1 [R=301,L]
  # K4: سرویس صفحات HTML از طریق serve.php برای تزریق nonce و CSP سخت‌گیرانه
  RewriteRule ^(.*\.html)$ serve.php [L]
</IfModule>
CGIPassAuth On

# کنترل‌های محیطی امنیتی. سکرت‌ها و تنظیمات حساس از فایل واقعی api/.env بارگذاری می‌شوند
# (توسط api/routes/api.php) و نباید در اینجا هاردکد شوند. فقط تنظیمات غیرسکرت اینجا می‌مانند.
<IfModule mod_env.c>
  SetEnv CSRF_PROTECT on
  SetEnv RATE_LIMIT on
</IfModule>

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php82” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-ea-php82 .php .php8 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
