Parhaat PHP-turvavinkit Linux-palvelimille


Ei ole sen ihmeellisempää, että PHP on yksi eniten käytetyistä palvelimen komentosarjaohjelmointikielistä. Hyökkääjän on järkevää löytää erilaisia tapoja käsitellä PHP:tä, koska se on usein yhdistetty MySQL:n kanssa ja mahdollistaa pääsyn käyttäjiesi yksityisiin tietoihin.

Emme missään tapauksessa väitä, että PHP on haavoittuvainen tai siinä on vakavia ongelmia oletuksena, mutta meidän on varmistettava, että säädämme PHP:tä siten, että se voi olla vahvempi kuin koskaan ennen.

1. Poista tarpeettomat PHP-moduulit

Oletuksena saat joukon PHP-moduuleja, joista voi olla apua erilaisissa tehtävissä, mutta joistakin tarpeettomista moduuleista ei välttämättä ole hyötyä jokaisessa projektissa. Listaa käytettävissä olevat PHP-moduulit käyttämällä annettua komentoa:

php -m

Moduulit sijaitsevat hakemistossa /etc/php.d/ ja voivat helposti muuttaa nykyisen hakemistomme muotoon /etc/php.d/ käyttämällä seuraavaa cd-komentoa.

cd /etc/php.d/

Syy miksi muutamme hakemistoa moduulien poistamiseksi, on se, että moduulit on nimetty aivan eri tavalla alkuperäisessä hakemistossa. Listaa nyt saatavilla olevat moduulit annetulla komennolla:

ls

Poistetaan esimerkiksi curl-moduuli käyttämällä annettua komentoa:

sudo rm -r 20-curl.ini

2. Poista PHP-koodin etäsuoritus käytöstä

Useimmissa tapauksissa etäyhteyksiin ei voi luottaa. Kun estetään fopen-kääreiden käyttö, he voivat käyttää vain paikallisia tiedostoja. Fopenin poistamiseksi käytöstä meidän on avattava PHP-määritystiedosto käyttämällä annettua komentoa:

sudo nano /etc/php.ini

Käytä nyt CRTL + w ja kirjoita allow_url_fopen, joka ohjaa meidät tietyille riveille, joilla poistamme nämä vaihtoehdot käytöstä.

allow_url_fopen=Off
allow_url_include=Off

Kun olet tehnyt muutokset, tallenna määritystiedosto painamalla CTRL + O ja paina Enter.

3. Poista PHP-tietovuoto käytöstä

Kun sitä ei ole poistettu käytöstä, maailma voi helposti tunnistaa, mitä PHP-versiota verkkopalvelimemme tällä hetkellä käyttää. Tämä ei ehkä kuulosta isolta jutulta, mutta hyökkääjän tiedoksi antaminen tarkan version voi olla vaarallista.

sudo nano /etc/php.ini

Muuta nyt oletusasetuksiksi "Pois".

expose_php=Off

4. Poista PHP-virhelokit käytöstä

Oletuksena jokainen verkkopalvelimemme virhe näkyy vierailijoillemme, mukaan lukien hyökkääjät. Varmistaaksemme, että mikään virheistä ei näy kenellekään, meidän on tehtävä muutoksia PHP-asetustiedostoomme.

sudo nano /etc/php.ini

Ja muuta virhelokien näyttämisen oletusasetukseksi "Pois".

display_errors = Of

Mutta entä jos olet kehittäjä ja tarvitset virhelokeja kehitysongelmien ratkaisemiseksi? Älä huoli, on olemassa tapa saada lokitiedostot tekemällä vain pieni muutos samaan asetustiedostoon.

Meidän on vain otettava log_errors käyttöön ja annettava polku error_log-tiedostoon, johon lokitiedostomme tallennetaan.

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

5. PHP Resource Control

Meidän mielestämme resurssien hallinta on tärkein osa PHP:n turvaamisessa. Tässä aiomme varata kiinteän määrän suoritusaikaa, syöttöaikaa ja muistirajaa, joten jos skriptimme jotenkin vaarantuu, suoritus pysähtyy tietyn ajan kuluttua.

Olemme valinneet 25 sekuntia suoritus- ja syöttöajaksi ja 30 Mt muistirajoitukseksi. Toki voit muokata sitä tarpeidesi mukaan.

max_execution_time = 25
max_input_time = 25
memory_limit = 30M

6. Rajoita PHP-tiedostojen käyttöä

Rajoittaaksemme tiedostojen käyttöä otamme käyttöön open_basedir-toiminnon, joka varmistaa, että PHP voi sisältää vain tiedostoja listatuista hakemistoistamme.

Tärkeää: Tämä estää kaikki muut hakemistot ja edellyttää, että lisäämme tärkeät hakemistot manuaalisesti, mikä sisältää myös tilapäisten tiedostojen ja istuntohakemistojen lisäämisen.

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

7. Määritä PHP-tiedostojen lataukset

Jos sovelluksesi ei edellytä tiedostojen lataamista käyttäjän päästä, on aina suositeltavaa poistaa tiedostojen lataaminen käytöstä. Tämä estää hyökkääjiä lataamasta vaarallisia skriptejä, jotka voivat lopulta vahingoittaa koko sovellusta.

