2009-08-04 36 views
6

Tôi gặp lỗi này khi tôi đăng từ TinyMCE trong chế độ xem ASP.NET MVC.Xác nhận phát hiện đầu vào của khách hàng nguy hiểm - đăng từ TinyMCE trong ASP.NET

Lỗi:

Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted

Từ googling, nó nói chỉ cần thêm một ValidateRequest trong trang chỉ thị ở phía trên mà tôi đã làm, nhưng tôi vẫn nhận được lỗi này. Như bạn có thể thấy, bên dưới là mã của tôi trong chế độ xem:

<%@ Page validateRequest="false" Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

Trả lời

5

Sử dụng trang trí [ValidateInput(false)].

Sau đó, bạn sẽ muốn viết một phương pháp HTMLEncode để làm cho nó an toàn.

Hãy cho tôi biết nếu bạn muốn tôi đăng bài tôi sử dụng.

thêm các Encode tôi sử dụng

public static class StringHelpers 
{ 
    public static string HtmlEncode(this string value) 
    { 
     if (!string.IsNullOrEmpty(value)) 
     { 
      value = value.Replace("<", "&lt;"); 
      value = value.Replace(">", "&gt;"); 
      value = value.Replace("'", "&apos;"); 
      value = value.Replace(@"""", "&quot;"); 
     } 
     return value; 
    } 

    public static string HtmlDecode(this string value) 
    { 
     if (!string.IsNullOrEmpty(value)) 
     { 
      value = value.Replace("&lt;", "<"); 
      value = value.Replace("&gt;", ">"); 
      value = value.Replace("&apos;", "'"); 
      value = value.Replace("&quot;", @""""); 
     } 

     return value; 
    } 
} 
+0

nếu bạn có thể đăng bài đó sẽ tuyệt vời – leora

+0

thanks .. t mũ làm việc tuyệt vời. là có anyway để prepoulate textarea từ một trang html hiện có – leora

+0

Không hoàn toàn hiểu những gì bạn có nghĩa là [tôi]. Bạn đang nói về cào màn hình ở đây hay ... – griegs

5

Hãy thử sử dụng các thuộc tính [AllowHtml] trong mô hình của bạn.

class MyModel{ 
[AllowHtml] 
public string Content{get;set;} 
} 
0

Bối rối trong phiên bản 4 của tinymce dường như đã xóa tùy chọn mã hóa: xml.

tôi đã kết thúc bằng một hàm mã hóa HTML javascript từ this answer, và trên nút gửi tôi mã hóa các nội dung của textarea trước khi hình thức nộp, bằng cách sử dụng getContent và setContent phương pháp TinyMCE của

+1

Tôi nghĩ rằng đó là nguy hiểm để chỉ phụ thuộc vào mã hóa phía khách hàng, vì nó không ngăn chặn một kẻ bất lương từ POST trực tiếp đến trang web của bạn. Bạn cũng phải khử trùng các đầu vào trên máy chủ. –

+0

Có điều quan trọng là luôn nhớ rằng –

0

tôi đã cùng một vấn đề. Tôi không muốn vô hiệu hóa tính năng xác nhận ASP.NET MVC, vì vậy tôi cứ nhìn cho đến khi tôi đạt giải pháp này:

Tại encode TinyMCE đang cắm nội dung của bạn (Tôi đang sử dụng phiên bản cũ hơn)

tinyMCE.init({ 
    ... 
    encoding: "xml" 
}); 

Và sau này tôi không nhận được thêm bất kỳ lỗi xác thực ứng dụng nào nữa. Sau đó, tôi đã đưa ra một vấn đề khác khi tôi thay đổi nội dung hình thức của tôi mã sẽ đưa ra các thẻ html

<strong>My input value</strong> 

thay vì

giá trị đầu vào của tôi này

Vì vậy, tôi đã phải giải mã html cho trường đó khi nhận các giá trị của tôi tại Trình điều khiển, như sau:

...  
entity.field = HttpUtility.HtmlDecode(entity.field); 
Các vấn đề liên quan