[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