PHP Config

Pendahuluan

Halaman ini dimaksudkan untuk membantu mereka yang mengonfigurasi PHP dan server web tempat PHP dijalankan agar sangat aman.

Di bawah ini Anda akan menemukan informasi tentang pengaturan yang tepat untuk berkas php.ini dan petunjuk tentang cara mengonfigurasi server web Apache, Nginx, dan Caddy.

Konfigurasi dan Deployment PHP

php.ini

Beberapa pengaturan berikut perlu disesuaikan dengan sistem Anda, khususnya session.save_path, session.cookie_path (misalnya /var/www/mysite), dan session.cookie_domain (misalnya ExampleSite.com).

Anda harus menjalankan versi PHP yang didukung (saat tulisan ini dibuat, 8.1 adalah versi tertua yang menerima dukungan keamanan dari PHP, meskipun vendor distribusi sering kali menyediakan dukungan tambahan). Tinjau core php.ini directives dalam Manual PHP untuk referensi lengkap setiap nilai dalam berkas konfigurasi php.ini.

PHP error handling

expose_php              = Off
error_reporting         = E_ALL
display_errors          = Off
display_startup_errors  = Off
log_errors              = On
error_log               = /valid_path/PHP-logs/php_error.log
ignore_repeated_errors  = Off

Perlu diingat bahwa Anda perlu mengatur display_errors ke Off pada server produksi dan merupakan ide bagus untuk sering memperhatikan log.

PHP general settings

doc_root                = /path/DocumentRoot/PHP-scripts/
open_basedir            = /path/DocumentRoot/PHP-scripts/
include_path            = /path/PHP-pear/
extension_dir           = /path/PHP-extensions/
mime_magic.magicfile    = /path/PHP-magic.mime
allow_url_fopen         = Off
allow_url_include       = Off
variables_order         = "GPCS"
allow_webdav_methods    = Off
session.gc_maxlifetime  = 600

allow_url_* mencegah LFI mudah ditingkatkan menjadi RFI.

PHP file upload handling

file_uploads            = On
upload_tmp_dir          = /path/PHP-uploads/
upload_max_filesize     = 2M
max_file_uploads        = 2

Jika aplikasi Anda tidak menggunakan unggahan berkas, dan katakanlah satu-satunya data yang akan dimasukkan/diunggah pengguna adalah form yang tidak memerlukan lampiran dokumen apa pun, file_uploads harus dinonaktifkan.

PHP executable handling

enable_dl               = Off
disable_functions       = system, exec, shell_exec, passthru, phpinfo, show_source, highlight_file, popen, proc_open, fopen_with_path, dbmopen, dbase_open, putenv, move_uploaded_file, chdir, mkdir, rmdir, chmod, rename, filepro, filepro_rowcount, filepro_retrieve, posix_mkfifo
disable_classes         =

Ini adalah fungsi PHP yang berbahaya. Anda harus menonaktifkan semua fungsi yang tidak Anda gunakan.

PHP session handling

Pengaturan sesi adalah salah satu nilai PALING penting yang perlu diperhatikan dalam konfigurasi. Sebaiknya ubah session.name ke nama baru.

session.save_path                = /path/PHP-session/
session.name                     = myPHPSESSID
session.auto_start               = Off
session.use_trans_sid            = 0
session.cookie_domain            = full.qualified.domain.name
#session.cookie_path             = /application/path/
session.use_strict_mode          = 1
session.use_cookies              = 1
session.use_only_cookies         = 1
session.cookie_lifetime          = 14400 # 4 hours
session.cookie_secure            = 1
session.cookie_httponly          = 1
session.cookie_samesite          = Strict
session.cache_expire             = 30
session.sid_length               = 256
session.sid_bits_per_character   = 6

Keamanan lainnya

session.referer_check   = /application/path
memory_limit            = 50M
post_max_size           = 20M
max_execution_time      = 60
report_memleaks         = On
html_errors             = Off
zend.exception_ignore_args = On