2010-11-22 33 views
7

Tôi làm cách nào để sử dụng Html.TextAreaForwithout mã hóa nó? Tôi biết đó là một nguy cơ bảo mật nhưng tôi có một lớp học riêng biệt để khử trùng bất kỳ văn bản nào.ASP.NET MVC3, Html.TextAreaFor không mã hóa?

Ví dụ:

@ Html.TextAreaFor (mô hình => model.PostBodyText, 10, 100, 1)

tôi đang lập kế hoạch để sử dụng nó với TinyMCE.

Trân quạ

CẬP NHẬT Tôi đang sử dụng mới Razor View Engine.

Trả lời

9

Bạn sẽ cần phải cuộn của riêng bạn:

<textarea cols="100" id="PostBodyText" name="PostBodyText" rows="10"> 
    @MvcHtmlString.Create(Model.PostBodyText) 
</textarea> 

Tất nhiên về mặt bảo mật này có thể rất nguy hiểm như trang web của bạn bây giờ là dễ bị tấn công XSS. Vì vậy, câu hỏi đặt ra là tại sao có một lớp riêng biệt làm vệ sinh tất cả văn bản khi bạn chỉ có thể dựa vào những người trợ giúp HTML để thực hiện công việc cho bạn?

+0

Cảm ơn .... Bạn đã upvoted bạn nhưng tôi mới đến trang web :) – RaVen

+0

@RaVen, không có vấn đề, khi bạn đặt câu hỏi và chấp nhận câu trả lời bạn có được danh tiếng. –

+0

Vâng tôi biết nhưng tôi đang lọc ra bất kỳ thẻ javascript ... Tôi chỉ cho phép một số thẻ html an toàn. Nhưng yeah TinyMCE có thể gây ra một lỗ hổng bảo mật. Một lần nữa cảm ơn rất nhiều. :) – RaVen

1

Là một tùy chọn thay thế, bạn có thể muốn sử dụng ValidateInput như được mô tả here. Một ví dụ trong phong cách MVC sẽ là:

[ValidateInput(false)] 
public ActionResult Method(){ 
    return View() 
} 

[ValidateInput(false)] 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Method(){ 
    // your stuff here 
    RedirectToAction("index"); // or something 
} 

Tôi nghĩ đó là cách MVC hơn. Bây giờ bộ điều khiển của bạn cho bạn biết có một vấn đề bảo mật trong phương thức điều khiển đó. Chế độ xem của bạn có thể là bất kỳ chế độ xem thông thường nào bằng cách sử dụng trình trợ giúp html, v.v. Lưu ý rằng điều này cho phép tất cả các loại đầu vào, không được lọc. Nó sẽ hoạt động với TinyMCE mặc dù.

// chỉnh sửa

woops tôi thấy bạn cần phải thêm

<httpRuntime requestValidationMode="2.0"/> 

để webconfig cũng như trong các phiên bản mới của MVC. Đoán nó có thể không phải là con đường để đi.

+0

Điều này là chính xác. [ValidateInput (false)] sẽ cho phép HTML được đăng trong biểu mẫu của bạn. –