Ich entschuldige mich im Voraus für die generische Art meiner Frage, aber ich konnte keine hilfreichen Ratschläge von Menschen finden, die versuchen, das gleiche wie ich im Internet zu tun. Lassen Sie mich mein Szenario beschreiben:ASP.NET MVC 3 Razor Einschränkungen anzeigen
Ich biete Endbenutzern/Designern einer Website die Möglichkeit, ihre Ansichten durch Speichern der Ansichten (mit Razor) in der Datenbank anzupassen. Ich habe alles funktioniert, aber meine Frage ist die folgende; Wie kann ich aus Sicherheitsgründen sicherstellen und erzwingen, dass unerwünschter Code nicht in der benutzerdefinierten Ansicht ausgeführt wird? Es gibt zwei grundlegende Ansätze, von denen ich denke, dass sie konzeptionell funktionieren werden, aber ich bin mir nicht sicher, welche davon möglich oder machbar ist.
Option 1: Erstellen Sie eine Validierungsmethode im Administrationstool, mit der der Benutzer den Ansichtscode eingeben kann. Dies müsste entweder eine Whitelist- oder eine Blacklist-Herangehensweise an das zulassen, was zulässig ist oder nicht.
Option 2: Verhindern, dass unerwünschter Code beim Rendern der Ansicht ausgeführt werden kann.
Als schnelles Beispiel für etwas, das blockiert werden müsste, würden wir keinen Zugriff auf das Lesen oder Schreiben von Dateien, Zugriff auf Datenzugriffsfunktionen oder sogar den Zugriff auf Konfigurationseinstellungen usw. in der Datei web.config erlauben . Es wird wahrscheinlich eine anständige Größe von Dingen geben, die wahrscheinlich nicht zulässig sein sollten, aber ich muss mich hinsetzen und versuchen, so viele sicherheitsrelevante Bedenken wie möglich zu berücksichtigen.
Meine Frage ist dann, welche Methode wäre die beste Wette? Kann man auch eine Richtung angeben, wie man vorgeht? Ich dachte, ich könnte vielleicht Änderungen auf der Vertrauensstufe vornehmen, was Option 2 wäre, aber ich konnte keine Möglichkeit finden, diese Arbeit auf einer per View basierenden Basis zu erledigen (der Administrationscode darf ausführen, was er will). Ich denke, Option 1 wird am Ende die beste Wette sein, und ich werde auf die Eingabe bestimmter Rahmenfunktionen achten müssen, die nicht erlaubt sein sollten. Hat irgendjemand irgendeine Erfahrung, irgendetwas zu tun, was ich versuche zu tun? Jegliches Feedback wird sehr geschätzt!
Option 2 wäre aus der Sicht eines Benutzers schrecklich, der versuchen könnte, Code zu verwenden, von dem er sonst nicht wusste, dass er "schlecht" ist. Ich stimme SLaks zu, dass ein White-List-Ansatz besser wäre, und ich kenne die genaue Art Ihres Projekts nicht, z. B. wer Ihre Kunden sind, aber dies wird eine schwierige Aufgabe sein, abhängig davon, wie viel Flexibilität Sie benötigen. – AwDogsGo2Heaven
Ich wollte vorschlagen, dass Sie Liquid Markup auschecken, dann fand ich [DotLiquid] (http://dotliquidmarkup.org/try-online). Es sieht so aus, als ob es deckt, was du erreichen willst (aber mit Liquid statt Razor). –