从客户端检测到潜在危险的Request.Path值

我完全失去了为什么我收到这个错误。 这个错误的典型原因与尝试将HTML标记提交到文本字符串或类似的东西有关,但我没有做那样的事情。 我认为发生这种情况的页面需要一个简单的电子邮件地址。

这是我的模型validation…

public class Subscriber { [Key] [DisplayName("Email Address")] [Required(ErrorMessage = "{0} is required")] [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})$", ErrorMessage = "{0} must be a valid email address")] public string EmailAddress { get; set; } public Guid UnsubscribeKey { get; set; } } 

这是我的脚本引用,因为错误似乎在Scripts目录中…

      

我最好的猜测是有人恶意在电子邮件地址中输入了一些无效的脚本,但我没有看到Elmah或CodeSmith Insight中任何指向我的任何代码的错误。 我甚至无法弄清楚到底发生了什么。

以下是错误……

从客户端(:)检测到潜在危险的Request.Path值。 (/NewsList/Scripts/,data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}), i.html(克)

System.Web.HttpException(0x80004005):从客户端(:)检测到潜在危险的Request.Path值。 System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)中的System.Web.HttpRequest.ValidateInputIfRequiredByConfig()

在System.Web.HttpApplication + PipelineStepManager.ValidateHelper(HttpContext context)的System.Web.HttpRequest.ValidateInputIfRequiredByConfig()中

路径中的非法字符。

System.ArgumentException:路径中的非法字符。 在System.Security.Permissions.FileIOPermission.HasIllegalCharacters(String [] str)的System.IO.Path.CheckInvalidPathChars(String path)处于System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess访问,AccessControlActions控件,String [] pathListOrig,在System.Web.HttpRequest.get_PhysicalPath()处的System.Web.InternalSecurityPermissions.PathDiscovery(String path)处的System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess访问,字符串路径)处的布尔checkForDuplicates,Boolean needFullPath,Boolean copyPathList) System.Web.HttpApplication.ExecuteStep上的System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()上的WebsitePanel.IIsModules.SecureFolders.context_OnEnter(Object sender,EventArgs e)(IExecutionStep step,Boolean&completedSynchronously)

在System.Security.Permissions.FileIOPermission.HasIllegalCharacters(String [] str)的System.IO.Path.CheckInvalidPathChars(String path)处于System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess访问,AccessControlActions控件,String [] pathListOrig,在System.Web.HttpRequest.get_PhysicalPath()处的System.Web.InternalSecurityPermissions.PathDiscovery(String path)处的System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess访问,字符串路径)处的布尔checkForDuplicates,Boolean needFullPath,Boolean copyPathList) System.Web.HttpApplication.ExecuteStep上的System.Web.HttpApplication + SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()上的WebsitePanel.IIsModules.SecureFolders.context_OnEnter(Object sender,EventArgs e)(IExecutionStep step,Boolean&completedSynchronously)

更新 – 可能已解决在我的大脑上更多地在我的脑子上看到了堆栈跟踪中的“WebsitePanel.IIsModules.SecureFolders”,这让我的记忆震惊了。 我记得在托管服务提供商处看到有关安全文件夹的内容 此function隐藏在其控制面板中,这将基于该方法有意义。 我给他们发了电子邮件,要求他们禁用该模块。 它没有发生几天所以我怀疑是这样的。

正如Exception所说,请求路径中存在非法字符,更具体地说冒号字符不正常(:) =“从客户端(:)检测到潜在危险的Request.Path值。”

您的请求似乎包含:

“(/NewsList/Scripts/,data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}) ,i.html(G”


从客户端(:)检测到潜在危险的Request.Path值。 (/NewsList/Scripts/,data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}), i.html(克)

System.Web.HttpException(0x80004005):从客户端(:)检测到潜在危险的Request.Path值。 System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)中的System.Web.HttpRequest.ValidateInputIfRequiredByConfig()

在System.Web.HttpApplication + PipelineStepManager.ValidateHelper(HttpContext context)的System.Web.HttpRequest.ValidateInputIfRequiredByConfig()中

路径中的非法字符。


看起来您在客户端提交之前未validation电子邮件地址。 您可以使用以下代码validation电子邮件地址。 同时为电子邮件输入字段设置maxlength属性。

 function validateEmail(email) { var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\ ".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA -Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ return email.match(re) } if(!validateEmail($("#emailAddress).val()){ alert("Invalid email address"); } 

ASP.NET MVC已经具有DataType属性。 您可以使用此代替正则表达式

 public class Subscriber { [Key] [DisplayName("Email Address")] [Required(ErrorMessage = "{0} is required")] [DataType(DataType.EmailAddress)] public string EmailAddress { get; set; } public Guid UnsubscribeKey { get; set; } }