Thread mod_perl: Module als Module einbinden?: Einfaches Entwurfsmuster? (7 answers)
Opened by Lightman at 2007-05-05 22:19

Dubu
 2007-05-28 23:30
#76490 #76490
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Obwohl der Thread schon etwas alt ist, muss ich etwas zur Sicherheit anmerken.

[quote=frankes,05.05.2007, 21:15]
Code: (dl )
1
2
3
4
5
6
7
no strict 'refs';
if (eval "require $modul"){
 require $modul.'.pm';
 @back=&{$modul.'::content'}(@param);
}
else {die 'Modul nicht ladbar'}
use strict 'refs';


Allerdings muss ich ehrlich sagen, dass ich gewaltig Bauchschmerzen habe, wenn man wie von dir geplant in einem CMS von außen beliebige Module nachladen kann.
[/quote]
Die Bauchschmerzen bekommst du ganz zu recht, denn wenn der Inhalt von $modul (ungeprüft) von außen kommt, ist der Code oben reinster Selbstmord.  Wenn ich als Benutzer z.B. die folgende URL übergebe (analog zu dem, was Lightman als Beispiel für mail genannt hatte):
Code: (dl )
http://example.org/index.cgi?module=strict%3B%20system%20'rf%20-rf%20%2F'%3B&action=send

dann ergibt das folgenden Code:
Code: (dl )
1
2
if (eval "require strict; system 'rf -rf /';"){
....

Da hat der Webserver evtl. ein Problem.

Wenn du ohnehin ein require $modul.'.pm' nach dem String-eval machst, dann wäre doch ein Block-eval der bessere Ersatz:
Code: (dl )
1
2
3
4
5
6
7
eval {
  require "$modul.pm";
}
if ($@) {
   die "Modul $modul kann nicht geladen werden!"
}
...

Das ist zumindest etwas sicherer als das String-eval.
Trotzdem würde ich eine Konfigurationsdatei bevorzugen.

Und, Lightman: -T nicht vergessen!

View full thread mod_perl: Module als Module einbinden?: Einfaches Entwurfsmuster?