how to convert string to list or tuple
Duncan Booth
duncan.booth at invalid.invalid
Tue May 31 04:46:56 EDT 2005
Steven Bethard wrote:
> Duncan Booth wrote:
>> any new style class you have defined and call any of its methods with
>> whatever arguments I wish.
>
> Any new style class that I've defined? Or just any one I pass in as
> part of dict(__builtins__=None, ...)? If the former, could you
> elaborate? If the latter, then yes, I can see the problem. However
> for the case where all you pass in is dict(__builtins__=None), is
> there still a risk? Note that in the OP's case, all that is necessary
> is constant parsing, so no names need to be available.
>
Any new style class you have defined is accessible through
object.__subclasses__(), and as I showed object itself is always accessible
through {}.__class__.__bases__[0].
I'm assuming that the source code for your program is available. That means
I can find the name of an interesting class which has a method that does
something destructive, and call it.
e.g. Assuming that the MyDatabase class does something nasty to a file:
>>> class MyDatabase(object):
def __init__(self, filename):
self.filename = filename
def initialise(self):
print "Splat %s" % self.filename
>>> eval('''[ cls for cls in {}.__class__.__bases__[0].__subclasses__()
if 'MyDatabase' in `cls`
][0]('importantfile').initialise()''', dict(__builtins__=None))
Splat importantfile
More information about the Python-list
mailing list