FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Bara ett inlägg till!
|
Att ge ordentlig felrapportering på en utvecklingsserver samt för admins är egentligen en självklarhet, men jag har sett skräckexempel där webbutvecklare sitter och programmerar direkt mot säkerhetsmässigt uruselt konfigurerade tiokronors-webbhotell där man inte ens har tillgång till felloggen. Även om man har konfigurerat PHP vettigt på utvecklingssajten/-servern (error_reporting = E_ALL, display_errors = On, log_errors = On) kan man missa en hel del felutskrifter. På sidor som inte skriver ut något innehåll utan bara gör en redirect är det omöjligt att hinna se om något fel inträffar. Visst kan man ha som vana allt regelbundet kika i felloggen, men det är inte på långa vägar lika smidigt som att se felen direkt i webbläsaren. Därför skriver jag den här jätteenkla guiden för ett mer funktionsdugligt och säkrare Internet-Sverige.
1. Inkludera den här funktionen: Kod:
function myErrorHandler($errno, $errstr, $errfile, $errline) { switch($errno) { case E_USER_ERROR: echo "<b>My ERROR</b> [$errno] $errstr<br />\n"; echo " Fatal error in line $errline of file $errfile"; echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n"; echo "Aborting...<br />\n"; exit(1); break; case E_USER_WARNING: echo "<b>My WARNING</b> [$errno] $errstr<br />\n"; exit(1); break; case E_USER_NOTICE: echo "<b>My NOTICE</b> [$errno] $errstr<br />\n"; exit(1); break; default: echo "Unkown error type: [$errno] $errstr<br />\n"; exit(1); break; } } //myErrorHandler() är en modifierad variant av den som finns på http://se.php.net/manual/en/function.set-e...ror-handler.php. Modifieringen består av att jag lagt till "exit(1)" på fler ställen. Mer information finns på nämd URL. Kod:
flush(); ob_flush(); sleep(5); 2. Följande kod aktiverar den nya fina felhanteraren och bör köras så tidigt i exekveringen som möjligt. Detta bör endast göras för administratörer och för CLI (PHP exekverat från shell/dosfönster) samt på utvecklingssajten/-servern. Vanliga användare skall alltså inte se felutskrifter då detta kan leda till exploatering av säkerhetsluckor i koden. Kod:
set_error_handler("myErrorHandler"); Det vore bra med ett eget forum för tips och tricks. |
|||
![]() |
![]() |
Svara |
|
|