2014-10-23 15 views
5

Wir begannen täglich mehrere solche Fehler zu erhalten, in dem Ereignisprotokoll erscheinen:"Invalid JSON primitiv: alihack" Fehler aus einer ASP.NET MVC-Website kommen

ungültige JSON primitiv: alihack. bei System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() bei System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal (Int32 Tiefe) bei System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize (String Eingangs, Int32 depthLimit, JavaScriptSerializer Serializer) bei System.Web.Script.Serialization.JavaScriptSerializer.Deserialize (JavaScriptSerializer Serializer, String-Eingang, Typ Typ, Int32 depthLimit) bei System.Web.Mvc.JsonValueProviderFactory.GetDeserializedObject ( Controllercontroller) um System.Web.Mvc.JsonValueProviderFactory.GetValueProvider (Contro llerContext Controller) bei System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider ( Controllercontroller) bei System.Web.Mvc.ControllerBase.get_ValueProvider() bei System.Web.Mvc.ControllerActionInvoker.GetParameterValue ( Controllercontroller, ParameterDescriptor ParameterDescriptor) um System.Web.Mvc.ControllerActionInvoker.GetParameterValues ​​(ControllerContext controllerContext, ActionDescriptor actionDescriptor) um System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass21.b__19 (AsyncCallback AsyncCallback, Object AsyncState) bei System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.BEGINN (AsyncCallback Rückruf, Objektzustand, Int32 timeout) bei System.Web.Mvc.Async .AsyncControllerActionInvoker.BeginInvokeAction ( Controllercontroller, String action, AsyncCallback Rückruf, Object Zustand) bei System.Web.Mvc.Controller.b__1c (AsyncCallback AsyncCallback, Object AsyncState, ExecuteCoreState Innerstate) bei System.Web.Mvc.Async .AsyncResultWrapper.WrappedAsyncVoid 1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.Begin (AsyncCallback Rückruf, Objektstatus, Int32-Tim Eout) bei System.Web.Mvc.Controller.BeginExecuteCore (AsyncCallback Rückruf, Objektzustand) bei System.Web.Mvc.Controller.b__14 (AsyncCallback AsyncCallback, Object callbackState, Controller Controller) bei System.Web.Mvc .Async.AsyncResultWrapper.WrappedAsyncVoid 1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.BEGINN (AsyncCallback Rückruf, Objektzustand, Int32 timeout) bei System.Web.Mvc.Controller.BeginExecute (Requestrequest, AsyncCallback Rückruf, Objektzustand) bei System.Web.Mvc .Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute (RequestContext Anforderungskontext, AsyncCallback Callback, Objektstatus) um System.Web.Mvc.MvcHandler.b__4 (A syncCallback AsyncCallback, Object AsyncState, ProcessRequestState Innerstate) bei System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid 1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.BEGINN (AsyncCallback Rückruf, Objektzustand, Int32 timeout) bei System.Web.Mvc.MvcHandler.BeginProcessRequest (Httpcontextbase Httpcontext, AsyncCallback Rückruf, Objektzustand) bei System.Web.Mvc.MvcHandler.BeginProcessRequest (Httpcontext Httpcontext, AsyncCallback Rückruf, Objektzustand) bei System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest (Httpcontext Zusammenhang AsyncCallback cb, Objekt-Extradata) an Orchard.Mvc.Routes.ShellRoute.HttpAsyncHandler.BeginProcessRequest (Httpcontext Zusammenhang AsyncCallback cb, Objekt-Extradata) an System.Web.HttpApplication.CallHandlerExecutionStep.System. Web.HttpApplication.IExecutionStep.Execute() bei System.Web.HttpApplication.ExecuteStep (IExecutionStep Schritt, Boolean & completedSynchronously)

Die Anfragen gehen zu http://example.com/ali.txt. Es sollte etwas anderes in der Payload der Anfrage vorhanden sein, da das einfache Öffnen dieser URL zu einem 404 führt.

Ist das etwas, worüber man sich Sorgen machen muss? Kann ich, sollte ich einen solchen Fehler verhindern und stattdessen eine schlechte Anfrage zurückgeben? Warum geschieht diese Deserialisierung überhaupt?

+0

Die eine downvoting könnte es wirklich erklären. – Piedone

+0

Ich merke das gleiche Problem in unseren ELMAH-Protokollen. Ich versuche es jetzt aufzuspüren. – Paul

+0

Großartig, lassen Sie mich wissen, wenn Sie etwas gefunden haben. – Piedone

Antwort

3

Dieses Problem ist ein Duplikat von (JSON::ParserError) "{N}: unexpected token at 'alihack<%eval request(\"alihack.com\")%>, aber für einen anderen Server (IIS).

Wenn Ihre Site keine PUT-Anforderungen verwendet, können Sie alle unter Verwendung von <requestFiltering /> einfach ablehnen.

<configuration> 
    <system.webServer> 
     <security> 
     <requestFiltering> 
      <verbs applyToWebDAV="false"> 
      <add verb="PUT" allowed="false" /> 
      </verbs> 
     </requestFiltering> 
     </security> 
    </system.webServer> 
</configuration> 

Ansonsten eine elegantere Lösung mit dem url rewrite module archiviert werden (mit dem Web Platform Installer installiert werden kann):

<configuration> 
    <system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="Abort requests to ali.txt - alihack" patternSyntax="Wildcard" stopProcessing="true"> 
      <match url="ali.txt" /> 
      <conditions /> 
      <action type="AbortRequest" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 
+0

Vielen Dank, großartig! – Piedone

+0

Da Sie keine Platzhalter verwenden, können Sie '' 'patternSyntax =" ExactMatch "' '' verwenden –