file_uploads = Off

Mutta entä jos sovelluksesi on suunniteltu saamaan tiedostoja käyttäjältä? Siinä tapauksessa sinun on sallittava tiedostojen lataukset, mutta yritä vähentää enimmäistilaa ja vähentää yhdestä pyynnöstä ladattavien tiedostojen enimmäismäärää.

file_uploads = On
upload_max_filesize = 1M
max_file_uploads = 1

PHP:ssä väliaikaiset tiedostot sijoitetaan oletusarvoisesti hakemistoon, johon kaikki järjestelmän käyttäjät voivat kirjoittaa. Oletussijainti on vaihdettava turvallisempaan paikkaan ja varmistettava, ettei se sijaitse Web-juuren sisällä.

Koska olemme käyttäneet open_basedir-palvelua, käytämme samaa sijaintia kuin olemme jo lisänneet sen sallittujen luetteloon.

upload_tmp_dir = /var/lib/php/tmp_upload

8. Poista vaaralliset PHP-toiminnot käytöstä

PHP:ssä on oletuksena käytössä useita toimintoja, joista voi olla apua kehitystarkoituksiin. Mutta hakkerit voivat käyttää monia toimintoja hyödyntääkseen verkkopalvelintamme, ja niiden poistaminen käytöstä lisää suojaustasoa.

Toiminnot on poistettu käytöstä, ja muista tarkistaa ne ennen kuin teet muutoksia asetustiedostoon.

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

9. Muuta SOAP-välimuistihakemistoa

Kun muutimme väliaikaista oletushakemistoa ja istuntoa, sama koskee SOAP-välimuistia, koska sitä ei pitäisi tallentaa oletushakemistoon. Varmista, että se on tallennettu turvalliseen paikkaan.

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

10. Ohjaa PHP POSTin kokoa

Säätämällä POST:n kokoa voimme suojata palvelimemme hakkereilta, jotka yrittävät tukahduttaa palvelinresursseja lähettämällä valtavia tiedostoja. Tämä säästää meidät ei-toivotuilta palvelinkaatumisilta ja hitaalta vasteajalta.

post_max_size=4M

11. Suojaa PHP-kokoonpanot

Kun poistamme tarpeettomia tiedostoja, poistamme usein tärkeitä tiedostoja tai jopa hakemistoja. Joten meidän on säädettävä asetuksia siten, että edes pääkäyttäjät eivät voi poistaa niitä. Käytämme tiedostojen ja hakemistojen luomiseen chattria eri lipuilla.

Kun olet käyttänyt annettua komentoa, et voi enää muokata tiettyä tiedostoa tai poistaa sitä.

sudo chattr +i /etc/php.ini

Kun yrität poistaa muuttumattoman tiedoston, se näyttää virheilmoituksen "Toiminta ei sallittu".

sudo rm -r /etc/php.ini

Mutta entä jos haluat jatkaa näiden tiedostojen kirjoittamista samalla kun teet niistä muuttumattomia? Voit saavuttaa sen helposti käyttämällä +a-merkkiä +i-merkin sijaan.

sudo chattr +a /etc/php.ini

Joissakin tapauksissa et enää tarvitse vanhaa konfigurointitiedostoa, ja siinä tapauksessa meidän on poistettava määritteet.

sudo chattr -i /etc/php.ini

Vastaavasti, jos käytit +a-attribuutteja tehdessäsi tiedostoista muuttumattomia, voit peruuttaa sen käyttämällä annettua komentoa:

sudo chattr -a /etc/php.ini

12. Käytä SSL-varmenteita HTTPS:lle

Nykyään jokainen moderni selain, kuten Google Chrome, Firefox, Opera ja muut, suosittelee HTTPS:n käyttöä verkkopalvelimille. Koska HTTPS tarjoaa suojatun ja salatun pääsykanavan epäluotettaville sivustoille, voimme tarjota käyttäjillemme luotettavan kokemuksen.

Lisäämällä HTTPS voimme suojautua XSS-hyökkäyksiltä, mukaan lukien estää hakkereita lukemasta siirrettyjä tietoja koodeilla.

HTTPS:n ottamiseksi käyttöön asennamme palvelimelle ilmaisen Let’s Encrypt SSL Certificate -palvelun ja käytämme sitä.

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. Päivitä PHP säännöllisesti

Koska se on avoimen lähdekoodin kieli, sitä korjataan melkein päivittäin. Se ei ehkä vaikuta kovin tärkeältä askeleelta, mutta voi säästää sinut suurelta haavoittuvuudella. Varmista siis, että pidät PHP-pakettisi ajan tasalla, mikä säästää sinut monilta mahdollisilta haavoittuvuuksilta.

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

Tämä oli näkemyksemme siitä, kuinka voit helposti parantaa PHP:n turvallisuutta Linux-järjestelmissä. Tämän opetusohjelman aikana olemme yrittäneet tehdä asioista mahdollisimman yksinkertaisia, ja jos sinulla on edelleen epäilyksiä, ilmoita siitä meille kommenteissa.