我从Web场中的某个asp服务器收到大量错误警报,并且所有服务器的web.config文件中都有相同的机器密钥。 我在这里环顾四周,但没有找到这个确切的案例。任何建议都会受到欢迎。
感谢您考虑这个问题!
以下是一些错误堆栈(查询字符串不是来自我们的应用程序,可能是其他内容的一部分):
错误消息:这是无效的 网络资源请求。堆栈跟踪:
在 System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext的 上下文) System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步,布尔& completedSynchronously) 来源:System.Web方法:无效 System.Web.IHttpHandler.ProcessRequest(System.Web.HttpContext) 页面:QueryString:d = hAGTq1Iohid
这些可能是在修补Win 2003服务器时启动的。后来的dot.net框架安装在其他三台服务器上,但没有安装在抛出错误的服务器上。
大多数错误似乎与解密有关,但同一Web场中的所有服务器现在都在其Web配置中使用相同的计算机密钥。但这并没有阻止错误。
看到了:
"Length of the data to decrypt is invalid"
Error message: Length of the data to decrypt is invalid. Stack trace: at System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) at System.Security.Cryptography.CryptoStream.FlushFinalBlock() at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Boolean useValidationSymAlgo) at System.Web.UI.Page.DecryptString(String s) at
System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
还
"Invalid length for a Base-64 char array"
Error message: Invalid length for a Base-64 char array.
Stack trace: at System.Convert.FromBase64CharArray(Char[] inArray, Int32 offset, Int32 length)
at System.Web.HttpServerUtility.UrlTokenDecode(String input)
at System.Web.UI.Page.DecryptString(String s)
at System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Source: mscorlib
Method: Byte[] FromBase64CharArray(Char[], Int32, Int32)
并且
"Invalid view state"
Error message: Invalid viewstate.
Stack trace: at System.Web.UI.Page.DecryptString(String s)
at System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Source: System.Web
Method: System.String DecryptString(System.String)
再次感谢大家。
答案 0 :(得分:1)
如果这个服务器是唯一一个未修补并且显示错误的服务器,那么我要做的第一件事就是在其上运行所有的Windows更新。
实际上,让我使该声明不那么复杂:如果未修补此服务器,请从那里开始并应用它们。
<强>更新强>
您提到服务器正在抛出视图状态长度错误。我们发现的一件事是,几个组件,特别是数据网格,将大量数据推送到视图状态。另一件事是,几个浏览器会根据长度阻塞它,而不是将所有浏览器全部发回。
在我们进行了特定的web.config更改之后,这个问题就完全消失了。甚至Safari 3也开始正常工作。转到<system.web> <pages />
节点并进行以下更改:
<pages maxPageStateFieldLength="500" />
这将导致viewstate跨多个隐藏字段分解,每个字段500字节。这是一个自动拆分,所以你的常规代码都不得改变以支持它。
您可以使用该值,但实际上某些浏览器只能在每个输入字段中发回这么多数据。根据我见过的那种版本,当这些值大约超过700字节左右时就会出现。防火墙和代理服务器也可能会导致问题。有关更多信息,请参阅以下内容:http://weblogs.asp.net/lduveau/archive/2007/04/17/viewstate-chunking-in-asp-net-2-0-maxpagestatefieldlength.aspx
追求的另一个选择是让viewstate在本地缓存,而不是通过网络发送它。当然,这会对网络农场场景产生影响,所以选择你的毒药。
答案 1 :(得分:0)
我无法确定,但它看起来像是试图利用非常严重.NET 'Padding Oracle' Crypto Attack, discussed by Scott Guthrie的黑客企图。有a patch available,所以如果您发现您的服务器确实存在漏洞,请确保立即对其进行修补,如果实际上已经受到损害,请采取损害控制措施。
这也可能是由您的应用程序问题引起的。但是,如果您突然发现大量这些错误,尤其是最近没有对您的应用进行任何更改,我首先想到的就是入侵企图。用于利用此漏洞的方法会产生与解密和错误数据长度相关的错误。
答案 2 :(得分:0)
刚才在一个网站上发生的事情,没有明显的原因:对Web资源的请求生成了“无效请求”错误,并且所有脚本都被破坏了。
也许是服务器的更新。
我的解决方案是转到IIS控制面板并为该站点生成一个新的机器密钥。 无论是什么,这似乎都能解决问题。