我们有互联网网站上2服务器负载平衡服务器的代码是相同的两个服务器上,但其中一个服务器显示下面的异常每分钟,“$MainContent$ASPControl”每次都在改变。
A potentially dangerous Request.Form value was detected from the client (ctl00$MainContent$drpOwnerNationality="...lect'"()&%<acx><ScRiPt >prompt..."). at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
at System.Web.HttpRequest.ValidateHttpValueCollection(HttpValueCollection collection, RequestValidationSource requestCollection)
at System.Web.HttpRequest.get_HasForm()
at System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
at System.Web.UI.Page.DeterminePostBackMode()
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.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)_ApplicationError,
4条答案
按热度按时间cyvaqqii1#
我认为你的一个控件(drpOwnerNationality)有脚本.. ASP.NET对表单上的所有输入进行了潜在的XSS验证...所以它检测到你的一个控件中的脚本,这就是异常状态。
问题可能是您的应用程序的一个用户正在输入文本框/控件中的脚本,而您没有在客户端进行验证。
一种方法是在客户端进行验证,并通知用户他们不能在控件中输入脚本
另一种方法是通过将页面上的validateReqeust属性设置为false来关闭验证
但是如果你这样做了,你的应用程序就暴露在了XSS的攻击之下。一种方法是在处理信息之前禁用验证并对所有输入进行编码。
kuarbcqp2#
错误原因是您试图发送纯html或其他可能包含不安全元素的内容。1.您可以像下面的article一样禁用请求验证。2.其他选项,您可以在使用第三方JavaScript库发送之前将您的内容转换为Base64(尝试谷歌它)。
还有其他一些选择,但这取决于您的情况。
3bygqnnd3#
我们检测到来自2个IP的巨大点击,在阻止它们之后,问题解决了。似乎有人试图张贴不安全的html
ozxc1zmp4#
validateRequest = false不是一个好的解决方案。我们使用它来解决这个问题:
在服务器端,您可以使用以下命令:
在www.example.com中创建一个隐藏字段asp.net并对其进行编码。
然后在Javascript中,创建一个文本区域并解码编码值。