sql >> Database teknologi >  >> RDS >> Mysql

Begræns PHP-udførelse?

Der er flere lag, du skal beskytte.

Nogle af hosterne forkert stole på PHP "beskyttelser" som open_basedir, safe_mode (ældre PHP'er), disable_functions osv.

Selv PHP anser dem IKKE for at være sikkerhedsfunktioner - http://php.net/security- note.php

Disse kan deaktiveres med enhver udnyttelse af PHP, og så er hele systemet dømt, ikke gør det.

Sådan skal det gøres

bunden

  • Særskilt OS-niveau/systembruger for hvert hostet websted
  • korrekte tilladelser (den ene kan ikke være i stand til at se/redigere siden på den anden) - sørg også for, at undermapper har korrekte tilladelser, da de kommer til at ligne hinanden.
  • Særskilte sessionsfiler (MANGE webhostings placerer sessionsfiler for hvert PHP-hostet websted i den samme mappe, det er dårligt dårligt dårligt!

Apache fik endelig sit eget modul til dette - Apache MPM-ITK .

Lang historie kort: Forestil dig dette, som du vil give brugeren en shell på maskinen (under hans eget uid) - han kan ikke være i stand til at gøre noget ved de andre hostede websteder.

  1. forskellige uid/gid
  2. systemtilladelser
  3. rammer som SELinux, AppArmor og lignende
  4. grsikkerhed, hvis du vil være hardcore.. men systemet vil være sværere at vedligeholde.

går op?

Du kan blive mere hard-core. Det bedste, jeg har set, er et delt bibliotek til apache (eller hvad du nu bruger) - som bruges, når apache startes med LD_PRELOAD og det implementerer alle de potentielt ondsindede systemkald som system() , execve() og i princippet ethvert andet opkald, som du finder dårligt.

Jeg har ikke set en god implementering af dette derude endnu (bortset fra brugerdefinerede et eller andet sted) - ret mig, hvis jeg tager fejl.

Sørg for at implementere en hvidliste til dette som f.eks. mail() i PHP udfører sendmail som standard, og det virker ikke længere.

konklusion

Tilføj klassiske disable_functions, open_basedir osv. til globale php.ini, tilføj session.save_path til hver vhost - sæt sessioner i brugermapper. Sørg for, at brugerne ikke deler noget .

Implementer underliggende separation på OS-niveau korrekt.

Få hardcore med grsec og LD_PRELOAD lib hooking systemopkald.

Adskillelse, adskillelse, adskillelse .. snart nok vil systemer som Docker levere LXC-baserede containere til at adskille brugere på kerneniveau, men det er ikke helt produktionsklar endnu (imho).




  1. Jeg har brug for min PHP-side for at vise mit BLOB-billede fra mysql-databasen

  2. MySQL runde op til nærmeste 5 cent

  3. Evaluering af multipla 'IN'-udtryk i 'WHERE'-sætninger i mysql

  4. Listeboks med flere valg af stat, der ikke viser alle byer i en anden listeboks (Php, mysql, ajax)