2011-09-25 30 views
5

即時通訊使用jQuery Markitup允許用戶輸入HTML ...所以他們可以輸入的東西,如:如何轉義html?

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

不過,我在看http://railscasts.com/episodes/204-xss-protection-in-rails-3,並決定將這段代碼試圖進入輸入:

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

令我驚訝的是,當我提交表單並刷新頁面時,警告框出來了。這是一個安全風險!

這是我在我的觀點:以上

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

呈現任何HTML,但也容易產生XSS。所以我試過了:

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

但是上面沒有呈現任何html。它實際上顯示HTML爲文本,這不是所需的行爲。

我需要呈現html,同時保護自己免受xss攻擊。我如何去做這件事?

回答

0

嘗試

<%= sanitize(comment.description) %> 

更新:

要刪除所有標籤使用用strip_tags

+0

的sanitize啊呈現HTML,不執行從JS警報。有趣。但是這有什麼影響?我正在觀看http://railscasts.com/episodes/27-cross-site-scripting,Ryan B提到它「不夠徹底,因爲它不能逃避每個html標籤,這不太安全」。 .. –