Er zijn verschillende lagen die je moet beschermen.
Sommige hosters onjuist vertrouw op PHP "beschermingen" zoals open_basedir, safe_mode (oudere PHP's), disable_functions enz.
Zelfs PHP beschouwt ze NIET als beveiligingsfuncties - http://php.net/security- opmerking.php
Deze kunnen worden uitgeschakeld met elke exploit voor PHP en dan is het hele systeem gedoemd, doe niet doe dat.
Hoe het moet
de onderkant
- Afzonderlijke OS-niveau/systeemgebruiker voor elke gehoste site
- juiste machtigingen (de ene kan de pagina van de andere niet bekijken/bewerken) - zorg er ook voor dat de submappen de juiste machtigingen hebben, aangezien ze vergelijkbaar zullen zijn
- afzonderlijke sessiebestanden (VEEL webhostings plaatsen sessiebestanden van elke door PHP gehoste site in dezelfde map, dat is erg slecht slecht!
Apache heeft hier eindelijk een eigen module voor - Apache MPM-ITK .
Lang verhaal kort: stel je dit voor zoals je de gebruiker een shell op de machine zou geven (onder zijn eigen uid) - hij kan niets doen met de andere gehoste sites.
- verschillende uid/gid
- systeemrechten
- frameworks zoals SELinux, AppArmor en dergelijke
- grsecurity als je hardcore wilt zijn.. maar het systeem zal moeilijker te onderhouden zijn.
omhoog?
Je kunt meer hardcore krijgen. De beste die ik heb gezien is een gedeelde bibliotheek voor apache (of wat je ook gebruikt) - die wordt gebruikt wanneer apache wordt gestart met LD_PRELOAD
en het implementeert alle potentieel kwaadaardige systeemaanroepen zoals system()
, execve()
en eigenlijk elke andere oproep die u slecht vindt.
Ik heb hier nog geen goede implementatie van gezien (behalve aangepaste ergens) - corrigeer me als ik het mis heb.
Zorg ervoor dat u hiervoor een witte lijst implementeert, zoals bijv. mail() in PHP voert standaard sendmail uit en dat zal niet meer werken.
conclusie
Voeg klassieke disable_functions, open_basedir, etc. toe aan globale php.ini, voeg session.save_path toe aan elke vhost - zet sessies in gebruikersmappen. Zorg ervoor dat gebruikers niets delen .
Implementeer de onderliggende scheiding op OS-niveau correct.
Krijg hardcore met grsec en LD_PRELOAD lib hooking-systeemaanroepen.
Scheiding, scheiding, scheiding ... binnenkort zullen systemen zoals Docker LXC-gebaseerde containers leveren om gebruikers op kernelniveau te scheiden, maar het is nog niet helemaal klaar voor productie (imho).