我試過使用Sanitize
gem來清理包含網站HTML的字符串。刪除HTML頁面中的所有JavaScript
它只刪除了<script>
標記,而不是腳本標記中的JavaScript。
我可以使用什麼從頁面中刪除JavaScript?
我試過使用Sanitize
gem來清理包含網站HTML的字符串。刪除HTML頁面中的所有JavaScript
它只刪除了<script>
標記,而不是腳本標記中的JavaScript。
我可以使用什麼從頁面中刪除JavaScript?
我對偏愛Loofah gem。從一個例子中的文檔修改:
1.9.3p0 :005 > Loofah.fragment("<span onclick='foo'>hello</span> <script>alert('OHAI')</script>").scrub!(:prune).to_s
=> "<span>hello</span> "
你可能會感興趣的ActiveRecord extensions絲瓜提供。
require 'open-uri' # included with Ruby; only needed to load HTML from a URL
require 'nokogiri' # gem install nokogiri read more at http://nokogiri.org
html = open('http://stackoverflow.com') # Get the HTML source string
doc = Nokogiri.HTML(html) # Parse the document
doc.css('script').remove # Remove <script>…</script>
puts doc # Source w/o script blocks
doc.xpath("//@*[starts-with(name(),'on')]").remove # Remove on____ attributes
puts doc # Source w/o any JavaScript
如果您的目的是防止XSS攻擊,這似乎是一個非常糟糕的主意。有各種你缺少的邊緣情況。 https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet – Ajedi32
事實證明,Sanitize
內置了(只是沒有很好的記載)的選項...
Sanitize.clean(content, :remove_contents => ['script', 'style'])
此刪除了所有的腳本和風格標籤(和內容),因爲我想要的。
所以,你需要的sanitize
寶石添加到您的Gemfile:
gem 'sanitize`
然後bundle
然後你就可以做Sanitize.clean(text, remove_contents: ['script', 'style'])
我用這個正則表達式擺脫<script>
和</script>
標籤嵌入的內容,只是使標籤消失。它也擺脫了諸如< script>
或</script>
等...的東西,即增加了空格。
post.content = post.content.gsub(/<\s*script\s*>|<\s*\/\s*script\s*>/, '')
您是否還想刪除所有'on *'屬性? – Phrogz