CakePHP project építés 5. rész
cakephp, hogyan
A paranoia a programozók egyik kedvenc elfoglaltsága. Sose bízhatunk a bejövő adatokban, mert nem tudhatjuk, hogy honnan származnak. A neten meg vannak csúnya bácsik és nénik akik szeretik kihasználni a webalkamazások biztonsági réseit. A modell validálási szabályai arról gondoskodtak, hogy a programunk ne akarjon az adatbázisba fura dolgokat művelni, a sanitize metódus pedig arról, hogy a csúnya bácsiknak megnehezítsük a dolgát.
Bejövő adatok ellenőrzése
A sanitize használatához a conroller elején ki kell adni a uses('sanitize'); utasítást, majd létre kell hozni egy új tisztogató ojjektumot: $takaritoNeni = new Sanitize();. Itt is érvényes, hogy ha mindegyik controllerben akarjuk használni a sanitize metódust (és miért ne akarnánk), akkor a uses utasítást akár a /app/app_controller.php fileba is elhelyezhetjük, ami ettől így fog kinézni:
<?php
uses('sanitize');
class AppController extends Controller{
var $view = 'Smarty';
var $helpers = array('html','javascript','form');
}
?>
Sanitize
A sanitize metódus a következő tisztogatási eljárásokat ismeri:
- paranoid($nyersString, $megengedettKarakterekTömb)
- Ez a függvény kipucol minden nem-sima szöveg (beleértve a szóközt is) karaktert a $nyersString-ből. Kivételeket a $megengedettKarakterekTömb átadásával adhatunk meg.
$nyersString = ";:<script><html> @@ $takaritoNeni->paranoid($nyersString); // scripthtml $takaritoNeni->paranoid($nyersString, array(' ', '@')); // scripthtml @@ - html($nyersString, $kivesz = false)
- Ez a függvény akkor használatos amikor a user által megadott adatokat szeretnénk megjeleníteni, melyek esetleg tartalmaznak html elemeket, amitől mondjuk szétesne az oldalunk. Ha a $kivesz paraméter értéke
falseakkor kicseréli a html elemeket a strippelt párjukra, hatrueakkor törli őket.$nyersString = '<font size="99" color="#FF0000">HEY</font><script>...</script>'; $takaritoNeni->html($nyersString); //<font size="99" color="#FF0000">HEY</font><script>...</script> $takaritoNeni->html($nyersString, true); //font size=99 color=#FF0000 HEY fontscript...script
- sql($nyersString)
- A rendszer aktuális magic_quotes_gpc beállítása alapján escapeli az sql utasításunkat.
- cleanArray($nyersTömb)
- A tömb minden elemén végrehajtja a következő lépéseket.
- Mindenfajta szóközt sima szóközzé alakít
- Minden html elem a megfelelő html entityre lesz cserélve, az újsorok (\n) <br>-re
- A kocsivissza (\r) karakterek törlése
- SQL tisztogatás
- Visszaperek átalakítása megbízható visszaperekre
Akkor a kód
Akkor lássuk a kódot! A /app/controllers/termekek_controller.php fileban kell némi módosítást eszközölnünk. Jelenleg a hozzaad() függvényünk így néz ki:
function hozzaad() {
if(empty($this->data)) {
$this->set('termekcsoportok', $this->Termek->Termekcsoport->generateList(null, 'Termekcsoport.termekcsoport', null, '{n}.Termekcsoport.id', '{n}.Termekcsoport.termekcsoport'));
$this->render();
} else {
$this->cleanUpFields();
if($this->Termek->save($this->data)) {
$this->Session->setFlash('The Termek has been saved');
$this->redirect('/termekek/index');
}
if($this->Termek->save($this->data)) {
$this->Session->setFlash('The Termek has been saved');
$this->redirect('/termekek/index');
} else {
$this->Session->setFlash('Please correct errors below.');
$this->set('termekcsoportok', $this->Termek->Termekcsoport->generateList(null, 'Termekcsoport.termekcsoport', null, '{n}.Termekcsoport.id', '{n}.Termekcsoport.termekcsoport'));
}
}
}
Ebben a részben a $this->cleanUpFields(); és a if($this->Termek->save($this->data)) { sorok közé kell betennünk a következő sorokat:
$takaritoNeni = new Sanitize(); $takaritoNeni->cleanArray($this->data);
A fent leírt tisztogatási eljárások közül a cleanArray-t választottuk, mert ennek a tisztogatása számunkra minden mezőre megfelel, és így a data tömböt egy az egyben át tudtuk neki adni, nem kellett minden egyes beérkezett adatot külön-külön szűrögetni.
Ugyanezt a kódot ugyanerre a helyre beszúrhatjuk a szerkeszt() függvényünkbe is. Ha valaki már nem a scaffold-ot használja a termékcsoportok esetében, vagy más kontrollereket is létrehozott, akkor ne felejtse el ezekben is alkalmazni a pucolási lépéseket.
Ez a bejegyzés rrd billentyűzetéből potyogott ki 2007 június 21. napján 15:45:29-kor. Eddig 1,761 olvasást ért meg. A visszajelzéseket nyomonkövetheted ezzel az RSS feed-el. Véleményt nyilváníthatsz, vagy trackbackolhatsz a saját oldaladon.



