Zadejte hledaný výraz...

Nette, dibi, spatne escapovani – jak tomuto zamezit?

Krystof
verified
rating uzivatele
(2 hodnocení)
17. 4. 2018 16:34:06
Zdravim,
pouzivam nette s dibi a mam takovej problem, kdyz pri hledani zada uzivatel znamenko: " tak web spadne na SQL, duvodem je, ze se vygeneruje SQL takto:
COLLATE utf8_general_ci LIKE '%'%' , 80, 0)+ IF(`c_producers.name` COLLATE utf8_general_ci LIKE '% ' %' ,240, 0)
zapis v kodu vypada takto:
$this->resultForPrices = dibi::query('SELECT DISTINCT .price, . %sql', $this->fields
, 'FROM %sql', $this->tables
, 'WHERE %and', $w
, 'GROUP BY . '
, (!empty($this->having) ? 'HAVING %and' : '')
, (!empty($this->having) ? $this->having : '')
, ' ORDER BY .price DESC'
, ($this->limit > 0) ? ' LIMIT '.$this->limit : '');
Má někdo tip čím to může být a jak tomuto zamezit?
Díky
17. 4. 2018 16:34:06
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340962
Gavrilo
verified
rating uzivatele
(12 hodnocení)
17. 4. 2018 16:38:19
Môj tip je prestať používať DIBI :)
17. 4. 2018 16:38:19
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340961
Krystof
verified
rating uzivatele
(2 hodnocení)
17. 4. 2018 16:40:02
Napsal Gavrilo;1457368
Môj tip je prestať používať DIBI :)
+1, bohuzel se jedna o né zcela muj projekt, znate to... Kdyz uz jsme u toho, co poradite za abstraktni knihovnu k databazim? Osobne mam napsanou svoji vlastni, ale pro inspiraci nebo rozsireni by me zajimalo kdo pouziva :-)
17. 4. 2018 16:40:02
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340960
Gavrilo
verified
rating uzivatele
(12 hodnocení)
17. 4. 2018 16:42:11
Napsal Tofa;1457370
+1, bohuzel se jedna o né zcela muj projekt, znate to... Kdyz uz jsme u toho, co poradite za abstraktni knihovnu k databazim? Osobne mam napsanou svoji vlastni, ale pro inspiraci nebo rozsireni by me zajimalo kdo pouziva :-)
Jednoznačne https://nextras.org/ reálne nemá zmysel použivať niečo iné... Ak ide o menší projekt Nette Database
PS: Ani doctrine nie trust me :)
17. 4. 2018 16:42:11
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340959
Krystof
verified
rating uzivatele
(2 hodnocení)
17. 4. 2018 16:46:54
Napsal Gavrilo;1457371
Jednoznačne https://nextras.org/ reálne nemá zmysel použivať niečo iné... Ak ide o menší projekt Nette Database
PS: Ani doctrine nie trust me :)
Díky za tip, jedna se o vetsi projekt ale mrknu se na to s ohledem na jine projekty :)
17. 4. 2018 16:46:54
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340958
Napsal Tofa;1457370
+1, bohuzel se jedna o né zcela muj projekt, znate to... Kdyz uz jsme u toho, co poradite za abstraktni knihovnu k databazim? Osobne mam napsanou svoji vlastni, ale pro inspiraci nebo rozsireni by me zajimalo kdo pouziva :-)
Nejlepší je klasické PDO.
Následně lze použit Illuminate DB (používá se v Laravelu) - https://github.com/illuminate/database
Co se týče Nette a jeho součásti (dibi atd) - ty věci tvoří pár lidí a zbytek se veze, takže výsledek je o ničem a celkový vývoj nette je spíše hobby než vývoj frameworku.
17. 4. 2018 16:48:39
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340957
Krystof
verified
rating uzivatele
(2 hodnocení)
17. 4. 2018 16:52:52
Napsal ItSnowsInHellAgain;1457374
Nejlepší je klasické PDO.
Následně lze použit Illuminate DB (používá se v Laravelu) - https://github.com/illuminate/database
Co se týče Nette a jeho součásti (dibi atd) - ty věci tvoří pár lidí a zbytek se veze, takže výsledek je o ničem a celkový vývoj nette je spíše hobby než vývoj frameworku.
Díky za info, na svych vecech nette nepouzivam, prave naopak doopravdy pracuji na vlastnim frameworku, ktery je spise inspirovany Zend frameworkem, ktery byl prvnim frameworkem se kterym jsem pracoval. Bohuzel vetsina cizich projektu ktere se mi dostanou pod ruku ze je potreba neco upravit je nette nebo dokonce wordpress...
17. 4. 2018 16:52:52
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340956
Gavrilo
verified
rating uzivatele
(12 hodnocení)
17. 4. 2018 16:53:47
Napsal ItSnowsInHellAgain;1457374
Nejlepší je klasické PDO.
Následně lze použit Illuminate DB (používá se v Laravelu) - https://github.com/illuminate/database
Co se týče Nette a jeho součásti (dibi atd) - ty věci tvoří pár lidí a zbytek se veze, takže výsledek je o ničem a celkový vývoj nette je spíše hobby než vývoj frameworku.
Kým sa niečo také opovážiš povedať refreshni si dáta prosím ťa ;)
17. 4. 2018 16:53:47
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340955
Napsal Gavrilo;1457377
Kým sa niečo také opovážiš povedať refreshni si dáta prosím ťa ;)
Pracoval jsem s velkým množstvím frameworků a s různými systémy.
Mohu v klidu říct, že Nette je prostě hoby framework postaven pro programátory, kteří mají problém s angličtinou a hledají jednoduché řešení pro tvorbu php projektů.
17. 4. 2018 17:04:41
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340954
ViPErCZ
verified
rating uzivatele
(21 hodnocení)
17. 4. 2018 18:26:12
Napsal ItSnowsInHellAgain;1457379
Pracoval jsem s velkým množstvím frameworků a s různými systémy.
Mohu v klidu říct, že Nette je prostě hoby framework postaven pro programátory, kteří mají problém s angličtinou a hledají jednoduché řešení pro tvorbu php projektů.
Ale použít se v pohodě dá... inspirací může být slevomat nebo csfd. ;-) Ale použít mezinárodní framework do sebe také něco má. ;-)
17. 4. 2018 18:26:12
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340953
navay
verified
rating uzivatele
17. 4. 2018 18:52:01
Nemyslím si, že chyba je v tom kódu co jste uvedl. Tam žádné LIKE přímo zadané není, musí se to plnit a ošetřovat ještě někde jinde.
17. 4. 2018 18:52:01
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340952
ViPErCZ
verified
rating uzivatele
(21 hodnocení)
17. 4. 2018 19:31:26
Napsal navay;1457408
Nemyslím si, že chyba je v tom kódu co jste uvedl. Tam žádné LIKE přímo zadané není, musí se to plnit a ošetřovat ještě někde jinde.
Tak tak, souhlasím. A případně co nechcete eskejpovat můžete hodit do DibiLiteral.
17. 4. 2018 19:31:26
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340951
navay
verified
rating uzivatele
17. 4. 2018 19:42:45
Napsal ViPEr*CZ*;1457413
Tak tak, souhlasím. A případně co nechcete eskejpovat můžete hodit do DibiLiteral.
Píše, že to tam zadává přímo uživatel. Takže pokud má pud sebezáchovy, tak "chce" ošetřovat vstup.
17. 4. 2018 19:42:45
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340950
Krystof
verified
rating uzivatele
(2 hodnocení)
18. 4. 2018 09:42:03
Napsal navay;1457414
Píše, že to tam zadává přímo uživatel. Takže pokud má pud sebezáchovy, tak "chce" ošetřovat vstup.
Přesně tak, je to z vyhledávání na webu.
prochazí to funkci:
public function getMaxPrice(){
$t = $this->getDibiResultForPrices()->fetchAll();
if(isset($t)){
return $t->price;
}
protected function getDibiResultForPrices(){
if($this->resultForPrices === NULL){
$w = array();
foreach ($this->where as $key=>$t){
if (is_array($t) && array_key_exists(0, $t) && strpos($t,'variants')!==FALSE)
continue;
if (is_string($t) && strpos($t,'param')!==FALSE)
continue;
if (is_array($t) && array_key_exists(0, $t) && strpos($t,'price')!==FALSE)
continue;
if (is_array($t) && array_key_exists(0, $t) && strpos($t,'termin')!==FALSE)
continue;
// tento reset brani korektnimu vypoctu min a max price pri fulltextovem vyhledavani (v dotaze fulltextoveho vyhledavani je i vyrobce)
/*if (is_array($t) && strpos($t,'producer')!==FALSE)
continue;*/
if (is_array($t) && array_key_exists(0, $t) && strpos($t,'list')!==FALSE)
continue;
$w = $t;
}
$this->resultForPrices = dibi::query('SELECT DISTINCT .price, . %sql', $this->fields
, 'FROM %sql', $this->tables
, 'WHERE %and', $w
, 'GROUP BY . '
, (!empty($this->having) ? 'HAVING %and' : '')
, (!empty($this->having) ? $this->having : '')
, ' ORDER BY .price DESC'
, ($this->limit > 0) ? ' LIMIT '.$this->limit : '');
}
return $this->resultForPrices;
}
Pak uz kod prochazi dibi:
query($args){$args=func_get_args();return$this->nativeQuery($this->translateArgs($args));}
function
nativeQuery($sql){$this->connected||$this->connect();dibi::$sql=$sql;$event=$this->onEvent?new
DibiEvent($this,DibiEvent::QUERY,$sql):NULL;try{$res=$this->driver->query($sql);}catch(DibiException$e){$event&&$this->onEvent($event->done($e));throw$e;}if($res){$res=$this->createResultSet($res);}else{$res=$this->driver->getAffectedRows();}$event&&$this->onEvent($event->done($res));return$res;}
Bohuzel ja v tom nic nevidim, co by mohlo mrvit dvojite uvozovky, jednoduche uvozovky query projdou.
18. 4. 2018 09:42:03
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340949
navay
verified
rating uzivatele
18. 4. 2018 20:35:03
// tento reset brani korektnimu vypoctu min a max price pri fulltextovem vyhledavani (v dotaze fulltextoveho vyhledavani je i vyrobce)
/*if (is_array($t) && strpos($t,'producer')!==FALSE)
continue;
*/
Co se stane, když odkomentujete tuhle část a zkusíte to s těma dvojtýma uvozovkama?
Lepší by bylo, kdybyste poslal přesnou chybovou hlášku.
Obecně si nemyslím, že chyba je v Dibi samotné, ta by se s dvojitou uvozovkou na vstupu normálně vyrovnala. Tady bude problém v tom, jak se sestavuje a plní daty ten SQL dotaz, protože tam se dá napáchat dost škody. Tipuji, že to nemusí být vůbec špatným escapováním dvojitých uvozovek, jak se na první pohled zdá (ty dvojité uvozovky by se tam za normálních okolností prostě objevily jako eskejpované, to by žádnou škodu neudělalo), ale prostě jen tím, že v těch LIKE měl navazovat další SQL řetezec, který z nějakého důvodu nebyl přidán nebo bylo na vstupu něco neočekávaného (což předpokládám mají ošetřovat ty podmínky v getDibiResultForPrices).
Taky bych si zkusil vypsat, co přesně vychází po naplnění$w = $t; z pole $w.
18. 4. 2018 20:35:03
https://webtrh.cz/diskuse/nette-dibi-spatne-escapovani-jak-tomuto-zamezit#reply1340948
Pro odpověď se přihlašte.
Přihlásit