sql >> Databasteknik >  >> RDS >> Mysql

Begränsa PHP-exekvering?

Det finns flera lager som du behöver skydda.

Några av värdarna felaktigt lita på PHP-"skydd" som open_basedir, safe_mode (äldre PHP), disable_functions etc.

Även PHP anser INTE att de är säkerhetsfunktioner - http://php.net/security- note.php

Dessa kan inaktiveras med valfri exploatering för PHP och då är hela systemet dömt, gör inte gör det.

Hur det ska göras

botten

  • Separat OS-nivå/systemanvändare för varje värdplats
  • korrekta behörigheter (en kan inte visa/redigera sidan på den andra) - se också till att underkataloger har rätt behörighet eftersom de kommer att vara lika
  • separata sessionsfiler (MÅNGA webbhotell placerar sessionsfiler för varje PHP-värd webbplats i samma katalog, det är dåligt dåligt!

Apache har äntligen fått sin egen modul för detta - Apache MPM-ITK .

Lång historia kort: föreställ dig detta som att du skulle ge användaren ett skal på maskinen (under hans eget uid) - han kan inte göra någonting mot de andra värdplatserna.

  1. olika uid/gid
  2. systembehörigheter
  3. ramverk som SELinux, AppArmor och liknande
  4. grsäkerhet om du vill vara hardcore.. men systemet blir svårare att underhålla.

går upp?

Du kan bli mer hård. Det bästa jag har sett är ett delat bibliotek för apache (eller vad du nu använder) - som används när apache startas med LD_PRELOAD och den implementerar alla potentiellt skadliga systemanrop som system() , execve() och i princip alla andra samtal som du tycker är dåliga.

Jag har inte sett en bra implementering av detta där ute ännu (förutom anpassade någonstans) - rätta mig om jag har fel.

Se till att implementera en vitlista för detta som t.ex. mail() i PHP kör sendmail som standard och det fungerar inte längre.

slutsats

Lägg till klassiska disable_functions, open_basedir, etc. i global php.ini, lägg till session.save_path till varje vhost - lägg sessioner i användarkataloger. Se till att användare inte delar något .

Implementera underliggande OS-nivåseparation korrekt.

Få hardcore med grsec och LD_PRELOAD lib hooking systemanrop.

Separation, separation, separation .. snart nog kommer system som Docker att tillhandahålla LXC-baserade behållare för att separera användare på kärnnivå men det är inte riktigt färdigt för produktion ännu (imho).




  1. Hur kan vi skilja LEFT OUTER JOIN vs Left Join

  2. Använder du LIMIT inom GROUP BY för att få N resultat per grupp?

  3. Skaffa mySQL MONTH() för att använda inledande nollor?

  4. Genomsnittlig tid för att svara på meddelande