ich schreibe gerade ein programm, welches verschiedene benutzer selbst code erstellen lässt, der per eval() ausgeführt wird.
das würde dem programmierer in jedem fall die macht über das gesamte system geben, was nicht wünschenswert ist. bestimmte befehle sollten verhindert werden.
so wäre es z.b. interessant, nicht berechtigten usern shell-executions vorzuenthalten (zb. exec, passthru, system).
der von ihm erstellte code muß also geparst, auf bestimmte befehle durchsucht und dann je nach ergebnis erlaubt / nicht-erlaubt werden.
gibts da vorgefertigte möglichkeiten?
oder muß ich das per explode(";",$eval_str) selbst durchsuchen (nicht sehr bequem, da viele sonderfälle!)
auch interessant wäre, bestimmte variablen unter bestimmten umständen auf read-only zu setzen. ist das möglich?
verdammt. regular expressions sind doch shit - immerhin muß man stringinhalte und kommentare auslassen, und das ist per regexp nicht einfach. gar nicht einfach …
irgendwie komme ich mir etwas einsam vor … selbstgespräche führend … keiner von euch eine idee, wo man einen parser herbekommen könnte?
stefan
hm. manchmal sieht man den wald vor lauter bäumen nicht mehr.
wie wäre es mit einer regular expression? … hehe
deine verbotenen worte legst du in einem array ab.
ueber das gehst du mit ner schleife drueber, und schaust, ob irgendeines in deiner anweisung enthalten ist und gut. das wuerde ich aber mit strpos und nciht mit regexp machen, weil das wohl performanter und fuer deinen zweck ausreichend sein soll
das projekt muss ich nicht machen, weil privat, ist aber absolut interessant weil ein wiki-clon und nur: dynasnip-programmierung sollte nicht komplett auf fair-use laufen …
und mit strpos ist das problem: in strings und kommentaren wirds trotzdem erkannt.
Das hilft dir jetzt vielleicht nicht sehr viel, aber:
Aus Sicherheitsgründen solltest du nicht nach Verbotenem Befehlen suchen, sondern umgekehrt eine genau definierte Liste von erlaubten Befehlen vorgeben. Denn sonst gibt es *garantiert* ein Hintertürchen ("/bin/rm /* -R" ist verboten? Na, vielleicht ist
„/bin/ln /bin/rm ~/hallo“ ebensowenig verboten wie „~/hallo /* -R“)