i've been playing with Safe.pm for the past two days, and it's really 
giving me headaches :-) i can't seem to do anything really useful with 
it. the namespace "chroot"-ing makes me unable to use pretty much every 
extension modules i want to use. dynamic loading also doesn't seem to 
work at all inside the safe compartment.

so i set back and rethink what actually i want to accomplish in the 
first place. that is: i want to prevent an untrusted and potentially 
dangerous perl code from doing these things:

- accessing certain part of filesystems;
- using sockets to communicate with the outside world;
- access databases;
- write or read shared memory;
- executing other programs;

in essence, i want to prevent the snippets of perl code that i will be 
receiving from the Net to store information persistently and/or send 
information outside ("phoning home", etc). i'm not really concerned 
about resource limiting at the moment; i can always kill the naughty 
process or let my OS do that.

looking at the examples David and Steve Grazzini gave a couple of days 
ago, i thought that perhaps overriding builtin functions will 
sufficiently do that. that is, if i do this:

  #!/usr/bin/perl
  BEGIN {
    sub CORE::GLOBAL::system { die }
    sub CORE::GLOBAL::exec { die }
    sub CORE::GLOBAL::open { die }
    sub CORE::GLOBAL::sysopen { die }
    sub CORE::GLOBAL::socket { die }
    sub CORE::GLOBAL::require { ... }
    # ... and a bunch of other functions ...
  }

  eval { do "untrusted.pl"; };

will i be reasonably safe? i will be overriding 'require' so it only 
allows an explicit set of modules that are considered safe. is there a 
way for perl code later in the execution steps to somehow restore the 
overriden builtins? (i certainly hope not :-)

-- 
dave


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to