Home > CakePHP, Mail, PEAR, php > Von CakePHP, Ajax Problemen und der Security Komponente

Von CakePHP, Ajax Problemen und der Security Komponente

February 4th, 2009

Wer die “Security” Komponente von CakePHP in seinen Projekte einsetzt, kann bei der Ajax-Entwicklung die ein oder andere fröhliche, kleine Überraschung erleben. Und zwar in Form eines 404 Errors. Oder zu Deutsch: “Ajax geht nicht”. Warum nicht? Weil die Security Komponente verschlüsselte Daten (Security Tokens) in die Session schreibt die, im Falle eines Ajax Requests, nicht validiert werden können. Da steht sich CakePHP irgendwie selbst im Weg, vermutet böse Dinge und gibt deshalb lieber einen verwirrenden 404 Not found.

Am Rande bemerkt: Der Einsatz des Firfox Addons Firebug ist für die Entwicklung von Ajax dringend zu empfehlen.

Zum Glück bietet CakePHP, wie es sich für ein gutes Framework gehört, auch hier eine beglückend einfache Lösung an. Den blackHoleCallback der Komponente Security. Dieser behandelt das Auftreten von Sicherheitsverstößen, ist in der Lage den 404er zu unterbinden und lässt das Framework weiterlaufen. Mein Lösung sieht so aus.

  1. blackHoleCallback im beforeFilter des AppController definieren.
  2. In der Callback-Methode prüfen ob es eine genehme AJAX Methode betrifft.
  3. Wenn “Ja”, einfach return. Sobald der Callback definiert wurde ist er für alles verantworlich, inkl. Terminerung des Scripts etc.
  4. Wenn “Nein”, exit() und ggfl. Logging und/oder andere Maßnahmen.

In Code gegossen sieht das so aus:

class AppController extends Controller {	
 
	var $components = array('Security', 'Session');
 
	function is_allowed_ajax_request($error){		
		if($this->params['controller'] == "users" && $this->params['action'] == "auto_complete")
			return;
 
		die('invalid request');
	}
 
	function beforeFilter(){		
		$this->Security->blackHoleCallback = "is_allowed_ajax_request";		
	}
}

In diesem Zusammenhang:

  1. Fortgeschrittene Anwendung der Tree Komponente Das Tree Behaviour von CakePHP nutzt die Modified Preorder Tree...
  2. Internet Explorer 8 macht Ajax Probleme Auf einer Anwendung, die auf einem IIS läuft und CakePHP...
  3. 554 Helo command rejected: Sorry, localhost is local, not remote Vollkommen unerwartet bekomme ich nun diese Fehlermeldung beim Versenden einer...

CakePHP, Mail, PEAR, php , ,

  1. No comments yet.
  1. No trackbacks yet.