2014-10-23 7 views
5

abbiamo iniziato ad avere più tali errori quotidiano, che appare nel registro eventi:"JSON primitive non validi: alihack" errori provenienti da un sito ASP.NET MVC

valido JSON primitiva: alihack. a System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() a System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal (Int32 profondità) a System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize (String ingresso, Int32 depthLimit, JavaScriptSerializer serializzatore) a System.Web.Script.Serialization.JavaScriptSerializer.Deserialize (JavaScriptSerializer serializzatore, ingresso stringa, digitare Type, Int32 depthLimit) a System.Web.Mvc.JsonValueProviderFactory.GetDeserializedObject (ControllerContext controllerContext) a System.Web.Mvc.JsonValueProviderFactory.GetValueProvider (Contro) llerContext controllerContext) a System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider (ControllerContext controllerContext) a System.Web.Mvc.ControllerBase.get_ValueProvider() a System.Web.Mvc.ControllerActionInvoker.GetParameterValue (ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) a System.Web.Mvc.ControllerActionInvoker.GetParameterValues ​​(ControllerContext controllerContext, ActionDescriptor actionDescriptor) a System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass21.b__19 (AsyncCallback asyncCallback, oggetto asyncState) a System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.Begin (AsyncCallback callback, oggetto di stato, Int32 timeout) a System.Web.Mvc.Async .AsyncControllerActionInvoker.BeginInvokeAction (controllerContext controllerContext, String ActionName, AsyncCallback richiamata, oggetto state) in System.Web.Mvc.Controller.b__1c (AsyncCallback asyncCallback, oggetto asyncState, ExecuteCoreState innerState) a System.Web.Mvc.Async .AsyncResultWrapper.WrappedAsyncVoid 1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.Begin (AsyncCallback callback, stato oggetto, Int32 tim eout) a System.Web.Mvc.Controller.BeginExecuteCore (AsyncCallback richiamata, Object state) in System.Web.Mvc.Controller.b__14 (AsyncCallback asyncCallback, oggetto callbackState, Controllore) a System.Web.Mvc .Async.AsyncResultWrapper.WrappedAsyncVoid 1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.Begin (AsyncCallback callback, oggetto di stato, Int32 timeout) a System.Web.Mvc.Controller.BeginExecute (RequestContext RequestContext, AsyncCallback callback, Object state) in System.Web.Mvc .Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute (RequestContext requestContext, callback Callback async, stato oggetto) a System.Web.Mvc.MvcHandler.b__4 (A syncCallback asyncCallback, oggetto asyncState, ProcessRequestState innerState) a System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid 1.CallBeginDelegate(AsyncCallback callback, Object callbackState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.Begin (AsyncCallback callback, oggetto di stato, Int32 timeout) a System.Web.Mvc.MvcHandler.BeginProcessRequest (HttpContextBase HttpContext, AsyncCallback callback, Object state) in System.Web.Mvc.MvcHandler.BeginProcessRequest (HttpContext HttpContext, AsyncCallback callback, Object state) in System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest (HttpContext contesto, AsyncCallback cb, oggetto ExtraData) a Orchard.Mvc.Routes.ShellRoute.HttpAsyncHandler.BeginProcessRequest (HttpContext contesto, AsyncCallback cb, oggetto ExtraData) a System.Web.HttpApplication.CallHandlerExecutionStep.System. Web.HttpApplication.IExecutionStep.Execute() a System.Web.HttpApplication.ExecuteStep (IExecutionStep passo, booleano & completedSynchronously)

Le richieste vanno a http://example.com/ali.txt. Ci dovrebbe essere qualcos'altro nel carico utile della richiesta poiché l'apertura di questo URL correttamente comporta un 404.

È qualcosa di cui preoccuparsi? Posso, dovrei impedire che si verifichi tale errore e invece restituire una Bad Request ad esempio? Perché questa de-serializzazione sta accadendo in primo luogo?

+0

Quello downvoting potrebbe davvero spiegarlo. – Piedone

+0

Sto notando lo stesso problema nei nostri log ELMAH. Sto cercando di rintracciarlo ora. – Paul

+0

Fantastico, fammi sapere se hai trovato qualcosa. – Piedone

risposta

3

Questo problema è un duplicato di (JSON::ParserError) "{N}: unexpected token at 'alihack<%eval request(\"alihack.com\")%> ma per un server diverso (IIS).

Se il tuo sito non utilizza richieste PUT, puoi semplicemente negare tutte quelle utilizzando <requestFiltering />.

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

Altrimenti una soluzione più elegante può si affida ad una la url rewrite module (può essere installato con il Web Platform Installer):

<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

Grazie, fantastico! – Piedone

+0

Poiché non si utilizza un carattere jolly, è possibile utilizzare '' 'patternSyntax =" ExactMatch "' '' –

Problemi correlati