Template-ben automatikus escape-elés

Mostanában azzal ütöm el az időmet, hogy egy “framework esszenciát” fejlesztek🙂. Nem azért, mert nem jók a meglévő megoldások, pusztán azt szerettem volna látni, mennyi az a minimális feature set, amellyel már épkézláb dolgokat lehet csinálni. De erről majd később.

A leginkább érdekes rész, meglepetésemre, a templatek frappáns kezelése bizonyult (oly annyira, hogy még most sem oldottam meg rendesen ;)). Nem biztosít, és nem is fog biztosítani, automatikus escapelést. Elgondolkozva ezen a fícsörön (mármint az automatikus escapelésen) eszembe ötlött egy elég ellentmondásos dolog. Nevezetesen egy asszociatív tömb kulcsát kell-e escapelni, vagy nem?

Mert ha csak “valamilyen” azonosítókat tárolok benne, amit teszemazt máshol is használok azonosításra, akkor egyértelmüen nem szabad, tehát a jó megoldás, hogy nincs escapelés.
Ellenben ha mondjuk felhasználónév, email párokat tárolok (ahol mindkét adat user inputból jött), akkor bizony escapelni kell, és hiba ha elmarad.

Kategória: gondolatok, php
Címke: , , ,
Közvetlen link a könyvjelzőhöz.

3 hozzászólás a(z) Template-ben automatikus escape-elés bejegyzéshez

  1. Hodicska Gergely szerint:

    Az én megközelítésem a következő volt:
    – Az esetek túlnyomó többségében a template-nek átadott paramétereket escape-elni kell. (Az, hogy ez épp tömb kulcs vagy nem, az lényegtelen, ami bele teszünk egy HTML oldalba, arra kell a htmlspecialchars, nem építünk arra, hogy X mezőben csak szám lehet stb., mindig escape-elünk.)
    – Ha valamiért mégsem escapelve van szükség az adatra, akkor az legyen elérhető az eredeti formában is.

    E kettő nyomán: alap esetben a template változók már automatikusan escape-elve is vannak (az hogy ez hogyan történik, azt a válasz formátuma határozza meg), így ha épp valaki siet, akkor sem fordulhat elő, hogy elfelejti (és ott van kapásból a biztosnági rés), és ha neked nem az escape-elt változat kell, akkor ott már egy tudatos fejlesztői döntés miatt fogod az eredetit használni.

  2. Szabolcs Sulik szerint:

    Igen, a symfony-ban is így van, output escaper példányokba csomagolja a változókat. Ezzel csak annyi a problémám (nem is annyira probléma, inkább furcsa), hogy szeretek/szeretnék helperekben, metódusokban type hinteket használni, és kicsit érdekesen mutat az echo show_me_the_user($user->getRawValue()) hívás a sablonban. Emellett a ZF 2.0-ben is bevezetnek majd hasonló eljárást. Azt is olvastam, hogy a symfony-s coredev-ek szerint pont ez a feature a leginkább performance killer.

    Mind mindenhol, itt is lehet érvelni mellette és ellene is. A greebo-ban elsősorban a minimalizmus a célom, nem feltétlenül az, hogy bolondbiztos megoldást adjak a problémákra🙂. Az cél kettős: 1. minimális API bevezetése (amit a PHP tud azt használom, és sok mindent tud :o), 2. a lehető legegyszerűbb, legkevesebb osztállyal megoldható felépítés (6 osztály az essence és 6 osztály a conveniences “csomagban”). Majd írok egy hosszabb bejegyzés a témában részletesen kifejtve a gondolataim.
    Emellett majd ki fogom próbálni, hogy milyen válaszidőt produkál a rendszer, ha van benne valamilyen automatikus escapelés.

    A templatezéssel a küzdelmem inkább arról szól, hogy egy osztállyal és dekorációval szeretném (és fogom is, már megvan a felépítés) megoldani (értsd template inheritance). Emellett a symfony component mintájára kap majd egy plusz metódust, ahol a templatehez esetlegesen tartozó logika foglal helyet.

  3. Szabolcs Sulik szerint:

    Na megnéztem, a symfony a tömb kulcsait nem escapeli.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s