CakePHP Sanitize für alle Controller
July 29th, 2007
Tags: Allgemein, cakephp, Development, Notizen, tips, TutorialsIch 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.


July 29th, 2007 at 18:24
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.
July 29th, 2007 at 18:42
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.