2011-09-25 49 views
5

Im sử dụng jQuery Markitup cho phép người dùng nhập html ... Vì vậy, họ có thể thứ đầu vào như:Làm thế nào để thoát khỏi html?

<h1>Foo</h1> 
<p>Foobar</p> 

Tuy nhiên, tôi đã xem http://railscasts.com/episodes/204-xss-protection-in-rails-3 và quyết định thử đoạn mã này vào đầu vào:

<script>alert('test');</script> 

Tôi rất ngạc nhiên khi tôi gửi biểu mẫu và làm mới trang, hộp thông báo xuất hiện. Đây là một nguy cơ bảo mật!

Đây là những gì tôi có trong quan điểm của tôi:

<div><%= comment.description.html_safe %></div> 

Trên đây làm cho bất kỳ html, nhưng cũng dễ bị XSS. Vì vậy, tôi đã thử:

<div><%= html_safe(comment.description).html_safe %></div> 

Nhưng ở trên không hiển thị bất kỳ html nào. Nó thực sự hiển thị html dưới dạng văn bản , không phải là hành vi mong muốn.

Tôi cần hiển thị html và đồng thời bảo vệ bản thân khỏi xss. Làm thế nào để tôi đi về điều này?

Trả lời

0

Hãy thử

<%= sanitize(comment.description) %> 

Cập nhật:

Để loại bỏ tất cả các thẻ sử dụng strip_tags

+0

Yea Sanitize render html, và không thực hiện các cảnh báo từ JS. Hấp dẫn. Nhưng điều này có ý nghĩa gì? Tôi đã xem http://railscasts.com/episodes/27-cross-site-scripting và Ryan B đề cập rằng "không hoàn toàn triệt để, vì nó không thoát khỏi mọi thẻ html. Điều này không hoàn toàn an toàn". .. –

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