Ich mag es einfach und nutze dabei sehr häufig den AppController um mir immer wiederkehrende Aufgaben zu sparen. Sanitize ist fast immer notwendig um die Benutzereingaben zu säubern und auf die Verwendung in Datenbank Queries vorzubereiten. Hier nun ein kleiner Tip wie man sich das ständige escaping und cleaning in den Actions spart:

class AppController extends Controller
{
	var $cleandata = array();
	var $helpers = array('Html', 'Form', 'Javascript', 'Time', 'Text');

	function beforeFilter() {
		if(!empty($this->data)) {
			uses('sanitize');
			$sanitize = new Sanitize();
			$this->cleandata = $sanitize->clean($this->data);
		}
	}
}

Also wenn wir Daten haben (nicht empty), lade die Sanitize Bibliothek (uses) und schreibe das gesäuberte Array in cleandata.

Nun haben wir $this->data und $this->cleandata in jedem Controller zur Verfügung. Das folgende Beispiel stammt aus dem UsersController:

function signup() {
	if(!empty($this->data)) {
		if($this->User->create($this->cleandata) && $this->User->validates())
		{
			echo 'valid!'; // save data .. etc..
		}
	}
}

Ihr könnt natürlich auch !empty($this->cleandata) verwenden. Mein Beispiel soll nur zur Veranschaulichung dienen.

2 Kommentare zu “CakePHP Sanitize für alle Controller”

  1. 1 Peter Rehm Says:
    ich finde halt, dass es ein vorteil ist, wenn man in jedem db query sieht, dass alles escapet ist, und du nicht an irgendeiner stelle ein escape vergessen hast.

    ich hatte es mal kurze zeit so, dass ich ein auto escape in meinem für mich angepassten mini-framework vorgesehen habe, den habe ich aber wieder entfernt, weil ich das nicht übersichtlich genug fand.

    aber das ist auch wiederum geschmacksache.

  2. 2 m3nt0r Says:
    Hmm.

    Man weiss ja, durch die Verwendung von cleandata, das es escaped ist. Die Methode soll ja vorbeugend wirken. Und dadurch das ich $this->data nicht überschreibe, lasse ich noch genug Spielraum für den Fall, dass man die Daten auch mal “nicht escaped” braucht.


Trackbacks/Pingbacks

Noch keine Trackbacks/Pingbacks von anderen Blogs

Diesen Eintrag kommentieren