Helstu PHP herðandi öryggisráðleggingar fyrir Linux netþjóna


Það er ekki skynsamlegra að PHP er eitt mest notaða forskriftarforritunarmál miðlara. Það er skynsamlegt fyrir árásarmann að finna ýmsar leiðir til að vinna með PHP þar sem það er oft parað við MySQL og gerir aðgang að einkagögnum notenda þinna.

Á nokkurn hátt, við erum ekki að halda því fram að PHP sé viðkvæmt eða hafi alvarleg vandamál sjálfgefið, en við verðum að ganga úr skugga um að við fínstillum PHP á þann hátt að það geti verið öflugra en nokkru sinni fyrr.

1. Fjarlægðu óþarfa PHP einingar

Sjálfgefið er að þú færð sett af PHP einingum sem geta verið gagnlegar í ýmsum verkefnum en sumar óþarfa einingar gætu ekki verið gagnlegar fyrir hvert verkefni. Til að skrá tiltækar PHP einingar, notaðu tilgreinda skipun:

$ php -m

Einingarnar eru staðsettar á /etc/php.d/ skránni og geta auðveldlega breytt núverandi skrá okkar í /etc/php.d/ með því að nota eftirfarandi cd skipun.

cd /etc/php.d/

Ástæðan fyrir því að við erum að breyta möppunni til að fjarlægja einingar er einingarnar heita nokkuð öðruvísi í upprunalegu möppunni. Listaðu nú tiltækar einingar með tilgreindri skipun:

$ ls

Til dæmis skulum við fjarlægja krullaeininguna með því að nota tilgreinda skipun:

$ sudo rm -r 20-curl.ini

2. Slökktu á fjarframkvæmd PHP kóða

Í flestum tilfellum er ekki hægt að treysta fjartengingum. Með því að slökkva á aðgangi að fopen umbúðum geta þeir aðeins fengið aðgang að staðbundnum skrám. Til að slökkva á fopen þurfum við að opna PHP stillingarskrána með því að nota tilgreinda skipun:

$ sudo nano /etc/php.ini

Nú skaltu nota CRTL + w og sláðu inn allow_url_fopen sem mun lenda okkur á tilteknum línum þaðan sem við munum slökkva á þessum valkostum.

allow_url_fopen=Off
allow_url_include=Off

Þegar þú hefur lokið við breytingar skaltu vista stillingarskrána með CTRL + O og ýta á Enter.

3. Slökktu á PHP upplýsingaleka

Þegar það er ekki óvirkt getur heimurinn auðveldlega greint hvaða útgáfa af PHP er notuð af vefþjóninum okkar. Þetta hljómar kannski ekki eins og mikið mál en að láta árásarmanninn vita nákvæmlega útgáfuna getur verið hættulegt.

$ sudo nano /etc/php.ini

Nú skaltu breyta sjálfgefnum stillingum í \Off.

expose_php=Off

4. Slökktu á PHP villuskrám

Sjálfgefið er að hver villa á vefþjóninum okkar sé sýnileg gestum okkar, þar á meðal árásarmönnum. Til að tryggja að engin af villunum sé sýnileg neinum verðum við að gera breytingar á PHP stillingarskránni okkar.

$ sudo nano /etc/php.ini

Og breyttu sjálfgefna stillingu fyrir birtingu villuskrár í \Off.

display_errors = Of

En hvað ef þú ert verktaki og þarft að hafa villuskrár til að vinna bug á þróunarvandamálum? Ekki hafa áhyggjur, það er leið til að fá annálaskrárnar þínar með því að gera aðeins örlitla breytingu á sömu stillingarskránni.

Við verðum bara að virkja log_errors og gefa slóð að error_log þar sem log skrárnar okkar verða geymdar.

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

5. PHP Resource Control

Samkvæmt okkur er stjórnun auðlinda mikilvægasti hlutinn þegar PHP er tryggt. Hér ætlum við að úthluta föstu magni af framkvæmdartíma, inntakstíma og minnismörkum þannig að ef smáforritið okkar verður í hættu verður keyrslan stöðvuð eftir ákveðinn tíma.

Við höfum valið 25 sekúndur fyrir framkvæmd og inntakstíma og 30MB minnistakmörk. Auðvitað geturðu sérsniðið það eftir þínum þörfum.

max_execution_time = 25
max_input_time = 25
memory_limit = 30M

6. Takmarka aðgang að PHP skrám

Til að takmarka skráaaðgang ætlum við að virkja open_basedir sem mun tryggja að PHP getur aðeins innihaldið skrár úr skrámum okkar sem eru skráðar.

Mikilvægt: Þetta mun setja allar aðrar möppur á bannlista og krefjast þess að við bætum mikilvægum möppum við handvirkt sem felur einnig í sér að bæta við tímabundnum skrám og setuskrám.

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

7. Stilltu PHP skráarupphleðslu

