Adott egy meglehetősen bonyolult, ráadásul trükkösen sminkelt űrlap, melyből a megrendelő szeretne egy olyan változatot is, ahol nem lehet szerkeszteni, azaz csak az adatokba enged betekinteni. Ötlet: készítek egy másik page callbacket, ebben csinálok egy másolatot a szerkesztő űrlapról, és az összes elemet letiltom ('#disabled' => TRUE
), valamint leszedem a beküldés ('#type' => 'submit'
gombokat) – sőt, az összes gombot leszedem. Idáig szép és jó, de jön a trükkös hacker (azaz a biztonsági ellenőr), és beleköp a dologba.
Ugyanis ha Webdeveloper Toolbarral engedélyezem az elemeket, és Firebuggal teszek rá beküldés (<input type="submit" value="Gyerünk" />
) gombot, akkor a Drupal Form API simán megeszi – ráadásul képes még a megváltoztatott értékeket is eltárolni. Így aztán kénytelen vagyok az űrlap definícióban eltárolni, hogy most tulajdonképpen melyikről is van szó (azaz a betekintés űrlap összeállításakor betenni egy plusz jelzést az űrlap definícióba), és a validate callbackben ezt külön is ellenőrizni.
Van-e erre a helyzetre esetleg valami szebb/jobb megoldásotok?
Na, ezt rendesen benéztem
Először is: nincs itt semmiféle biztonsági rés – csak azért gondoltam ilyesmire, mert az űrlap beküldésekor újra megjelenik, de már a megváltoztatott értékkel, viszont mindenféle egyéb üzenet nélkül. Az adatbázisba természetesen nem tárolódik el ez a megváltoztatott érték.
Chx-féle technikai megközelítésből: a form.inc:1029-ben található feltétel nem teljesül, mivel nincs
#executes_submit_callback
. Továbbá a validate callbackben a$form_state['clicked_button']
is üres, azaz a Drupal Form API jogosan nem találja a megnyomott gombot.Röviden tehát: a böngésző megjegyezte, mi volt a megváltoztatott mezőben, és azt jelenítette meg újra, amikor a Drupal azt mondta az űrlapról, hogy invalid (bár a felhasználó számára megjelenített üzenet nélkül).
PS. Az lc megvolt. ;S
chx
(20.28.47) chx: boobaa: ugye tudod hogy a form API-t nagyjabol-egeszeben en irtam?
(20.29.33) chx: boobaa: ha annyi idot toltottel volna vele mint en , te is fujnad
(20.29.48) chx: boobaa: a D7 az elso form.inc amit nem tudnek fejbol ujrairni kis toprenges utan
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés