sql >> Database >  >> RDS >> Mysql

PHP-uitvoering beperken?

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.

  1. verschillende uid/gid
  2. systeemrechten
  3. frameworks zoals SELinux, AppArmor en dergelijke
  4. 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).




  1. Hoe JSON-object van PHP te retourneren om te lezen vanuit de Android-app

  2. phpMyBackupPro - Een webgebaseerde MySQL-back-uptool voor Linux

  3. Op zoek naar hoofdletterongevoelige MySQL-sortering waarbij een !=ä

  4. Een andere manier om de SQL-query te verbeteren om unie te voorkomen?