Ef forritið þitt þarf ekki að hlaða upp skrám frá enda notandans er alltaf ráðlagt að slökkva á skráaupphleðslu. Þetta kemur í veg fyrir að árásarmenn geti hlaðið upp hættulegum forskriftum sem gætu á endanum skaðað allt forritið á endanum.

file_uploads = Off

En hvað ef forritið þitt er hannað til að fá skrár frá enda notandans? Í því tilviki verður þú að virkja skráaupphleðslu en reyndu að minnka hámarkspláss og fækka hámarksskrám sem hægt er að hlaða upp frá einni beiðni.

file_uploads = On
upload_max_filesize = 1M
max_file_uploads = 1

Í PHP, sjálfgefið, eru tímabundnu skrárnar settar í möppu sem allir kerfisnotendur geta skrifað. Skipta verður um sjálfgefna staðsetningu á öruggari stað og ganga úr skugga um að hún sé ekki staðsett innan vefrótarinnar.

Þar sem við höfum notað open_basedir munum við nota sama stað og við höfum þegar sett það á hvítlista.

upload_tmp_dir = /var/lib/php/tmp_upload

8. Slökktu á hættulegum PHP-aðgerðum

PHP hefur ýmsar aðgerðir virkar sjálfgefið og geta verið gagnlegar í þróunarskyni. En tölvuþrjótar geta notað margar aðgerðir til að nýta sér vefþjóninn okkar og að slökkva á þeim mun bæta við öryggislagi.

Við erum með óvirkt sett af aðgerðum og vertu viss um að athuga þær áður en þú gerir breytingar á stillingarskránni.

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

9. Breyttu SOAP Cache Directory

Þegar við breyttum sjálfgefna tímaskránni og setu, gildir það sama um SOAP skyndiminni þar sem það ætti ekki að vista í sjálfgefna skránni. Gakktu úr skugga um að það sé vistað á öruggum stað.

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

10. Stjórna PHP POST stærð

Með því að stjórna POST stærð getum við tryggt netþjóninn okkar fyrir tölvusnápur sem reynir að storka netþjónaauðlindir með því að senda risastórar skrár. Þetta bjargar okkur frá óæskilegum netþjónahruni og hægum viðbragðstíma.

post_max_size=4M

11. Verndaðu PHP stillingar

Meðan við fjarlægjum óþarfa skrár fjarlægjum við oft mikilvægar skrár eða jafnvel möppur. Svo við verðum að laga stillingar á þann hátt að jafnvel rótnotendur geti ekki eytt þeim. Til að búa til skrár og möppur munum við nota chattr með mismunandi fánum.

Þegar þú hefur notað tiltekna skipun geturðu ekki lengur breytt tiltekinni skrá eða fjarlægt hana.

$ sudo chattr +i /etc/php.ini

Þegar reynt er að fjarlægja óbreytanlega skrá mun hún sýna villu sem segir „Aðgerð ekki leyfð“.

$ sudo rm -r /etc/php.ini

En hvað ef þú vilt halda áfram að skrifa þessar skrár á meðan þú gerir þær óbreytanlegar? Þú getur auðveldlega náð því með því að nota +a fánann í stað +i.

$ sudo chattr +a /etc/php.ini

Það gætu verið tilvik þar sem þú þarft ekki lengur gömlu stillingarskrána og í því tilviki verðum við að afstilla eiginleika.

$ sudo chattr -i /etc/php.ini

Á sama hátt, ef þú fórst með +a eiginleika í því ferli að gera skrár óbreytanlegar, geturðu snúið því við með því að nota tiltekna skipun:

$ sudo chattr -a /etc/php.ini

12. Notaðu SSL vottorð fyrir HTTPS

Nú á dögum mælir hver nútíma vafri eins og Google Chrome, Firefox, Opera og aðrir með því að nota HTTPS fyrir vefþjóna. Þar sem HTTPS býður upp á örugga og dulkóðaða aðgangsrás fyrir ótraustar síður, getum við veitt notendum okkar áreiðanlega upplifun.

Með því að bæta við HTTPS getum við fengið vernd gegn XSS árásum, þar með talið að koma í veg fyrir að tölvuþrjótarnir lesi flutt gögn með kóða.

Til að virkja HTTPS munum við setja upp og nota ókeypis Let's Encrypt SSL vottorðið á þjóninum.

$ 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. Uppfærðu PHP reglulega

Þar sem það er opið tungumál verður það lagfært nánast frá degi til dags. Það virðist kannski ekki vera mikilvægt skref en getur bjargað þér frá meiriháttar varnarleysi. Svo vertu viss um að halda PHP pökkunum þínum uppfærðum sem mun bjarga þér frá fullt af mögulegum veikleikum.

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

Þetta var skoðun okkar á því hvernig þú getur auðveldlega aukið öryggi PHP í Linux kerfum. Í gegnum þessa kennslu höfum við reynt að gera hlutina einfalda eins og við getum og ef þú hefur enn einhverjar efasemdir, vinsamlegast láttu okkur vita í athugasemdunum.