10

मैंने एक स्ट्रिंग को साफ़ करने के लिए Sanitize मणि का उपयोग करने का प्रयास किया है जिसमें वेबसाइट का HTML शामिल है।एक HTML पृष्ठ से सभी जावास्क्रिप्ट हटाएं

यह केवल <script> टैग हटा दिया गया है, स्क्रिप्ट टैग के अंदर जावास्क्रिप्ट नहीं।

पृष्ठ से जावास्क्रिप्ट को हटाने के लिए मैं क्या उपयोग कर सकता हूं?

+2

क्या आप सभी 'ऑन *' विशेषताओं को भी हटाना चाहते हैं? – Phrogz

उत्तर

5

मैं Loofah मणि के आंशिक हूं। डॉक्स में एक उदाहरण से संशोधित:

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

यदि आपका इरादा एक्सएसएस हमलों को रोकने के लिए है तो यह वास्तव में एक बुरा विचार है। ऐसे सभी प्रकार के किनारे के मामले हैं जिन्हें आप याद कर रहे हैं। https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet – Ajedi32

6

ऐसा लगता है कि Sanitize में (सिर्फ अच्छी तरह से प्रलेखित नहीं) बनाया का विकल्प है ...

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

यह सब स्क्रिप्ट और शैली टैग (और उनकी सामग्री) निकाल दिया गया के रूप में मैं चाहता था।

0

तो आप अपने Gemfile को sanitize मणि जोड़ने की जरूरत है: आप Sanitize.clean(text, remove_contents: ['script', 'style'])

0

मैं इस नियमित अभिव्यक्ति <script> से छुटकारा पाने के लिए उपयोग कर सकते हैं

gem 'sanitize` 

फिर bundle

और फिर और एम्बेडेड सामग्री में </script> टैग और टैग को गायब कर दें। यह < script> या </script> ... आदि जैसे चीजों से छुटकारा पाता है ... यानी व्हाइटस्पेस जोड़ा गया।

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