程式碼層面輸入驗證、預備語句是第一道防線;php.ini 服務端配置提供第二層保護,即使程式有漏洞也能限制危害範圍。
; 生產環境關閉錯誤顯示
display_errors = Off
display_startup_errors = Off
; 記錄錯誤至檔案
log_errors = On
error_log = /var/log/php/error.log
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
; 隱藏 PHP 版本資訊
expose_php = Off
; 停用高風險函數
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,\
curl_exec,curl_multi_exec,parse_ini_file,show_source,\
pcntl_exec,ld,dl,syslog,imap_open,mb_send_mail
; 限制檔案存取路徑 (防目錄遍歷)
open_basedir = /var/www/:/tmp/:/usr/share/php/
; 限制上傳
file_uploads = On
upload_max_filesize = 10M
post_max_size = 10M
max_file_uploads = 20
; Session 安全
session.cookie_httponly = 1
session.cookie_secure = 1 ; 僅 HTTPS
session.use_strict_mode = 1
session.cookie_samesite = Strict
session.gc_maxlifetime = 1440
session.save_path = /var/lib/php/sessions ; 專用目錄、權限 700
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
max_input_vars = 1000
post_max_size = 10M
; 禁止遠端檔案包含 (RF)
allow_url_fopen = Off
allow_url_include = Off
; 郵件發送限制
mail.add_x_header = On
mail.log = /var/log/php/mail.log
; 日期時區 (避免警告)
date.timezone = Asia/Taipei
htmlspecialchars($str, ENT_QUOTES, 'UTF-8')password_hash() / password_verify()