現在我們正在使用的寶石的sanitize:https://github.com/rgrove/sanitizeRails的寶石消毒 - 如何白名單
問題是,如果你輸入「hello & world
」的sanitize被保存在數據庫爲:
hello & world
你怎麼能白名單&
。我們要清理所有可能的惡意HTML和JS /腳本標記。但我們確定允許&符號。
想法?謝謝
現在我們正在使用的寶石的sanitize:https://github.com/rgrove/sanitizeRails的寶石消毒 - 如何白名單
問題是,如果你輸入「hello & world
」的sanitize被保存在數據庫爲:
hello & world
你怎麼能白名單&
。我們要清理所有可能的惡意HTML和JS /腳本標記。但我們確定允許&符號。
想法?謝謝
Sanitize將始終將輸出到html實體的輸出轉換爲有效的html/xhtml。
我能確定的最佳方式是過濾輸出
Sanitize.clean("hello & world").gsub('&','&') #=> "Hello & world"
這將解決&字符,但會不能縮放到html引擎使用的所有各種字符將轉換爲實體。試圖跟蹤所有那些也是頭疼的事情。下面的答案是更好的解決方案IMO –
@ShyamHabarakada Rails的內置'sanitize()'和'strip_tags'的問題在於它們不能糾正格式錯誤的標記,因此無法匹配的<<字符可以破壞頁面佈局。 'strip_tags('Strip
沒錯,關於格式不正確的標記。我們主要是爲了防止HTML進入不應該有HTML的參數而進行清理。通過內置的strip_tags剝離標籤對我們來說工作得很好。聽起來這也是這個問題中的場景。 我同意,如果您想要完全清理,則需要具有適當的DOM引擎的更好的解決方案。但是對於帕拉姆衛生處理來說,國際海事組織似乎有點過分。 –
使用用strip_tags()方法來代替。
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-sanitize
這似乎是問題的正確解決方案(和我也碰到的問題) –
從rails-html-sanitizer v1.0.3 strip_tags()轉義&爲& https:// github。com/rails/rails-html-sanitizer/issues/28 –
UnixMonkey的答案是什麼,我們終於實現了。
def remove_markup(html_str)
marked_up = Sanitize.clean html_str
ESCAPE_SEQUENCES.each do |esc_seq, ascii_seq|
marked_up = marked_up.gsub('&' + esc_seq + ';', ascii_seq.chr)
end
marked_up
end
其中ESCAPE_SEQUENCES是我們不希望轉義的字符的數組。
轉義字符代碼見http://www.escapecodes.info/ – tee
鐵軌4.2的,#strip_tags
不unencode HTML特殊字符
strip_tags("fun & co")
=> "fun & co"
否則你會得到如下:
strip_tags("<script>")
=> "<script>"
如果你只是想和號我建議過濾輸出像@Unixmonkey建議並保留到&
只有
strip_tags("<bold>Hello & World</bold>").gsub(/&/, "&")
=> "Hello & World"
可能是Sanitize.cl ean(html,Sanitize :: Config :: RELAXED) #=>'&' –
感謝但放鬆允許幾乎所有東西。我想白名單,只是不能找出如何 – AnApprentice
@ bilash.saha輕鬆的配置仍然將HTML轉義實體,你張貼的仍然會輸出「你好&世界」 – Unixmonkey