iis 从客户端异常中检测到潜在危险的Request.Form值

ep6jt1vc  于 2023-05-29  发布在  其他
关注(0)|答案(4)|浏览(218)

我们有互联网网站上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,
cyvaqqii

cyvaqqii1#

我认为你的一个控件(drpOwnerNationality)有脚本.. ASP.NET对表单上的所有输入进行了潜在的XSS验证...所以它检测到你的一个控件中的脚本,这就是异常状态。
问题可能是您的应用程序的一个用户正在输入文本框/控件中的脚本,而您没有在客户端进行验证。
一种方法是在客户端进行验证,并通知用户他们不能在控件中输入脚本
另一种方法是通过将页面上的validateReqeust属性设置为false来关闭验证

<@ Page validateRequest="false" %>

但是如果你这样做了,你的应用程序就暴露在了XSS的攻击之下。一种方法是在处理信息之前禁用验证并对所有输入进行编码。

`HttpServerUtility.HtmlEncode(drpOwnerNationality.SelectedText);` // assuming it is dropdown
kuarbcqp

kuarbcqp2#

错误原因是您试图发送纯html或其他可能包含不安全元素的内容。1.您可以像下面的article一样禁用请求验证。2.其他选项,您可以在使用第三方JavaScript库发送之前将您的内容转换为Base64(尝试谷歌它)。
还有其他一些选择,但这取决于您的情况。

3bygqnnd

3bygqnnd3#

我们检测到来自2个IP的巨大点击,在阻止它们之后,问题解决了。似乎有人试图张贴不安全的html

ozxc1zmp

ozxc1zmp4#

validateRequest = false不是一个好的解决方案。我们使用它来解决这个问题:
在服务器端,您可以使用以下命令:
在www.example.com中创建一个隐藏字段asp.net并对其进行编码。

hiddenFieldMessage.Value = Uri.EscapeDataString(dangerousString);

然后在Javascript中,创建一个文本区域并解码编码值。

<script>
    (function () {
        
        const content = document.getElementById('<%= hiddenFieldMessage.ClientID %>').value;
        // decode the content back to html
        var textArea = document.createElement("textarea");
        textArea.innerHTML = decodeURIComponent(document.getElementById('<%= hiddenFieldMessage.ClientID %>').value);
        const content = textArea.value;  // decoded value
   })

相关问题