Evaluiere einen beliebigen symbolischen Ausdruck, der bei einigen Werten als String angegeben ist

8

Ich möchte, dass ein Benutzer eine Zeichenfolge für eine Formel für y als Funktion von x , z. B.

, eingeben kann %Vor%

Ich möchte dann diesen Ausdruck an einigen Punkten, z. für Werte von x <- 1:0.1:100 .

Ich weiß, dass ich tun kann:

%Vor%

Dies lässt jedoch meinen Computer für Angriffe offen, wenn der Benutzer fn liefert, was keine Formel

ist %Vor%

Gibt es alternative Möglichkeiten, um das zu erreichen, was ich tun möchte?

    
Alex 08.06.2016, 01:57
quelle

1 Antwort

9

Eine der coolsten Funktionen von R ist, dass es seine eigene Sprache verarbeiten kann, so dass Sie eine Funktions-Whitelist erstellen und Ausdrücke dagegen prüfen können:

%Vor%

Wir definieren dann eine Whitelist der zulässigen Funktionen. Es ist sehr wichtig, dass Sie sehr vorsichtig sind, was Sie hier zulassen. Insbesondere, wenn Sie parse , eval oder irgendwelche Funktionen mit möglichen unangenehmen Nebenwirkungen zulassen ( system , unlink , usw.), öffnen Sie Ihr System für Angriffe.

%Vor%

Und wir testen:

%Vor%

Keine ausdrücklichen oder stillschweigenden Garantien. Es mag einen Weg geben, dies zu hacken, an den ich nicht gedacht habe, also stellen Sie es nicht ohne eine gründliche Untersuchung auf einen öffentlich zugänglichen Server, aber ich denke, das könnte einfach funktionieren.

Beachten Sie, dass, wenn jemand einen Ausdruck bereitstellen kann, der parse selbst hackt, Sie auf diese Weise kompromittiert werden können.

EDIT: Ben Bolker schlug einen cleveren Trick vor, um das zu hacken, aber diese Funktion ist robust:

%Vor%     
BrodieG 08.06.2016, 02:21
quelle

Tags und Links