90 lines
3.4 KiB
INI
90 lines
3.4 KiB
INI
; Wakdo - configuration PHP runtime (surcharge le php.ini par defaut)
|
|
; Charge en dernier via le prefixe zz- pour avoir le dernier mot.
|
|
|
|
[PHP]
|
|
; --- Erreurs ---
|
|
; En dev : on affiche les erreurs a l'ecran. En prod : surcharge via override
|
|
; docker-compose.prod.yml qui remplace ce fichier (display_errors=0, log_errors=1).
|
|
display_errors = On
|
|
display_startup_errors = On
|
|
error_reporting = E_ALL
|
|
log_errors = On
|
|
error_log = /proc/self/fd/2
|
|
|
|
; --- Memoire et temps ---
|
|
memory_limit = 256M
|
|
max_execution_time = 30
|
|
max_input_time = 60
|
|
|
|
; --- Upload images produits (voir .env UPLOAD_MAX_SIZE_MB=5) ---
|
|
; post_max_size >= upload_max_filesize + overhead des autres champs du form.
|
|
file_uploads = On
|
|
upload_max_filesize = 5M
|
|
post_max_size = 8M
|
|
max_file_uploads = 5
|
|
|
|
; --- Timezone ---
|
|
; Cr technique : eviter les warnings et les decalages date silencieux.
|
|
date.timezone = Europe/Paris
|
|
|
|
; --- Sessions ---
|
|
; Le nom du cookie et la lifetime sont surcharges par l'appli au runtime via
|
|
; session_set_cookie_params() a partir des variables SESSION_* du .env.
|
|
; Ce qui est fixe ici = les defaults securises.
|
|
session.use_strict_mode = 1
|
|
session.use_cookies = 1
|
|
session.use_only_cookies = 1
|
|
session.cookie_httponly = 1
|
|
session.cookie_samesite = "Strict"
|
|
session.cookie_secure = 1
|
|
; session.save_path est laisse par defaut (/tmp dans le conteneur).
|
|
; Persistance inter-container non necessaire : chaque session est liee a une
|
|
; instance unique du service wakdo-app (pas de scale horizontal pour ce projet).
|
|
|
|
; session.gc_maxlifetime : filet de securite cote serveur (l'idle reel est
|
|
; pilote par l'appli via SESSION_LIFETIME_IDLE). 4h.
|
|
session.gc_maxlifetime = 14400
|
|
; IDs de session longs et a forte entropie (anti-prediction/fixation).
|
|
session.sid_length = 48
|
|
session.sid_bits_per_character = 6
|
|
; Pas de cache navigateur sur les pages avec session (anti-fuite via cache).
|
|
session.cache_limiter = nocache
|
|
|
|
; --- Durcissement general (security-by-design, cf. PROJECT_CONTEXT 19) ---
|
|
; Expose_php = Off : ne pas leak la version PHP dans l'entete HTTP.
|
|
expose_php = Off
|
|
; Anti RFI/SSRF : interdire l'ouverture d'URL distantes et leur inclusion.
|
|
allow_url_fopen = Off
|
|
allow_url_include = Off
|
|
; FPM : ne pas deviner le script a partir du PATH_INFO (anti exploitation
|
|
; d'upload mal route vers l'interpreteur). Le routage passe par le front controller.
|
|
cgi.fix_pathinfo = 0
|
|
; Interdire le chargement dynamique d'extensions au runtime.
|
|
enable_dl = Off
|
|
; Ne pas inclure les arguments dans les stack traces (anti-fuite de secrets).
|
|
zend.exception_ignore_args = On
|
|
; Desactiver les fonctions d'execution systeme : l'appli n'en a aucun usage
|
|
; legitime (anti-RCE en cas d'injection). Les scripts d'ops vivent cote cron/host.
|
|
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
|
|
|
|
; --- OPcache (perf + stabilite) ---
|
|
[opcache]
|
|
opcache.enable = 1
|
|
opcache.enable_cli = 0
|
|
opcache.memory_consumption = 128
|
|
opcache.interned_strings_buffer = 16
|
|
opcache.max_accelerated_files = 10000
|
|
opcache.validate_timestamps = 1
|
|
; En dev : revalidate toutes les 2s pour prendre en compte les modifs du bind-mount.
|
|
; En prod : validate_timestamps=0 via override (invalidation manuelle au deploy).
|
|
opcache.revalidate_freq = 2
|
|
opcache.fast_shutdown = 1
|
|
|
|
; --- PDO / MySQL ---
|
|
[PDO]
|
|
; Pas de persistent connections pour un projet a faible volume : plus simple
|
|
; a debugger et moins de risques de fuite de sessions BDD.
|
|
|
|
[MySQLi]
|
|
mysqli.default_host = wakdo-db
|
|
mysqli.default_port = 3306
|