10

我試過使用Sanitize gem來清理包含網站HTML的字符串。刪除HTML頁面中的所有JavaScript

它只刪除了<script>標記,而不是腳本標記中的JavaScript。

我可以使用什麼從頁面中刪除JavaScript?

+2

您是否還想刪除所有'on *'屬性? – Phrogz

回答

5

我對偏愛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絲瓜提供。

13
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 
+0

如果您的目的是防止XSS攻擊,這似乎是一個非常糟糕的主意。有各種你缺少的邊緣情況。 https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet – Ajedi32

6

事實證明,Sanitize內置了(只是沒有很好的記載)的選項...

Sanitize.clean(content, :remove_contents => ['script', 'style']) 

此刪除了所有的腳本和風格標籤(和內容),因爲我想要的。

0

所以,你需要的sanitize寶石添加到您的Gemfile:

gem 'sanitize` 

然後bundle

然後你就可以做Sanitize.clean(text, remove_contents: ['script', 'style'])

0

我用這個正則表達式擺脫<script></script>標籤嵌入的內容,只是使標籤消失。它也擺脫了諸如< script></script>等...的東西,即增加了空格。

post.content = post.content.gsub(/<\s*script\s*>|<\s*\/\s*script\s*>/, '')

相關問題