Moin!
ich möchte den PHP-Tester trotzdem Online stellen, jedoch müsste ich dazu wissen welche begriffe ich sperren muss damit sowas nicht mehr vorkommt. oder ist komplett schwachsinn? ich denke mal wenn begriffe wie 'unlink' usw sperrt dann kann man den php tester wieder online stellen oder? zur sicherheit evtl. noch mit anmeldung. was haltet ihr davon.
Das ist wieder virtueller Selbstmord.
Es gibt in meinen Augen _KEINE_ Möglichkeit, weder über Whitelist noch über Blacklist, eine beliebige Codeausführung irgendwie abzusichern.
Warum? Weil es absolut unmöglich sein dürfte, wirklich zu filtern, und trotzdem noch irgendwelchen Code zur Ausführung zu erlauben. Was hälst du beispielsweise davon, statt den Code direkt in die Testdatei reinzuschreiben, sie erstmal codiert reinzuschreiben und dann in eine Datei entpacken zu lassen.
Ok, dann sperrst du Dateioperationen. Nützt dir aber nicht zwingend etwas, weil es außer fopen() natürlich noch exec() etc. gibt, die externe Befehle ausführen.
Also sperrst du diese Befehle. Dann findet mit Sicherheit ein schlauer Mensch Möglichkeiten, noch mit anderen Befehlen Dateien auf deinem Server anzulegen, dort hinein Code zu schieben, und ihn dann auszuführen.
Oder es wird einfach mit include() oder require() von externen Quellen aus Code eingebunden. Ok, dann sperrst du diese beiden Befehle eben auch.
Ist aber auch kein Problem, dann wird der Code eben mit eval() ausgeführt.
Du kannst niemals wirklich sicher sein, dass der eingegebene Code nicht gegen dich verwendet werden kann. Genau deshalb ist es ja extrem wichtig, dass man sich _keinerlei_ fremden Code einfängt.
Und ehrlich gesagt: Wenn der Kumpel in der Lage ist, PHP zu programmieren, warum ist er dann zu blöde, sich mal eben einen Apache mit PHP und MySQL aus dem Netz zu ziehen und lokal zu installieren? Warum zum Teufel muß er das unbedingt bei dir online testen?
Ok, den Denkzettel hast du gekriegt, die Gefährlichkeit von fremdem Code zu spüren gekriegt, und vertraue mir bitte, wenn ich dir sage, dass du nicht effektiv filtern kannst. Lass deine Idee ganz einfach fallen - ist auf die Dauer billiger und weniger zeitaufwendig.
- Sven Rautenberg
--
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|