sql >> Databáze >  >> RDS >> Mysql

Omezit spouštění PHP?

Existuje několik vrstev, které musíte chránit.

Někteří hostitelé nesprávně spoléhat na "ochrany" PHP jako open_basedir, safe_mode (starší PHP), disable_functions atd.

Ani PHP je NEPOvažuje za bezpečnostní prvky - http://php.net/security- note.php

Ty lze zakázat jakýmkoliv exploitem pro PHP a pak je celý systém odsouzen k záhubě, nedělejte to udělejte to.

Jak to má být provedeno

dole

  • Pro každý hostovaný web samostatný uživatel na úrovni operačního systému/systému
  • správná oprávnění (jeden nemůže prohlížet/upravovat stránku druhého) – také se ujistěte, že podadresáře mají správná oprávnění, protože si budou podobné
  • samostatné soubory relací (SPOUSTA webhostingů ukládá soubory relací každého webu hostovaného v PHP do stejného adresáře, to je špatné, špatné!

Apache pro to konečně dostal svůj vlastní modul - Apache MPM-ITK .

Dlouhý příběh: představte si to tak, že byste uživateli poskytli shell na počítači (pod jeho vlastním uid) – nemůže být schopen nic dělat s ostatními hostovanými weby.

  1. jiné uid/gid
  2. systémová oprávnění
  3. rámce jako SELinux, AppArmor a podobné
  4. grsecurity, pokud chcete být hardcore.. ale systém bude těžší udržovat.

jde nahoru?

Můžete získat více hard-core. Nejlepší, co jsem viděl, je sdílená knihovna pro apache (nebo cokoli jiného, ​​co používáte) – která se používá, když se apache spouští pomocí LD_PRELOAD a implementuje všechna potenciálně škodlivá systémová volání jako system() , execve() a v podstatě jakýkoli jiný hovor, který považujete za špatný.

Ještě jsem neviděl dobrou implementaci tohoto tam venku (jiné než vlastní někde) - opravte mě, pokud se mýlím.

Ujistěte se, že pro to implementujete white-list jako např. mail() v PHP standardně spouští sendmail a to už nebude fungovat.

závěr

Přidejte klasické disable_functions, open_basedir atd. do globálního php.ini, přidejte session.save_path do každého vhost - vložte session do uživatelských adresářů. Ujistěte se, že uživatelé nic nesdílejí .

Správně implementujte oddělení na úrovni operačního systému.

Získejte hardcore s grsec a LD_PRELOAD lib hooking systémovými voláními.

Separace, separace, separace... brzy systémy jako Docker poskytnou kontejnery založené na LXC pro oddělení uživatelů na úrovni jádra, ale ještě to není zcela připraveno na produkci (imho).




  1. Vyberte dynamické sloupce v mysql

  2. Jaké jsou slabiny této metody ověřování uživatelů?

  3. Jak mohu provést fuzzy shodu názvů společností v MYSQL s PHP pro automatické dokončování?

  4. Jak nainstalovat SSMS