it-swarm.com.de

Der ASP.NET MVC-Sicherheitspatch für Version 3.0.0.1 bricht die Erstellung ab

Nach der Installation des ASP.NET MVC 3-Sicherheitsupdates KB2990942 Es scheint, dass die MVC-Version von 3.0.0.0 bis 3.0.0.1. Dadurch findet Visual Studio den Verweis nicht mehr.

<Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

Resharper zeigt keine Probleme, aber der Build schlägt mit vielen ungelösten MVC-Typen und einer Warnung fehl:

Warnung : Dieser Verweis konnte nicht aufgelöst werden. Die Assembly "System.Web.Mvc, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL" konnte nicht gefunden werden. Stellen Sie sicher, dass die Assembly auf dem Datenträger vorhanden ist. Wenn dieser Verweis für Ihren Code erforderlich ist, können Kompilierungsfehler auftreten.

Diese Art von macht Sinn. Diese Version existiert nicht mehr auf meinem Rechner.

Ich kann die genaue MVC-Version auf Entwicklungsmaschinen, Buildservern und Produktionsservern nicht garantieren. Vielleicht haben Sie 3.0.0.0 oder 3.0.0.1 und das kann sich jederzeit ändern. Windows Update kann jederzeit neue MVC-Versionen veröffentlichen. Außerdem möchte ich die Versionsnummer nicht in allen * .csproj-Dateien erhöhen, wenn ein MVC-Update veröffentlicht wird.

Mehrere Versionen sind vom Update betroffen:

Das Security Bulletin: MS14-059: Sicherheitsanfälligkeit in ASP.NET MVC kann Umgehung von Sicherheitsfunktionen ermöglichen (2990942)

Was ist der beste Weg, um mit dieser Situation umzugehen? Wie kann ich die Erstellung und Produktion von MVC-Updates aufheben und sicher sein?

107
usr

Ich habe das behoben durch:

  • Entfernen Sie die MVC-Referenz, und fügen Sie dem Projekt die richtige Referenz hinzu.
  • Ändern der Eigenschaft Copy Local Des Verweises in true.
  • Aktualisieren Sie die Einstellung von bindingRedirect in web.config:

web.config runtime section:

<runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
        </dependentAssembly>
    ...

Wenn Sie die Einstellung Copy Local Ändern, wird die Datei System.Web.MVC.dll Beim Veröffentlichen des Projekts im Ordner bin gespeichert, sodass sie auch dann funktioniert, wenn der Server nicht mit der neuen Version aktualisiert wird.

Beachten Sie, dass Aktualisierungen wie diese selten vorkommen. Dies ist das erste Mal, dass MVC 3 seit seiner Veröffentlichung gepatcht wurde. Sie sollten in der Lage sein, Copy Local Wieder in false zu ändern, sobald die Server aktualisiert wurden. Wenn Microsoft das nächste Mal ein derartiges Update durchführt, wird es wahrscheinlich wissen, wie man solche Probleme zuerst behebt.

66
Guffa

Ich habe das Microsoft.AspNet.Mvc-Paket mit Nuget in meinem Projekt installiert.

Install-Package Microsoft.AspNet.Mvc -Version <version> -Project PROJECTNAME 

MVC 4 version: 4.0.40804.0

MVC 3 version: 3.0.50813.1

Dies hat das Problem behoben. Details hier: http://blogs.msdn.com/b/webdev/archive/2014/10/16/Microsoft-asp-net-mvc-security-update-broke-my-build.aspx =

27
gunnerz

Ihr Produktionssystem sollte in Ordnung sein, da der Hotfix eine Konfigurationsdatei (System.Web.Mvc.dll.config) in den folgenden Ordner liefert:

%SystemRoot%\Assembly\GAC_MSIL\policy.3.0.System.Web.Mvc\3.0.0.1__31bf3856ad364e35

Die Konfigurationsdatei enthält eine Assembly-Umleitung auf die neue Version. Diese überschreibt alles, was Sie in Ihrer web.config haben:

<?xml version="1.0"?>
<!-- http://msdn.Microsoft.com/en-us/library/7wd6ex19.aspx#BKMK_Redirectingassemblyversionsbyusingpublisherpolicy -->
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="3.0.0.0-3.0.0.1" newVersion="3.0.0.1"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Befolgen Sie die Anweisungen von @Guffa für Ihr Build-System oder verwenden Sie Nuget zum Aktualisieren. Ich glaube, die Lösung, die funktioniert, hängt davon ab, wie Sie die MVC-Binärdateien auf Ihrem System bereitstellen (entweder bin deploy oder GAC).

12
David Martin

Was in meinem Fall funktionierte, war, das Reference -Element in der Projektdatei so zu ändern, dass Version=3.0.0.0 Jetzt Version=3.0.0.1 Ist. Ich habe auch die Datei System.Web.Mvc.dll Im Ordner _bin_deployableAssemblies Auf die neue Version aktualisiert und ein HintPath -Element in das Reference -Element eingefügt, das auf die DLL verweist, damit sie ausgewählt wird auch wenn wir in GAC noch Version 3.0.0.0 haben.

Der schwierige Teil ist, nicht zu vergessen, die Referenz in allen Projekten zu aktualisieren, die auf System.Web.Mvc Verweisen (z. B. einschließlich Testprojekt).

1
Pol