Jump to content
php.lv forumi

PHP un templeitu sistēmas


briedis

Recommended Posts

Kā? <?=doescape($value);?> ? Jā tā var, pie nosacījuma ka vienmēr doescape tiks lietots un "nepiemirsīsies"

 

 

Kuru template-engine esi lietojis? Kādu freimworku (izņemot pašrakstīto) esi lietojis?

 

Kontrolieris nodod Viewam(Outputam) izvadāmos mainīgos caur funkciju, tur arī var darīt ar viņiem, ko iegribas.

Pēc tam izvadīt html, vienkārši uzrakstot {mainīgais} var ar php nav starpības, jo mainīgais jau būs apstrādāts.

 

Esmu strādājis ar smarty, apaudzētu ar 10x lielāku kodu un kā galveno bremzi projektā.

Freimworki un pārsvarā visi PHP risinājumi pašrakstīti.

Edited by webi
Link to comment
Share on other sites

  • Replies 111
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

Ja mainīgie ir arrays, objects, vai collections? Kā to savā funkcijā dari? Izklausās pēc vienkārši tieši tādas pašas funkcionalitātes ko dara template-engine

 

 

 

Esmu strādājis ar smarty, apaudzētu ar 10x lielāku kodu un kā galveno bremzi projektā.
Freimworki un pārsvarā visi PHP risinājumi pašrakstīti.

 

Nu ko lai saka, pamēģini kautko mūsdienīgu. Skaidrs ka "enterpraizzz" līmenī tu nestrādā.

Edited by Blitz
Link to comment
Share on other sites

Tas ka plain PHP output escape by default nenotiek, bet template engine notiek un tam vairs nav jāpievērš speciāla uzmanība, izņemot vietās kur tu specili forcē templeitam rādit neeskeipotu saturu.

Vispār jau šim ir risinājums (kas kā reiz forsē programmētājus pievērst uzmanību, kas notiek ar datiem (ne kaut kur "maģiski" kādā pluginfailā)) http://php.net/taint

 

Nestrādā gan (vairs) uz 5.5.x un 5.6.x, bet tagad kā autors solījis izskatās ka ir releasota php7 ( http://pecl.php.net/package-changelog.php?package=taint&release=2.0.1) versija.

 

 

 

 

Es pareizi saprotu, Robert, ka tu iesaki escapot datus pret XSS un tad šamus glabāt iekš datubāzes, jau escapotus?

No performances viedokļa (un ja dati/apstākļi ļauj t.i. nav būtisks oriģināls), tad "eskeipotus"  glabāt ir krietni labāk nekā ziljons reizes transformēt pie izvades (tāpat ar visādiem nl2br() utt).

Link to comment
Share on other sites

No performances viedokļa (un ja dati/apstākļi ļauj t.i. nav būtisks oriģināls), tad "eskeipotus"  glabāt ir krietni labāk nekā ziljons reizes transformēt pie izvades (tāpat ar visādiem nl2br() utt).

Tā nav slikta doma. Praktiski to dažviet gandrīz tiku realizējis, izmantojot papildus lauku (kā nodrošināt tā sinhronizēšanu ir atsevišķš temats, bet principā modeļa save() funkcijā). Bet tas vairāk tāpēc, ka papildus arī samiksēju visus meklēšanas datu laukus + saistīto tabulu laukus ērtākai meklēšanai.

 

Bet, par šo tēmu domājot, jāņem vērā, ka tas jau ir cache un arī premature optimization. Kā zināms, nereti ziljons reizes transformēt datus pie izvades neaizņem nemaz tik daudz laika. Katrā ziņā, ne tik daudz laika, cik aizņem cilvēka darbs, meklējot un labojot kļūdas, kaut vai minēto gadījumu ar "amp" meklēšanu, u.c. variantiem. Es nerekomendētu datus glabāt tikai HTML izvadei sagatavotā formātā, pat vairāk - uzskatu, ka tā ir nepareiza arhiektūra.

 

Vēl, piebilde - lielie FW pirms vispār nonāk līdz templeitam, ir veikuši tik daudz funkciju izsaukumus, ka eskeipošanas īpatsvars jau kļūst niecīgs. Otrkārt, dažādi cache slāņi šo jautājumu jau var risināt citādos veidos un atlikušais dinamiski renderētais outputs samazina eskeipošanas slodzes īpatsvaru. Protams, labāk ir tad, ja tiek ietaupīts arī tas, bet jāņem vērā balanss.

Edited by Mr.Key
Link to comment
Share on other sites

Ja mainīgie ir arrays, objects, vai collections? Kā to savā funkcijā dari? Izklausās pēc vienkārši tieši tādas pašas funkcionalitātes ko dara template-engine

 

 

Nu ko lai saka, pamēģini kautko mūsdienīgu. Skaidrs ka "enterpraizzz" līmenī tu nestrādā.

Cik paskatījos, pārsvarā templeitu sistēmu pamatā ir freimworks, kura pamatā ir MVC paterns.

Pameiģināšu, kad būšu vecs ar izsīkušu entuziasmu darīt pats vai dzīve piespiedīs. :D

Jaukas brīvdienas visiem! ;)

