服务器开始接收带有无效Cookie _a_d3t6sf的请求

时间:2018-06-20 15:46:09

标签: cookies



从2018年6月4日开始,我们的生产站点开始接收包含无效值Cookie的请求:

_a_d3t6sf="duUt#<WFf>>nD=9O&lG9y)DN"

值不同,但是所有请求的名称都相同。

异常看起来像这样:

System.Web.HttpRequestValidationException (0x80004005): A potentially dangerous Request.Cookies value was detected from the client (_a_d3t6sf="xdZ<et[)27rL^5lBe6rL_<[...").
   at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
   at System.Web.HttpRequest.ValidateCookieCollection(HttpCookieCollection cc)
   at System.Web.HttpRequest.get_Cookies()
   at System.Web.HttpRequest.FillInParamsCollection()
   at System.Web.HttpRequest.GetParams()
   at System.Web.HttpRequest.get_Params()
   at ASP._sites__shared_svc_getstrings_aspx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in ___\getStrings.aspx:line 6
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
   at System.Web.UI.Page.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at ASP._sites__shared_svc_getstrings_aspx.ProcessRequest(HttpContext context) in ___\root\3403aaf9\baa39378\App_Web_zbqbtb3n.2.cs:line 0
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)



在我们的代码中没有这样的cookie,在请求之前没有表单发布或我们可以验证的任何内容。我们的配置中有验证模式2.0

<httpRuntime targetFramework="4.5" requestValidationMode="2.0" />

所以只有.aspx页会抛出该异常。其中之一是西班牙在线支付系统的回调页面。而且它也从真实的支付系统服务器上获得了该cookie-已经完成付款,请求已发送给我们,但由于该cookie而无效。


有三个.aspx页面,它们是样式,脚本和javascript本地化字符串的最小化源。因此,一次完整页面加载每次都会引发三个异常,但是只有少数客户端具有此cookie。在我们的计算机上,我们无法复制它。


所以:
 1.我们没有添加或读取该cookie的东西。
 2.并非每个客户都拥有它。
 3.来自在线支付服务的安全请求每天都会发送支付数据,但也会有一次Cookie。
 4.今天已安装所有Windows更新,包括.net安全性-没有任何变化。  5.我们无法关闭验证。
 6.最近一次代码更改是在一个月前完成的,而所有这些更改大约是在两周前开始的。


寻找任何想法和建议。谢谢。

2 个答案:

答案 0 :(得分:0)

也许您正在使用zp.jspluso-like.js插件。

他们进行一些可疑的活动,并加载添加了_a_d3t6sf cookie的'processor.js'脚本。如果客户很幸运,他将获得

这样的安全cookie值
  

duu2BAdLFlYTaTgr_h4WB6

但如果不是,他将获得不安全的Cookie值,如

  

duu2BAdLFlYTaT#^ 0 [AZ?WB6

关于pluso.ru的一些article

答案 1 :(得分:0)

我对此和所有可能的第三方无效cookie的解决方案:

1)复制或反映CrossSiteScriptingValidation.cs类,该类用于在框架内部验证HttpRequest:
https://referencesource.microsoft.com/#System.Web/CrossSiteScriptingValidation.cs,3c599cea73c5293b

2)在

上的Global.asax中
protected void Application_BeginRequest( Object sender, EventArgs e ){}

验证cookie

    // Validate and remove all invalid cookies
    try
    {
        for( var i = Request.Cookies.Count - 1; i >= 0; i-- )
        {
            var cookie = Request.Cookies.Get( i );
            if( string.IsNullOrWhiteSpace( cookie?.Value ) )
            {
                continue;
            }

            if( CrossSiteScriptingValidation.IsDangerousString( cookie.Value ) )
            {
                Request.Cookies.Remove( cookie.Name );

                // Remove cookie from client
                Response.Cookies.Add( new HttpCookie( cookie.Name ) { Expires = DateTime.Now.AddDays( -1d ) } );
            }
        }
    }
    catch( Exception ex )
    {
        Log.Error( "Failed to validate cookies. ", ex );
    }