10

Ho provato a utilizzare la gemma Sanitize per pulire una stringa che contiene l'HTML di un sito Web.Rimuovi tutto JavaScript da una pagina HTML

Ha rimosso solo i tag <script>, non il codice JavaScript all'interno dei tag di script.

Cosa posso utilizzare per rimuovere JavaScript da una pagina?

+2

Vuoi anche rimuovere tutti '' on * attributi? – Phrogz

risposta

5

Sono parziale alla gemma Loofah. Modificato da un esempio nella documentazione:

1.9.3p0 :005 > Loofah.fragment("<span onclick='foo'>hello</span> <script>alert('OHAI')</script>").scrub!(:prune).to_s 
=> "<span>hello</span> " 

Potresti essere interessato al ActiveRecord extensions Loofah fornisce.

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

Questa mi sembra una pessima idea se la tua intenzione è prevenire gli attacchi XSS. Ci sono tutti i tipi di casi limite che ti mancano. https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet – Ajedi32

6

Si scopre che Sanitize ha un'opzione costruito nel (proprio non ben documentato) ...

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

Questa rimosso tutti i tag di script e di stile (e il loro contenuto) come avrei voluto.

0

quindi è necessario aggiungere il sanitize gemma al Gemfile:

gem 'sanitize` 

Poi bundle

E allora si può fare Sanitize.clean(text, remove_contents: ['script', 'style'])

0

Io uso questa espressione regolare per sbarazzarsi di <script> e </script> tag in contenuti incorporati e basta far svanire i tag. Elimina anche cose come < script> o </script> ... ecc ..., ad esempio spazi bianchi aggiunti.

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

Problemi correlati