Perl Cd Bookshelf [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Perl Cd Bookshelf [Electronic resources] - نسخه متنی

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید

32.37. Safe



use Safe;
$sandbox = Safe->new();# anonymous sandbox
$sandbox = Safe->new("PackName");
# in that symbol table
# Enable or disable opcodes by group or name.
$sandbox->permit(qw(:base_core));
$sandbox->permit_only(qw(:base_core :base_loop :base_mem));
$sandbox->deny("die");
# like do(), but in the sandbox
$ok = $sandbox->rdo($filename);
# like do(), but in the sandbox
$ok = $sandbox->reval($code);
# without 'use strict'
$ok = $sandbox->reval($code, 1);
# with 'use strict'


The Safe module attempts to provide a restricted environment to
protect the rest of the program from dangerous operations. It uses two
different strategies to do this. Much as an anonymous FTP daemon's use
of chroot(2) alters the view of the root of the filesystem, creating
a compartment object with Safe->new("PackName") alters that
compartment's view of its own namespace. The compartment now sees as
its root symbol table (main::) the symbol table that the rest of the
program sees as PackName::. What looks like Frobnitz:: on the
inside of the compartment is really PackName::Frobnitz:: on the
outside. If you don't give an argument to the constructor, a random
new package name is selected for you.

The second and more important facility that a Safe
compartment provides is a way to limit code that is deemed legal
within an eval. You can tweak the allowable opcode
set (legal Perl operations) using method calls on your
Safe object. Two methods are available to compile
code in a Safe compartment: rdo
("restricted do") for files and reval ("restricted
eval") for strings. These are like do on a
filename and eval on a string but execute in a
restricted namespace with limited opcodes. The first argument is the
filename or string to compile, and the optional second argument is
whether the code should be compiled under use
strict
.

This module is scheduled for a rewrite (we intend to isolate the sandbox into
a different interpreter thread for additional safety), so be sure to check the Safe manpage for updates. See also Chapter 23, "Security".






/ 875