2011-06-20 26 views
6

Tôi có một trang web được viết bởi Rails3. Mô hình bài đăng của tôi có một cột văn bản đặt tên là "nội dung". Trong bảng điều khiển bài đăng, biểu mẫu html thiết lập cột "nội dung" thành trường văn bản bằng tinymce. Ở trang đầu, vì sử dụng tinymce, mã post.html.erb cần triển khai bằng phương thức thô như <%= raw @post.content %>.Tôi đang sử dụng Rails3 với tinymce. Làm thế nào để trình bày người dùng đóng trình duyệt javascript sau đó nhập xss?

OK, bây giờ nếu tôi đóng javascript trình duyệt, vùng văn bản này có thể nhập mà không có tinymce và có thể người dùng sẽ nhập bất kỳ xss nào như <script>alert('xss');</script>. Mặt trước của tôi sẽ hiển thị hộp cảnh báo đó.

Tôi cố gắng sanitize(@post.content) trong posts_controller, nhưng phương pháp khử trùng sẽ lọc kiểu tinymce với nhau. Ví dụ: <span style='color:red;'>foo</span> sẽ trở thành <span>foo</span>.

Câu hỏi của tôi là: Làm thế nào để lọc đầu vào xss và kiểu dự trữ tinymce cùng một lúc?

Trả lời

2

Chất vệ sinh có thể được đặt để cho phép thuộc tính kiểu. Trong số config/application.rb của bạn thêm:

config.action_view.sanitized_allowed_attributes = ['style'] 

Phương pháp vệ sinh cũng có mặc định cho thuộc tính và từ khóa css nào cho phép. Xem sanitizer.rballowed_css_propertiesallowed_css_keywords để nhận danh sách các giá trị mặc định.

Để thêm một số hiện không cho phép thêm video này vào bạn config/application.rb:

config.action_view.sanitized_allowed_css_keywords = ['puke'] 

-

Nếu bạn đang làm bất cứ điều gì phức tạp hơn này sau đó bạn sẽ cần phải viết một số mã. Tôi không khuyên bạn nên làm điều này từ đầu, hãy kiểm tra các Loofah Gem cho một thư viện tốt để viết html scrubbers.

Các vấn đề liên quan