Video: Hell in 3 seconds 2024
Om din applikation körs på Apache (som mer än hälften webbplatser på Internet gör) kan du överväga att aktivera SuExec i din Apache-konfiguration. SuExec är en mekanism som är buntad med Apache som gör att skript körs som den användare som äger skriptet, istället för att köra dem som webbservernvändare.
I en icke-SuExec-miljö körs alla skript som samma användar-ID som själva webbservern. Tyvärr kan ett sårbart skript ge en skadlig användare tillgång till bakdörren till hela webbservern, inklusive skript som körs på andra webbplatser som är värd på samma server.
SuExec försöker mildra detta problem genom att begränsa webbapplikationer till sina egna områden och köra dem under deras ägares användar-ID, snarare än under webbserverns användar-ID. Till exempel skulle detta skript köras under användarnamnet för jsmith:
/ home / ~ jsmith / public_html / scripts / please_hack_me. php
En skadlig användare kan utnyttja det här skriptet, men han eller hon skulle bara ha tillgång till filer och program som jsmith-användaren får använda. Alla andra användare på servern skulle vara skyddade från jsmiths osäkra skript.
Det kan vara svårt att få SuExec att fungera korrekt med virtuella värdar, eller flera oberoende webbplatser som är fysiskt placerade på samma webbserver. SuExec är utformat för att köra skript som finns i webbserverns dokumentrots.
De flesta virtuella värdar skapas på ett sätt som ger varje enskild webbplats en egen dokumentrots, och varje webbplatss dokumentrots finns inte under webbserverns dokumentrots. För att komma runt denna begränsning måste systemadministratören lägga till varje virtuell värds dokumentrots till webbserverns dokumentrotsvariabel i Apache-konfigurationsfilen.
SuExec kräver också att PHP-skript körs som Common Gateway Interface (CGI), vilket är långsammare än att köra PHP som en förkompilerad modul under Apache. CGI var den första användbara modellen för webbapplikationer, och används fortfarande för enkla skript. Men när du lämnar riket av PHP-skript och börjar skriva fullfjädrada applikationer, behöver du prestationshöjningen av förkompilerade PHP.
För ganska enkla webbservrar kan SuExec hålla en osäker applikation från att trampa över allt annat. Men i en mer komplex miljö med virtuella servrar, förkompilerade moduler och dussintals eller hundratals användare behöver du en säkerhetsmodell som är lite mer robust.