# =====================================================================
#  Portofoliu profesional – protecții pentru Apache 2.4
#  Necesită „AllowOverride All” (sau cel puțin AuthConfig FileInfo
#  Indexes Limit Options) pentru dosarul aplicației.
# =====================================================================

# BEGIN Portofoliu – protecție (generat din Setări → Protecție Apache)
# (gol: protecția suplimentară nu este activată)
# END Portofoliu – protecție

# --- Fără listarea dosarelor, fără negocierea conținutului ---
Options -Indexes -MultiViews
DirectoryIndex index.php
ServerSignature Off

# --- Limita unei cereri: 100 MB (trebuie >= post_max_size) ---
LimitRequestBody 104857600

# --- Fișiere ascunse (.htaccess, .user.ini, .git …) ---
<FilesMatch "^\.">
    Require all denied
</FilesMatch>

# --- Fișiere care nu trebuie servite niciodată ---
<FilesMatch "(?i)\.(md|txt|log|ini|sqlite|sqlite3|db|bak|old|orig|sql|csv|exemplu|conf|dist|sh|zip)$|^config(\.sample)?\.php$">
    Require all denied
</FilesMatch>

# --- Se execută doar punctele de intrare; orice alt .php este refuzat ---
<FilesMatch "(?i)^(?!(index|install)\.php$).*\.(php|phtml|phar|php\d)$">
    Require all denied
</FilesMatch>
<FilesMatch "^(index|install)\.php$">
    # „And”: regula se adaugă protecției din blocul de sus, nu o înlocuiește
    AuthMerging And
    # doar metodele folosite de aplicație (fără PUT, DELETE, TRACE …)
    Require method GET POST HEAD
</FilesMatch>

# --- Dosarele interne ale aplicației ---
<IfModule mod_alias.c>
    RedirectMatch 404 "(?i)^.*/(inc|pages|data|tools)(/.*)?$"
</IfModule>

# --- Antete de securitate ---
<IfModule mod_headers.c>
    # „set” (nu „always”) pentru antetele pe care le trimite și aplicația: fără dubluri
    Header set X-Content-Type-Options "nosniff"
    Header set X-Frame-Options "DENY"
    Header set Referrer-Policy "same-origin"
    Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()"
    Header always set Strict-Transport-Security "max-age=31536000" "expr=%{HTTPS} == 'on'"
    Header always unset X-Powered-By
    Header unset X-Powered-By
    # stilurile și scripturile pot fi păstrate în cache; paginile nu
    <FilesMatch "\.(css|js|png|svg|ico)$">
        Header set Cache-Control "public, max-age=604800"
    </FilesMatch>
</IfModule>

# --- Setări PHP când rulează ca modul Apache (mod_php) ---
#     Pe PHP-FPM sau găzduire partajată se folosește fișierul .user.ini.
<IfModule mod_php.c>
    php_value upload_max_filesize 20M
    php_value post_max_size 100M
    php_value max_file_uploads 20
    php_value memory_limit 256M
    php_value max_execution_time 300
    php_flag  display_errors Off
    php_flag  log_errors On
    php_flag  expose_php Off
    php_flag  session.cookie_httponly On
    php_flag  session.use_strict_mode On
</IfModule>
