[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] From * import * and Pygame2exe



On 7/20/05, Andre Roberge <andre.roberge@xxxxxxxxx> wrote:
> How about doing something like the following:
> 
> def isFileSafe(file_to_import):
> ....unsafe = "".join(contents)
> ....unsafe = unsafe.replace("(", " (")
> ....unsafe = unsafe.split()
> ....bad_keywords = ["chr", "exec", "eval", "input", "raw_input",
> "import", "file", "open"]
> ....for word in bad_keywords:
> ........if word in safe_list:
> ............return False
> ....return True
> 
> [add in a regular expression search for any "magic" python "word" of the form
> __aName__, i.e. lead and followed by two underscores -- something I can't do on
> the spot :-(]
> 
> and only allow importing levels (through execfile()) if it's deemed to be safe?

I still wouldn't trust string analysis, since there are so many sneaky
ways to write something. E.g.

getattr(getattr(globals()["\x5f\x5f\x62\x75\x69\x6c\x74\x69\x6e\x73\x5f\x5f"],
"\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f")("\x6f\x73"),
"\x73\x79\x73\x74\x65\x6d")("oops")

While the above is reliant on __builtins__ and would be stopped by the
word in safe_list check, I'm pretty sure that someone who knows all
the tricks could get past string tests. The bytecodes aren't that much
more difficult to analyze and they are, IMHO, easier to make
foolproof.

-- 
Sami Hangaslammi