Schrift
[thread]10180[/thread]

Ausführen von externem Code.



<< >> 9 Einträge, 1 Seite
topeg
 2007-08-22 22:19
#98537 #98537
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ich schreibe an einem Pluginsystem für eine webgebundenes Perlprogramm.
Es soll Perlcode von dritten ausgeführt werden.
Das Problem dabei ist, daß ich nicht jedes hochgeladenen Script durchschauen möchte um die Ungefährlichkeit zu bescheinigen.

Es sollten alle externen Zugriffe wie print, open, exec, system, etc. aber auch eval unterdrückt bzw. entschärft sein. Alle nötigen Funktionen werden von einem Modul zur Verfügung gestellt.

Leseoperationen durch das Script werden über das Hauptprogramm verarbeitet und
Ausgaben werden formatiert und in ein Dokument umgewandelt.

Wenn mir in den nächsten Tagen nichts besseres einfällt werde ich wohl mit einer chroot-Umgebung arbeiten. Lieber wäre mir, wenn es ohne ginge.
RalphFFM
 2007-08-22 22:34
#98538 #98538
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Vielleicht(!) kann http://wiki.perl-community.de/bin/view/Wissensbasi... einen Schritt weiterhelfen, d.h. ich bin mir nicht sicher.
renee
 2007-08-22 23:01
#98539 #98539
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Schau Dir mal CPAN:Safe an... Vielleicht kann man damit etwas machen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2007-08-22 23:14
#98540 #98540
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
soweit ich weiss, laesst sich das auch mit Safe.pm nicht verlässlich machen, da man
Safe wiederum auch austricksen kann. zumindest war das mal so.
ich würd mich jedenfalls nicht drauf verlassen. chroot ist auf jeden fall zusätzlich anzuraten.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
topeg
 2007-08-22 23:59
#98541 #98541
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
"Safe" bzw. "Safe::World" scheinen genau das zu sein, was ich brauche.
Soweit ich das sehe ist es auch bei den Basismodulen.
Danke.


Was die Umgehbarkeit betrifft so ist ja nur "eval" wirklich gefährlich. Wenn ich das verbiete (ich wüßte auch nicht wozu die Pluginprogrammierer das brauchen könnten...) dann sollte es keine Probleme geben.
pq
 2007-08-23 12:34
#98550 #98550
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
topeg+2007-08-22 21:59:18--
Was die Umgehbarkeit betrifft so ist ja nur "eval" wirklich gefährlich. Wenn ich das verbiete (ich wüßte auch nicht wozu die Pluginprogrammierer das brauchen könnten...) dann sollte es keine Probleme geben.

wenn du meinst. ich sag ja nur, dass Safe.pm mal angreifbar war, *obwohl* es eval verboten
hat. man konnte *ohne* eval die einstellungen von Safe wieder ändern.
ich würde mich jedenfalls nicht darauf *verlassen*
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
sid burn
 2007-08-23 12:58
#98554 #98554
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
topeg+2007-08-22 21:59:18--
Was die Umgehbarkeit betrifft so ist ja nur "eval" wirklich gefährlich. Wenn ich das verbiete (ich wüßte auch nicht wozu die Pluginprogrammierer das brauchen könnten...) dann sollte es keine Probleme geben.


Code (perl): (dl )
1
2
3
4
5
6
# $zahl kommt vom Nutzer.
eval { 10 / $zahl };
if ( $@ ) {
    # Fehler wegen Division durch 0.
    .....
}


Ja eval ist ganz ganz Pöse, und auch unnütz! ;)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
topeg
 2007-08-23 13:39
#98563 #98563
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
wenn ich mich richtig erinnere wird bei "eval $string" ein neue Interperterinstanz erzeugt. (bei eval{code...} ist das so weit ich mich erinnere nicht der Fall...) Und ich kann mir durchaus vorstellen, daß man dabei den überlagerten main-Namensraum erreichen kann. Aber das sind nur Vermutungen.
Und der Code in deinem Beispiel lässt sich auch anders schreiben...
sid burn
 2007-08-23 15:11
#98564 #98564
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
topeg+2007-08-23 11:39:23--
wenn ich mich richtig erinnere wird bei "eval $string" ein neue Interperterinstanz erzeugt. (bei eval{code...} ist das so weit ich mich erinnere nicht der Fall...) Und ich kann mir durchaus vorstellen, daß man dabei den überlagerten main-Namensraum erreichen kann. Aber das sind nur Vermutungen.
Und der Code in deinem Beispiel lässt sich auch anders schreiben...

1) Ja eval{} führt keine neue Instanz aus. Es Funktioniert wie ein try: catch: in anderen Sprachen. Auch Syntaxüberprüfung findet innerhlab eines eval {} blockes statt
2) Klar lässt sich der Code auch anders schreiben, es ging hier eher um das Prinzip das eval sehr wohl nützlich ist. Und es mag spezielle Fälle geben wo man auf eval {} angewiesen ist. Auch wenn die selten sind.
3) Auch ein String eval ist erstmal nicht gefährlich. Man kann damit mit sehr wenig Code neuen Code Intern Generieren und ausführen lassen. Das kann viel Arbeiten sparen. In Bestimmten fällen kannst du damit sogar die Performance erhöhen. Kann dir aber auf der schnelle auch kein Beispiel geben, da ich darin nicht so geübt bin.

Das was du damit verhinderst ist wenn einer String eval nutzt und damit Code ausführt der aus benutzereingaben stammt. Wenn das aber unbedingt jemand machen möchte ist es nicht die Frage ob er nicht sowieso einen weg drumherum findet. Ich würde jedenfalls die Plugin Authoren nicht behindern wollen wenn sie es für gute Zwecke nutzen. Aber das musst du ja Wissen.

Ich hab dir nur Gründe genannt wofür Plugin Authoren eval nutzen könnten, und die reine benutzung von eval ist auch erstmal nicht sofort gefährlich.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
<< >> 9 Einträge, 1 Seite



View all threads created 2007-08-22 22:19.