Sollte ich Glimpse auf der Produktionsstätte bereitstellen?


72

Ich habe kürzlich das Glimpse Debugger-Paket zu meinem Projekt hinzugefügt. Dies fügte einen Verweis auf die Glimpse-DLL hinzu und änderte einige Web.Config.

Ich mag mein Projekt in meiner Entwicklungs- und Produktionsumgebung so gut wie möglich.

Ist es also sicher / sinnvoll, Glimpse auf meinem Produktionsstandort bereitzustellen, oder sollte ich ein anderes Projekt erstellen (oder einen Zweig aus meiner csproj-Datei erstellen), um es nur lokal zu behalten?

Zu den Dingen, über die ich mir Sorgen mache, gehören:

  • Performance
  • Sicherheitsverstoss

1
Als Update dazu haben wir vor einiger Zeit ein neues Update veröffentlicht, mit dem Sie die Dinge mit noch mehr benutzerdefinierter Logik sperren
anthonyv

Antworten:


105

Ich glaube, wenn das Cookie für Glimpse nicht gefunden wird, wird es nicht geladen oder tut nichts, daher sollte die Leistung vernachlässigbar sein. In Bezug auf die Sicherheit können Sie einfach in der web.config eine Benutzereinschränkung für den Speicherort des Blickpfads festlegen.

<location path="Glimpse.axd" >
    <system.web>
        <authorization>
            <allow users="Administrator" />
            <deny users="*" />
        </authorization>
    </system.web>
</location>

Wenn es eine Administratorrolle gibt, können Sie dies auch nach Rolle anstelle des Benutzernamens tun.

Sie können es auch ausschalten, wenn Sie sich nicht nur auf das Vorhandensein des Cookies verlassen möchten. Dies ist leicht durch web.config-Transformationen zu erreichen. Ich habe das Markup noch nicht getestet, aber so etwas sollte funktionieren.

<glimpse enabled="false" xdt:Transform="SetAttributes">
</glimpse>

UPDATE : In letzter Zeit wurden einige Änderungen vorgenommen, und (seit 1.0, glaube ich?) Würde die Transformation nun wie folgt aussehen. Der Versuch, das enabledAttribut festzulegen, führt in der neuesten Version von Glimpse zu einem Konfigurationsfehler.

<glimpse defaultRuntimePolicy="Off" xdt:Transform="SetAttributes">
</glimpse>

Wie die Dokumentation es ausdrückt ...

Glimpse darf mit einer HTTP-Antwort niemals mehr tun, als in angegeben DefaultRuntimePolicy.

Es sollte beachtet werden, dass der einzige Zweck dieser Transformation darin besteht, die Möglichkeit zu entfernen, Glimpse als Teil Ihres Bereitstellungsprozesses zu verwenden. Wenn Sie es aufgrund anderer Kriterien wie Remote-Anforderungen oder Berechtigungsprüfung bedingt deaktivieren möchten, erfolgt dies besser über Richtlinien. Glimpse arbeitet jetzt mit einer Reihe von Richtlinien (alle basieren auf IRuntimePolicy), mit denen bestimmt werden soll, wann Glimpse das tun darf. Wenn Sie nach der Installation von Glimpse zu glimpse.axd navigieren, wird unten auf dieser Seite eine Liste der derzeit aktivierten Richtlinien angezeigt. Zum Beispiel das LocalPolicy, das verhindert, dass Remote-Anforderungen darauf zugreifen (konfigurierbar kann jede Richtlinie über die web.config ignoriert werden, um Remote-Anforderungen zuzulassen). Http://getglimpse.com/Help/Configuration. Sie haben auch eine Beispielklasse namens GlimpseSecurityPolicy, die enthalten ist, wenn Sie Glimpse mit Nuget installieren, mit der Sie Autorisierungsbeschränkungen hinzufügen können.

public class GlimpseSecurityPolicy:IRuntimePolicy
{
    public RuntimePolicy Execute(IRuntimePolicyContext policyContext)
    {
        // You can perform a check like the one below to control Glimpse's permissions within your application.
        // More information about RuntimePolicies can be found at http://getglimpse.com/Help/Custom-Runtime-Policy
        var httpContext = policyContext.GetHttpContext();
        if (httpContext.User != null && !httpContext.User.IsInRole("Glimpse")) //Once glimpse is turned on, you have to be a member of this Role to see the Glimpse Panel.
        {
            return RuntimePolicy.Off;
        }

        return RuntimePolicy.On;
    }