Link to comment
Share on other sites

> Vispār jau šim ir risinājums (kas kā reiz forsē programmētājus pievērst uzmanību, kas notiek ar datiem (ne kaut kur "maģiski" kādā pluginfailā)

 

Tas Taint izskatās ļoti, ļoti edgy.

 

Uzticēties, ka sistēma automātiski atradīs problēmas (this will 100% fail at some point) un tad uzticēties, ka kāds šos warningus ņems vērā (kāds piemirsīs, kaut vai netīšām)? Mēs šeit tomēr runājam par security.

 

> No performances viedokļa (un ja dati/apstākļi ļauj t.i. nav būtisks oriģināls), tad "eskeipotus" glabāt ir krietni labāk nekā ziljons reizes transformēt pie izvades (tāpat ar visādiem nl2br() utt).

 

Datus ir jāglabā as-is, nesapistus. Ja ir nepieciešams optimizēt, izmanto cache.

Link to comment
Share on other sites

Klau, kas notiek ar BB codes? Vēl eksistē vai nomiruši dabīgā nāvē?

Dažkārt taču ir vajadzība lapas administratoram ievadīt datus caur wsyg editoru - principā raw formātā, pilnībā customizējamus. Tas bieži raksturīgs, piemēram, mazām uzņēmumu mājaslapām, kas grib datus par sevi reizi pāris mēnešu laikā atjaunot bez programmētāju līdzdalības.

 

Mēs protams te esam serious programmers un tādas nieka lapiņas netaisam, bet ja tomēr tāda vajadzība rodas?

Link to comment
Share on other sites

No performances viedokļa (un ja dati/apstākļi ļauj t.i. nav būtisks oriģināls), tad "eskeipotus"  glabāt ir krietni labāk nekā ziljons reizes transformēt pie izvades (tāpat ar visādiem nl2br() utt).

Nu tas arī gluži nav arguments. Varbūt tad labāk kešot pašu uzrenderēto view, vai tas ir html vai jebkas cits.

 

Taču no otras puses, man ir kaudzīte ar klonnām (*_proc un *_raw). Ja nu mainās algoritms kā no _raw nonāk līdz _proc. Citi iemesli gan - piemēram, tā pati eskeipošana on input jo dati tiek ekspozēti vēl pārdesmit dažādām sistēmām, no tām kaudzīte vendor ones, pār kurām nav nekādas kontroles praktiski.

Link to comment
Share on other sites

Tas Taint izskatās ļoti, ļoti edgy.

 

Uzticēties, ka sistēma automātiski atradīs problēmas (this will 100% fail at some point) un tad uzticēties, ka kāds šos warningus ņems vērā (kāds piemirsīs, kaut vai netīšām)? Mēs šeit tomēr runājam par security.

Ko nozīmē "edgy" šajā gadījumā? (īsti nesaprotu arī kā konkrēto vārdu kaut kā attiecināt uz šo diskusiju)

 

Taint principā ir Zend engines hooks, kas pasaka vai ar mainīgo ir veikta kāda apstrāde (untaints), ko varētu attiecināt uz "eskeipošanu", ko un kā programmētājs ir darījis ir cits jautājums.

 

Ja "mēs šeit runājam" par "security", tad ir diezgan jocīgi (vai pat amizanti) piesaukt kaut kādus third-party template risinājumus, kuri lielākoties tiek pljek-snjek ievilkti ar visādiem package managariem on-the-fly un noteikti lielākais vairākums pat faktiski neskatās, kas konkrētajā kodā notiek paļaujoties uz tā autoru zināšanām/godaprātu vai kaut kādas publikas pozitīvu novērtējumu utt..

 

 

 

Datus ir jāglabā as-is, nesapistus. Ja ir nepieciešams optimizēt, izmanto cache.

Cache menedžments / invalidācija utt ar aizņem resursus (reizēm pat lielākus) ..

 

Datus pa lielam mēdz glabāt "normalizētus" ..

 

 

 

Vēl, piebilde - lielie FW pirms vispār nonāk līdz templeitam, ir veikuši tik daudz funkciju izsaukumus, ka eskeipošanas īpatsvars jau kļūst niecīgs. Otrkārt, dažādi cache slāņi šo jautājumu jau var risināt citādos veidos un atlikušais dinamiski renderētais outputs samazina eskeipošanas slodzes īpatsvaru. Protams, labāk ir tad, ja tiek ietaupīts arī tas, bet jāņem vērā balanss.

 

Protams, teksta apstrāde 99% gadījumos būs pilnīgi nebūtiska, jo kverijs tieši virs tā būs patērējis 99% no visas lapas ielādes laika, attiecīgi investēt enerģiju tās optimizēšanā nebūs visai produktīva, Šeit domāju tīri sintētisku salīdzinājumu..

 

jo personīgi nedaudz nepatīk programmētāju atrunas par to "ka, tas jau neko neaizņem" un tad ir 1000 opkoda rindiņas "ar to neko" un galā cpu ir nodedzināts un renderēšanas laiks ir so-so..

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...