2011-08-29 94 views
2

我完全丧失了为何出现此错误的原因。这个错误的典型原因与尝试将HTML标记提交到文本字符串或类似的东西有关,但我没有这样做。我认为这发生的页面需要一个简单的电子邮件地址。从客户端检测到潜在危险的Request.Path值

这里是我的模型验证...

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; } 
} 

这里是我的脚本引用,因为这个错误似乎是在脚本目录...

​​

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

而且这里的错误...从客户端检测到

有潜在危险的Request的值(:)。 (/ 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):从客户端(:) 在System.Web.HttpRequest.ValidateInputIfRequiredByConfig() 检测到潜在危险的Request的值在System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext的上下文)

在System.Web.HttpRequest.ValidateInputIfRequiredByConfig() 在System.Web.HttpApplication + PipelineStepManager.ValidateHelper(HttpContext的上下文)

路径中的非法字符。

System.ArgumentException:路径中的非法字符。 在System.IO.Path.CheckInvalidPathChars(字符串路径) 在System.Security.Permissions.FileIOPermission.HasIllegalCharacters(字符串[] STR) 在System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess访问,AccessControlActions控制,字符串[ ]在System.Web.Policy.Permissions.FileIOPermission.ctor(FileIOPermissionAccess访问,字符串路径) at System.Web.InternalSecurityPermissions.PathDiscovery(String path) 在System.Web。 HttpRequest.get_PhysicalPath() 在WebsitePanel.IIsModules.SecureFolders.context_OnEnter(对象发件人,EventArgs的) 在System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep。在System.Web.HttpApplication.ExecuteStep执行() (IExecutionStep步骤,布尔& completedSynchronously)

在System.IO.Path.CheckInvalidPathChars(字符串路径) 在System.Security.Permissions.FileIOPermission.HasIllegalCharacters(字符串[ (FileIOPermissionAccess访问,AccessControlActions控件,String [] pathListOrig,布尔checkForDuplicates,布尔needFullPath,布尔copyPathList) 在System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess访问,String path) at System.Web。InternalSecurityPermissions.PathDiscovery(字符串路径) 在System.Web.HttpRequest.get_PhysicalPath() 在WebsitePanel.IIsModules.SecureFolders.context_OnEnter(对象发件人,EventArgs的) 在System.Web.HttpApplication + SyncEventExecutionStep.System.Web.HttpApplication。 IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStep(IExecutionStep一步,布尔& completedSynchronously)

UPDATE - 可能分辨 货架我的大脑更多关于这个我看到了 “WebsitePanel.IIsModules.SecureFolders” 在后堆栈跟踪和震惊我的记忆。我记得看到有关我的托管服务提供商上的安全文件夹这个功能被埋在他们的控制面板里,这个方法是有意义的。我发邮件给他们,要求他们禁用该模块。几天没有发生,所以我怀疑是这样。

+0

用于验证电子邮件的正则表达式不正确。只提到一个缺陷,它不会在电子邮件地址的第一部分接受'+'。 – icktoofay

+0

@icktoofay你有没有一个例子可能是一个无效的电子邮件地址,但我目前的逻辑会说是有效的? – oliwa

+1

我实际上是在说它拒绝了有效的电子邮件地址(例如'example + test @ gmail.com'),但是你的正则表达式接受'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @ a.com',但它是一个无效的电子邮件地址。那里的特定问题(本地部分超过64个字符)很容易在正则表达式中修复,但推荐的选择是使用遵循RFC的电子邮件解析器,而不是使用正则表达式,因为这不是唯一的问题。 – icktoofay

回答

0

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

function validateEmail(email) 
{ 
var re = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\ 
".+\"))@((\[[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"); 
} 
+0

我启用了客户端验证功能,当我键入无效的电子邮件地址时,我无法进行回发,因此实际上它正在验证客户端。 – oliwa

+0

你能设置maxlength到这个输入字段吗? – ShankarSangoli

+0

是的,我会设置最大长度,看看是否有帮助。仅供参考,我尝试并粘贴了一个1000字符的字符串,但未能通过客户端验证,但没有报告错误,如我最初的问题中所述。 – oliwa

0

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; } 
} 
1

,更具体的冒号也不行(:) =“检测到有潜在危险的Request的值从客户端(:) “

您的要求似乎包含:

”(/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的值在System.Web.HttpRequest.ValidateInputIfRequiredByConfig()在的System.Web .HttpApplication.PipelineStepManager.ValidateHelper在System.Web.HttpApplication + PipelineStepManager.ValidateHelper(HttpContext的上下文)中路径

非法字符(HttpContext的上下文)

在System.Web.HttpRequest.ValidateInputIfRequiredByConfig()。


相关问题