    public RuntimeEvent ExecuteOn
    {
        get { return RuntimeEvent.EndRequest; }
    }
}

Jetzt werden die Richtlinien verwendet, um zu bestimmen, wann glimpse ausgeführt werden soll, aber sie verhindern nicht, dass der Benutzer die Seite glimpse.axd aufrufen kann. Der Cookie kann nach wie vor aktiviert werden, was ich sagen kann, aber der Cookie ist bedeutungslos, wenn ein Blick trotz des vorhandenen Cookies nicht ausgeführt werden kann. Trotzdem ist es immer noch ratsam, die Seite glimpse.axd mit dem Standort-Tag in Ihrer web.config in eine Autorisierungsprüfung einzuschließen. Beachten Sie, dass dies zusätzlich zu den GlimpseSecurityPolicyoben genannten ist.

<location path="glimpse.axd">
  <system.web>
    <authorization>
      <allow roles="Glimpse" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>

Hallo Yarx, kannst du mir sagen, wohin in der web.config diese Zeile geht? <gl glight on = "false" xdt: Transform = "SetAttributes"> </ glimpse>
jaryd

3
VS2010 kann für Ihre web.config-Datei sogenannte "Transformationsdateien" erstellen. Diese werden zur Erstellungszeit in Ihrer web.config-Datei ausgeführt, um sie zur Vorbereitung Ihrer Zielbereitstellung basierend auf der verwendeten Erstellungskonfiguration zu ändern. Wenn Sie sich beispielsweise im Release-Modus befinden, werden Transformationen aus der Datei web.release.config angewendet. Um diese Dateien zu erhalten, klicken Sie einfach mit der rechten Maustaste auf web.config und wählen Sie Add Config TransformsEs gibt viele Tutorials, die erklären, wie diese Dateien funktionieren und welche Syntax verwendet werden soll. msdn.microsoft.com/en-us/library/dd465326.aspx
Nick Albrecht

Beachten Sie, dass Glimpse/Configdurch ersetzt wurde Glimpse.axd.
ckittel

1
@Yarx Ich weiß nicht, ob das Attribut zuvor (Ein) war, aber es ist (aktiviert) in 0.86, daher wäre die Transformation: <glimpse enabled = "false" xdt: Transform = "SetAttributes">
Idrees

@Yarx Hier ist eine Klarstellung vorhanden. Die Umwandlung der Konfigurationsdatei erfolgt nicht beim Kompilieren, sondern beim Veröffentlichen. (was die Funktionalität in Szenarien mit Build-Maschinen unbrauchbar macht)
LosManos

9

Yarx hat an fast allen Fronten Recht.

Aus Sicherheitsgründen können Sie den Pfad mit der beschriebenen Methode sperren. Die einzige Sache ist, dass es mehr URL-Endpunkte gibt, die von fluch verwendet werden. Die Regel müsste also ungefähr so ​​lauten *Glimpse/*(wobei * besagt, dass alles davor und alles danach kommen kann). Sobald dies geschehen ist, sollte der Blick ziemlich abgeschlossen sein.

Wenn Sie in der Konfiguration die von Yarx bereitgestellte Transformation verwendet haben, wird ein Blick nie geladen, selbst wenn Sie das Cookie aktiviert haben.


*Glimpse/*ist im Pfadattribut nicht zulässig. <location> path attribute must be a relative virtual path. It cannot contain any of '?' ':' '\' '*' '"' '<' '>' or '|'.Wo soll ich es also ablegen? Danke
Peter

1

Ab Glimpse 1.7 gibt es eine allgemeinere Möglichkeit, ~/glimpse.axdmit dem zusätzlichen Vorteil zu sichern , dass Sie für alle dieselbe Richtlinie verwenden. Sie müssen lediglich sicherstellen, dass Ihre benutzerdefinierte Richtlinie auch für Ressourcen aufgerufen wird:

 public RuntimeEvent ExecuteOn
 {
     // The bit flag that signals to Glimpse that it should run on either event
     get { return RuntimeEvent.Endrequest | RuntimeEvent.ExecuteResource; }
 }

Beachten Sie die | RuntimeEvent.ExecuteResource. Siehe unten unter: Sichern von Glimpse.axd auf dem Weg nach vorne .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.