home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam    

Book HomeMastering Perl/TkSearch this book

22.2. The PerlPlus Browser Plug-in

Now we'll briefly examine Frank Holtry's PerlPlus Plug-in, a loadable Netscape extension that executes Perl programs on a client computer. The Perl programs themselves can exist anywhere on the Net—the mere act of browsing a PerlPlus program (or any page with an HTML <EMBED> tag pointing to a PerlPlus program) may start it executing, subject to the result of an authentication procedure.

Netscape publishes an API for C language plug-ins that describes how to register a plug-in instance, read streaming data from a browsed URL, access system services, and so on. In 1996, Stan Melax used these specifications and developed the first plug-in for the Perl world so he could run Perl OpenGL programs in a browser. Basically, Stan's plug-in would read the browsed OpenGL program, wrap it in a Safe module, and feed the result to Perl. The Safe wrapper code provided security, and passed window information to the OpenGL code so it could properly embed itself within the browser.

In 1999, Frank rewrote the plug-in with an eye toward enhanced security. His idea was to use the Opcode module and restrict the opcodes available to the browsed Perl program. It's a multilevel scheme, from no security, in which all Perl opcodes are legal, to high security, where so many opcodes are forbidden that only the simplest Perl programs can run. Furthermore, a CGI program must first validate the browsed URL and return its opcode security level, a single digit from 0 through 5. The security CGI might be as crude as this simple table lookup:

#!/usr/local/bin/perl -w
# perlplus-secure.cgi - lookup a script's security level and inform the plugin.

use CGI qw/header param/;
use strict;

my $url_root = 'http://www.lehigh.edu/~sol0/ptk/ppl';
my %urls = (
    "$url_root/clock-bezier.ppl" => 4,
    "$url_root/hw.ppl"           => 2,
    "$url_root/tkhanoi.ppl"      => 4,

my $url = lc param('URL');
my $sec_level = $urls{$url} || 0;

print header(-type => 'application/x-perlplus:.ppl:Perl'), "$sec_level\n";

Because the plug-in security model is under review, we won't examine this subject further.

As it happens, Perl/Tk programs generally have to run with most opcodes enabled, so browsing untrusted PerlPlus/Tk programs is a major security risk; imagine unleashing the full power of Perl inside your browser![65] Nevertheless, it's easy to imagine a trusted environment where you know that the served PerlPlus programs are nonlethal.

[65] Think carefully, too, before you enable Java, or install your next plug-in and let boatloads of programs of unknown quality and origin execute on your machine.

Library Navigation Links

Copyright © 2002 O'Reilly & Associates. All rights reserved.