2012-12-02 9 views
5

Ich spielte nur mit einer Idee herum und konnte mir keine Lösung vorstellen, wie dies im Backend gelöst werden kann, ohne die Sicherheitsproblematik zu beeinträchtigen.Algorithmen von 'nicht vertrauenswürdigen' Benutzern auswerten

Sagen, ich möchte Benutzern die Möglichkeit geben, einfache Algorithmen über einen Webdienst zu erstellen und diese über kleine Listen, z. range(0, 5) dann melden Sie die Ergebnisse über einen anderen Webservice, eine Vorlage oder eine E-Mail zurück, ist nicht wirklich wichtig, es ist die Bewertung, die mich stört.

mit Python:

class Algorithm(whatever): 
    function = whatever.CharField(max_length=75) 

Ein Benutzer etwas eingeben könnte:

'f(x)=x+(x/5)**0.75' 

Natürlich habe ich eval, Strippen alle Einbauten, Streichern andere als "x" usw. verwenden könnte, aber das wäre immer noch eine unglückliche Praxis.

Das einzige, was ich mir vorstellen konnte, ist Verschieben Sie jede Evaluierungsfunktionalität zu einem JavaScript-Frontend.

+1

Nun, Google macht so etwas in ihren Codejams. Ich frage mich, wie sie dieses Problem lösen. Führen Sie möglicherweise einen nicht vertrauenswürdigen Code einer VM mit dem erforderlichen Setup aus. Selbst wenn sie die VM borken, sind Sie immer noch sicher – inspectorG4dget

+0

, wenn Sie eventuelles "Import" -Schlüsselwort entfernen, sollte in Bezug auf Datenschaden nichts passieren. –

+0

@MaxLi Was ist mit "__import__"? – Natan

Antwort

3

eval() ist böse, und dies auf dem Backend ist sehr gefährlich. Jedoch könnte es sicher unter Verwendung eines getan werden. Aber wenn die Sandbox fehlschlägt, wirst du besessen. Das ist kein sehr "Defense in Depth" Ansatz.

Ein besserer Ansatz wäre es, die Payload auf der Clientseite zu bewerten ... Dies ist jedoch Cross-Site Scripting (XSS). Eine Möglichkeit, um zu verhindern, dass ein Angreifer dieses Problem ausnutzen kann, ist ein Ereignishandler auf der Clientseite, der das Formular beim Drücken einer Schaltfläche auswertet. Wenn der Angreifer eine GET- oder POST-Anforderung erstellen kann, die JavaScript ausführt, kann er die XSS-Sicherheitsanfälligkeit ausnutzen. Stellen Sie außerdem sicher, dass x-frame-options: denyclickjacking verhindert wird.

Verwandte Themen