2011-08-29 93 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()。


相關問題