Potesim Vas, z evalu ani z execu sa pokial mi je znamo utiect neda. Teda ak to clovek vie spravit.

staci nieco taketo:

>>> eval(superNebezpecnyKod, {'__builtins__': {}}, {})

alebo

>>> exec superNebezpecnyKod in {'__builtins__': {}}, {}

zavisi ale od toho, akym situaciam sa chcete vyhnut.

coho sa nezbavite (ani evalom) je napr nekonecna rekurzia:

>>> superNebezpecnyKod='(lambda x=(lambda y: y(y)): x(x))()'

to az tak neboli, ak nemate povolenu nejaku prilis hlboku uroven rekurzie.

co tak ale nekonecny cyklus?

>>> superNebezpecnyKod='(lambda x=[1]: [x.append(1) for i in x])()'

alebo supernarocne operacie?

>>> superNebezpecnyKod='2**10000000000000000'

vela stastia pri vyuzivani evalu a execu :D

Jan Janech


On 05/05/10 14:26, Hynek Fabian wrote:
Jan Janech (středa 05 Květen 2010 13:08:49):
Dovolim si oponovat. Vsetko co sa da v pythone v exec spravit pre
narusenie bezpecnosti sa da spravit aj v eval.
Jak?

eval(x, {}, {})

Jakým X se dá z takové konstrukce utéci?
_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python





--

____________________________
Ing. Jan Janech
Katedra softverovych technologii
Fakulta riadenia a informatiky
Zilinska Univerzita
_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem