Nanguna nga PHP Hardening Security Tips para sa Linux Servers


Kini dili brainier nga PHP mao ang usa sa labing gigamit sa server scripting programming mga pinulongan. Makataronganon alang sa usa ka tig-atake sa pagpangita sa lain-laing mga paagi diin siya makahimo sa pagmaniobra sa PHP tungod kay kini kanunay nga gipares sa MySQL ug makahimo sa pag-access sa pribadong data sa imong mga tiggamit.

Sa bisan unsa nga paagi, wala kami nag-angkon nga ang PHP huyang o adunay pipila ka seryoso nga mga isyu pinaagi sa default apan kinahanglan namon nga sigurohon nga among i-tweak ang PHP sa paagi nga kini mahimong labi ka lig-on kaysa kaniadto.

1. Kuhaa ang Wala Kinahanglang PHP Modules

Sa kasagaran, makakuha ka og set sa PHP modules nga makatabang sa lain-laing mga buluhaton apan ang pipila ka wala kinahanglana nga modules mahimong dili mapuslanon sa matag proyekto. Aron ilista ang magamit nga mga module sa PHP, gamita ang gihatag nga mando:

$ php -m

Ang mga module nahimutang sa /etc/php.d/ directory ug daling mausab ang atong kasamtangang direktoryo ngadto sa /etc/php.d/ pinaagi sa paggamit sa mosunod nga cd command.

cd /etc/php.d/

Ang hinungdan ngano nga gibag-o namon ang direktoryo aron matangtang ang mga module kay lahi ang ngalan sa mga module sa orihinal nga direktoryo. Karon, ilista ang magamit nga mga module pinaagi sa gihatag nga mando:

$ ls

Pananglitan, atong tangtangon ang curl module pinaagi sa paggamit sa gihatag nga sugo:

$ sudo rm -r 20-curl.ini

2. I-disable ang Remote PHP Code Execution

Sa kadaghanan nga mga kaso, ang layo nga mga koneksyon dili kasaligan. Pinaagi sa pag-disable sa pag-access sa mga fopen wrapper, mahimo ra nila ma-access ang mga lokal nga file. Aron ma-disable ang fopen, kinahanglan natong ablihan ang PHP configuration file pinaagi sa paggamit sa gihatag nga command:

$ sudo nano /etc/php.ini

Karon, gamita ang CRTL + w ug i-type ang allow_url_fopen nga magbutang kanamo sa piho nga mga linya gikan diin among i-disable ang mga kapilian.

allow_url_fopen=Off
allow_url_include=Off

Kung nahuman na nimo ang mga pagbag-o, i-save ang config file pinaagi sa CTRL + O ug pindota ang Enter.

3. I-disable ang PHP Information Leakage

Kung dili ma-disable, dali nga mailhan sa kalibutan kung unsang bersyon sa PHP ang gigamit karon sa among web server. Mahimong dili kini usa ka dako nga butang apan ang pagpahibalo sa tig-atake nga mahibal-an ang eksaktong bersyon mahimong peligroso.

$ sudo nano /etc/php.ini

Karon, usba ang mga default ngadto sa \Off.

expose_php=Off

4. I-disable ang PHP Error Logs

Sa kasagaran, ang matag sayup sa among web server makita sa among mga bisita, lakip ang mga tig-atake. Aron masiguro nga walay bisan usa sa mga sayup nga makita ni bisan kinsa, kinahanglan namon nga magbag-o sa among PHP config file.

$ sudo nano /etc/php.ini

Ug usba ang default setting sa pagpakita sa error logs ngadto sa \Off.

display_errors = Of

Apan unsa man kung ikaw usa ka developer ug kinahanglan nga adunay mga error log aron mabuntog ang mga isyu sa pag-uswag? Ayaw kabalaka, adunay usa ka paagi aron makuha ang imong mga file sa log pinaagi lamang sa paghimo og gamay nga pagbag-o sa parehas nga config file.

Kinahanglan lang nato nga i-enable ang log_errors ug maghatag ug agianan paingon sa error_log diin ang atong mga log files itago.

