[python] Funkce getattr, eval, vhodnost jejich použití
Jan Jakubuv
jakubuv na gmail.com
Pondělí Duben 7 11:28:32 CEST 2008
Dobry den,
ve strucnosti, jeden z problemu s eval je v bezpecnosti. pokud
uzivatel (= potencionalni utocnik) nalezne zpusob jak zmenit hodnotu
promenne 'choice', davate mu tim do ruky moznost spustit libovolny
kod. to muze byt velky problem u webovych aplikaci a u programu
bezicich s pravy jineho uzivatele. dalsi problem je zrejme v
efektivite.
honza.
2008/4/4 Martin Stiborský <martin.stiborsky na gmail.com>:
> Dobrý večer.
> Ve svém programu jsem potřeboval volat jednu z několika tříd, kterou,
> to záviselo na volbě uživatele v GUI.
> Chtěl bych poprosit o kritiku mého rešení.
>
> Všechny třídy jsem měl po kupě v jednom adresáři, ten jsem si naimportoval.
> Do proměnné se uloží název proměnné, podle volby z GUI.
> Pomocí getattr se zavolá třída + metoda.
>
> import balicek
> choice = button.objectName()
> foo = getattr(balicek , str(choice))
> print foo().bar()
>
> Vše funguje bez problémů. Ještě před tímto jsem to samé dal do kupy pomocí eval.
>
> print eval("%s().foo()" % choice)
>
> V tomto případě jsem si v __init__.py v adresáři s třídami
> naimportoval všechny třídy.
>
> Jaké jsou nevýhody eval() ? Je to celé vůbec košér, prosím o Vaše názory.
>
> Děkuji velice.
> --
> S pozdravem
> Martin Stiborský
>
> Jabber: stibi na njs.netlab.cz
> ICQ: 224-065-849
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
>
Další informace o konferenci Python