Script kiddies ErrorHandler

Aus APF Wiki [de]

Wechseln zu: Navigation, Suche

Einleitung

Aus Sicherheitsgründen sollte eine Applikation möglichst "unauffällig" auf einen provozierten Fehler reagieren um nicht zu viel "Futter" für weitere Angriffe zu geben.

Eine Möglichkeit ist, globale Fehler mit einem eigenen ErrorHandler abzufangen. Dieser nimmt den Fehler auf und leitet zu einem definierten Punkt in der Applikation weiter. So wird der Fehler zur Auswertung und Behebung zwar protokolliert, der Angreifer kann diese jedoch nicht auswerten.


Umsetzung

Die Umsetzung gestaltet sich dabei gemäß der oben verlinkten Dokumentation sehr einfach:

import('core::errorhandler','DefaultErrorHandler');
 
class LiveErrorHandler extends DefaultErrorHandler {
 
   public function handleError($errorNumber,$errorMessage,$errorFile,$errorLine){
 
      // fill attributes
      $this->errorNumber = $errorNumber;
      $this->errorMessage = $errorMessage;
      $this->errorFile = $errorFile;
      $this->errorLine = $errorLine;
 
      // log error
      $this->logError();
 
      // redirect to start page
      header('Location: /');
      exit(0);
 
   }
 
}

In der Version 1.13 wurden (nahezu) alle Stellen entfernt die die PHP-Funktion trigger_error() zur Anzeige von Fehlern nutzten. Die Vorkommen wurden durch Exceptions ersetzt. Daher ist es empfehlenswert für den Live-Betrieb parallel zum LiveErrorHandler (Errors können durch die PHP-API bedingt immer noch auftreten) einen LiveExceptionHandler einzusetzen. Dieser kann wie folgt aussehen:

import('core::exceptionhandler','DefaultExceptionHandler');
 
class LiveExceptionHandler extends DefaultExceptionHandler{
 
   public function handleException($exception){
 
      // fill attributes
      $this->exceptionNumber = $exception->getCode();
      $this->exceptionMessage = $exception->getMessage();
      $this->exceptionFile = $exception->getFile();
      $this->exceptionLine = $exception->getLine();
      $this->exceptionTrace = $exception->getTrace();
      $this->exceptionType = get_class($exception);
 
      // log exception
      $this->logException();
 
      // redirect to start page
      header('Location: /');
      exit(0);
 
   }
 
}

Um den ErrorHandler zu registrieren, ist nur noch ein Eintrag in der Bootstrap-Datei nach dem Einbinden der pagecontroller.php notwendig:

APF 1.12:

$reg = &Singleton::getInstance('Registry');
$reg->register(
      'apf::core',
      'ErrorHandler',
      new ErrorHandlerDefinition(
         'namespace::to::my::custom::error::handler',
         'LiveErrorHandler'
      )
   );

APF 1.13:

Registry::register(
      'apf::core',
      'ErrorHandler',
      new ErrorHandlerDefinition(
         'namespace::to::my::custom::error::handler',
         'LiveErrorHandler'
      )
   );

Die Registrierung eines ExceptionHandler gestaltet sich analog dazu:

APF 1.12:

$reg = &Singleton::getInstance('Registry');
$reg->register(
      'apf::core',
      'ExceptionHandler',
      new ExceptionHandlerDefinition(
         'namespace::to::my::custom::exception::handler',
         'LiveExceptionHandler'
      )
   );

APF 1.13:

Registry::register(
      'apf::core',
      'ExceptionHandler',
      new ExceptionHandlerDefinition(
         'namespace::to::my::custom::exception::handler',
         'LiveExceptionHandler'
      )
   );
Meine Werkzeuge
Namensräume
Varianten
Aktionen
menü
misc
Werkzeuge