log_errors=On
error_log=/var/log/httpd/php_scripts_error.log

5. PHP Resource Control

Sumala sa amon, ang pagdumala sa mga kapanguhaan mao ang labing hinungdanon nga bahin sa pagsiguro sa PHP. Dinhi, maggahin kami usa ka piho nga kantidad sa oras sa pagpatuman, oras sa pag-input, ug limitasyon sa panumduman aron kung sa unsang paagi makompromiso ang among script, ihunong ang pagpatuman pagkahuman sa usa ka oras.

Gipili namo ang 25 segundos alang sa pagpatuman ug oras sa pag-input ug 30MB nga limitasyon sa memorya. Sigurado nga mahimo nimo kini ipasibo sumala sa imong mga panginahanglan.

max_execution_time = 25
max_input_time = 25
memory_limit = 30M

6. Limitahan ang PHP File Access

Aron mapugngan ang pag-access sa file, among palihokon ang open_basedir nga magsiguro nga ang PHP mahimo ra nga maglakip sa mga file gikan sa among nalista nga mga direktoryo.

Mahinungdanon: I-blocklist niini ang tanan nga ubang mga direktoryo ug kinahanglan namon nga idugang ang hinungdanon nga mga direktoryo nga mano-mano nga naglakip usab sa pagdugang temporaryo nga mga file ug mga direktoryo sa sesyon.

open_basedir = "/home/sagar/public_html:/var/lib/php/tmp_upload:/var/lib/php/session"

7. I-configure ang PHP File Uploads

Kung ang imong aplikasyon wala magkinahanglan sa pag-upload sa mga file gikan sa katapusan sa user, kanunay nga gitambagan nga i-disable ang mga pag-upload sa file. Gipugngan niini ang mga tig-atake sa pag-upload sa mga peligro nga mga script nga mahimong makadaot sa tibuuk nga aplikasyon sa katapusan.

file_uploads = Off

Apan unsa man kung ang imong aplikasyon gidisenyo aron makakuha og mga file gikan sa katapusan sa tiggamit? Niana nga kaso, kinahanglan nimong palihokon ang mga pag-upload sa file apan paningkamuti nga pakunhuran ang labing taas nga wanang ug pakunhuran ang gidaghanon sa labing kadaghan nga mga file nga mahimong ma-upload gikan sa usa ka hangyo.

file_uploads = On
upload_max_filesize = 1M
max_file_uploads = 1

Sa PHP, sa default, ang temporaryo nga mga file gibutang sa usa ka direktoryo nga mahimo isulat sa tanan nga tiggamit sa sistema. Ang default nga lokasyon kinahanglan ibalhin sa usa ka mas luwas nga lugar ug siguruha nga wala kini nahimutang sa sulud sa web root.

Ingon nga among gigamit ang open_basedir, among gamiton ang parehas nga lokasyon ingon nga among gi-whitelist kini.

upload_tmp_dir = /var/lib/php/tmp_upload

8. I-disable ang Dangerous PHP Functions

Ang PHP adunay lain-laing mga gimbuhaton nga mahimo pinaagi sa default ug mahimong makatabang alang sa mga katuyoan sa pagpalambo. Apan daghang mga gimbuhaton ang magamit sa mga hacker aron pahimuslan ang among webs server ug ang pag-disable niini makadugang usa ka layer sa seguridad.

Kami adunay usa ka baldado nga hugpong sa mga gimbuhaton ug siguruha nga susihon kini sa dili pa maghimo mga pagbag-o sa file sa pag-configure.

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

9. Usba ang SOAP Cache Directory

Sa among pag-ilis sa default temp directory ug session, ang sama nga magamit sa SOAP cache kay dili kini dapat i-save sa default directory. Siguroha nga kini gitipigan sa luwas nga dapit.

soap.wsdl_cache_dir = /var/lib/php/soap_cache

10. Kontrola ang PHP POST Size

