# PHP चे secure configuration settings

Source: https://ravindrabagale.com/mr/cyber/part-04/ch09-php-lamp-and-lemp-step-by-step/9-8-secure-php-settings.html
Language: mr (Marathi with English technical terms)

PHP चालू झाल्यावर active web handler ची php.ini settings तपासा. php --ini CLI config दाखवतो; FPM/Apache वेगळं config वापरू शकतात. Amazon Linux example /etc/php.ini; Ubuntu मध्ये /etc/php/8.x/fpm/php.ini किंवा apache2/php.ini. Actual version/path तपासा.

 | Setting
 | सुचवलेली setting
 | का?

 | expose_php
 | Off
 | PHP version header कमी करतो

 | display_errors
 | Off
 | Visitors ना paths/SQL errors दिसू नयेत

 | log_errors
 | On
 | Errors logs मध्ये लिहिले जातात

 | allow_url_include
 | Off
 | URL-based include बंद/मर्यादित

 | upload_​max_​filesize / post_max_size
 | App ला आवश्यक तितकीच limit
 | Upload size चा गैरवापर मर्यादित

 | session.​cookie_​httponly
 | 1
 | JavaScript cookie वाचू शकत नाही; XSS damage काही प्रमाणात कमी

 | session.​cookie_​secure
 | 1 (HTTPS वापरताना)
 | Cookie फक्त HTTPS वर पाठवली जाते

expose_php Off: PHP version header कमी करतो.

display_errors Off: visitors ना internal error details नकोत.

log_errors On: errors protected logs मध्ये ठेवा.

allow_url_include Off: URL-based include कमी/बंद; supported setting/version तपासा.

upload_max_filesize/post_max_size: app ला आवश्यक तितकी मर्यादा; web-server body limit सुद्धा जुळवा.

session.cookie_httponly=1: JavaScript मधून session cookie वाचण्यावर मर्यादा; XSS पूर्ण थांबत नाही.

session.cookie_secure=1: cookie HTTPS वरच पाठवण्यासाठी. HTTP-only lab वर sessions का टिकत नाहीत हे या setting मुळे असू शकतं.

php --ini | grep "Loaded Configuration"
sudo sed -i 's/^expose_php = On/expose_php = Off/' /etc/php.ini              # Amazon Linux
sudo sed -i 's/^display_errors = On/display_errors = Off/' /etc/php.ini
sudo service php-fpm restart                                                 # Ubuntu: php8.3-fpm
curl -I http://localhost/index.php | grep -i x-powered-by                    # should print nothing

Sed examples exact existing line match झाल्यावरच बदल करतात. Comments किंवा दुसरी value असेल तर काहीच बदलणार नाही. Active configuration आणि applicable service restart/reload तपासा. Mod_php असेल तर Apache config/runtime वेगळा; FPM असेल तर actual FPM service.

Security मध्ये उपयोग

Verbose DB/PHP errors paths, query details किंवा internals उघड करू शकतात. Production मध्ये user-friendly generic message आणि restricted logs ठेवा. Header नाहीसा झाला म्हणजे सर्व server fingerprinting किंवा bugs गेले असं नाही.

Practice

एका lab server वर आवश्यक settings लागू करा. योग्य PHP handler restart करा. PHP response वर curl -I ने X-Powered-By header तपासा; proxy/app दुसरीकडून header देत असेल तर त्याचा source शोधा.

Chapter recap

Dynamic app server-side code चालवतो; database गरजेनुसार वापरतो.

Apache mod_php/FPM, Nginx साठी या course मध्ये FastCGI/FPM.

LAMP = Linux, Apache, MySQL/MariaDB, PHP; LEMP मध्ये Nginx.

OS योग्य package names, service names आणि socket paths वापरा.

502 साठी upstream/FPM तपासा; raw PHP leak साठी handler mapping. Debug pages काढा.

Prepared statements, context-appropriate output encoding, limited DB permissions आणि production error settings वापरा.

आता पुढे MySQL सविस्तर शिकू.

रवींद्र बागले यांची tip

Deploy करताना display_errors Off, expose_php Off आणि info.php काढली आहे का हे तपासा. फक्त CLI php.ini बदलून web config बदललं असेल असं गृहीत धरू नका.