Pinaagi sa pagkontrolar sa gidak-on sa POST, masiguro nato ang atong server gikan sa usa ka hacker nga misulay sa pag-clot sa mga kahinguhaan sa server pinaagi sa pagpadala og dagkong mga file. Kini nagluwas kanamo gikan sa dili gusto nga pag-crash sa server ug hinay nga oras sa pagtubag.

post_max_size=4M

11. Panalipdi ang PHP Configurations

Samtang nagtangtang sa wala kinahanglana nga mga file, kanunay namon nga gitangtang ang pipila ka hinungdanon nga mga file o bisan mga direktoryo. Mao nga kinahanglan naton i-tweak ang mga setting sa paagi nga bisan ang mga tiggamit sa gamut dili makatangtang niini. Aron makahimo og mga file ug mga direktoryo, atong gamiton ang chattr nga adunay lain-laing mga bandila.

Sa higayon nga imong gamiton ang gihatag nga sugo, dili na nimo mabag-o ang usa ka piho nga file o tangtangon kini.

$ sudo chattr +i /etc/php.ini

Samtang naningkamot sa pagtangtang sa usa ka dili mausab nga file, kini magpakita sa usa ka sayup nga nag-ingon nga \Operation not permitted.

$ sudo rm -r /etc/php.ini

Apan unsa man kung gusto nimo nga ipadayon ang pagsulat sa mga file samtang gihimo kini nga dili mausab? Dali nimong makab-ot kana pinaagi sa paggamit sa +a nga bandera imbes sa +i.

$ sudo chattr +a /etc/php.ini

Mahimong adunay pipila ka mga kaso diin dili na nimo kinahanglan ang daan nga config file ug sa kana nga kaso, kinahanglan namon nga i-unset ang mga hiyas.

$ sudo chattr -i /etc/php.ini

Sa susama, kung nag-uban ka sa +a nga mga attribute sa proseso sa paghimo sa mga file nga dili mausab, mahimo nimo kining balihon pinaagi sa paggamit sa gihatag nga sugo:

$ sudo chattr -a /etc/php.ini

12. Gamita ang SSL Certificates para sa HTTPS

Karong panahona, ang matag modernong browser sama sa Google Chrome, Firefox, Opera, ug uban pa nagrekomendar sa paggamit sa HTTPS para sa mga web server. Ingon nga ang HTTPS naghatag usa ka sigurado ug naka-encrypt nga agianan sa pag-access alang sa dili kasaligan nga mga site, makahatag kami usa ka kasaligan nga kasinatian sa among mga tiggamit.

Pinaagi sa pagdugang sa HTTPS, mapanalipdan kita batok sa mga pag-atake sa XSS lakip na ang pagpugong sa mga hacker sa pagbasa sa gidala nga datos gamit ang mga code.

Aron mahimo ang HTTPS, among i-install ug gamiton ang libre nga Let's Encrypt SSL Certificate sa server.

$ sudo dnf install epel-release 
$ sudo dnf install certbot python3-certbot-apache mod_ssl
$ sudo certbot --apache -d domain.com   [For Apache]
$ sudo certbot --nginx -d domain.com    [For Nginx]

13. Regular nga pag-update sa PHP

Ingon nga kini usa ka bukas nga gigikanan nga sinultian, kini gipunting sa hapit adlaw-adlaw nga sukaranan. Tingali dili kini usa ka hinungdanon nga lakang apan makaluwas kanimo gikan sa daghang kahuyang. Busa siguruha nga ipadayon ang imong mga pakete sa PHP nga labing bag-o nga makaluwas kanimo gikan sa daghang posible nga mga kahuyangan.

# yum update & yum upgrade    [On RHEL-based systems]
# apt update && apt upgrade   [On Debian-based systems]

Kini ang among gikuha kung giunsa nimo dali nga mapauswag ang seguridad sa PHP sa mga sistema sa Linux. Sa tibuok niini nga panudlo, gisulayan namo nga himoong simple ang mga butang kutob sa among mahimo ug kung aduna ka pay mga pagduhaduha, palihug ipahibalo kanamo sa mga komento.