2011-11-08 14 views
9

Teraz używamy gem zdezynfekować: https://github.com/rgrove/sanitizeSzyny Gem zdezynfekować - Jak do białej i

Problem jest, jeśli wpiszesz "hello & world" Sanitize oszczędza że w DB jako:

hello & world 

Jak dodać białą listę do &. Chcemy, aby odkażać usunąć wszystkie możliwe szkodliwe znaczniki html i JS/script. ale jesteśmy w porządku, pozwalając na ampersand.

Pomysły? Dzięki

+0

Może to być Sanitize.cl ean (html, Sanitize :: Config :: RELAXED) # => '&' –

+0

Dzięki, ale RELAXED pozwala prawie wszystko. Chciałbym dodać do białej listy i po prostu nie mogę się dowiedzieć, jak – AnApprentice

+0

@ bilash.saha Zmiękczona konfiguracja nadal będzie zawierać elementy ucieczki html, to, co napisałeś, będzie nadal wyświetlać tekst "Witaj, & świat" – Unixmonkey

Odpowiedz

2

Sanitize zawsze przekształci to, co jest wynikiem w obiektach html dla poprawnego html/xhtml.

Najlepszy sposób mogę określić to filtrować metoda wyświetlamy

Sanitize.clean("hello & world").gsub('&','&') #=> "Hello & world" 
+0

To rozwiązałoby znak &, ale nie skalować do wszystkich różnych znaków, które silnik html użyje do przekształcenia w byty. Starając się śledzić wszystko, co mogłoby być również bólem głowy. Odpowiedź @ agustina poniżej jest lepszym rozwiązaniem IMO –

+0

@ShyamHabarakada Problem z wbudowanymi '' sanitize() 'i' strip_tags' Railsów polega na tym, że nie korygują zniekształconych znaczników, więc niezrównana postać '<' może niszczy układ strony. 'strip_tags ('Strip " Strip Unixmonkey

+0

Prawda, że ​​o zniekształconym znaczniku. Odkażamy przede wszystkim sposób na zapobieganie przedostawaniu się HTML do parametrów, które nie powinny mieć kodu HTML. Usuwanie tagów za pomocą wbudowanych strip_tags działa na nas w tym dobrze. To brzmi jak scenariusz również w tym pytaniu. Zgadzam się, jeśli chcesz pełnej dezynfekcji, potrzebne jest lepsze rozwiązanie, które ma odpowiedni silnik DOM. Ale dla paramatyzacji, IMO, wydaje się to przesadą. –

1

odpowiedź UnixMonkey jest co skończyło się robi.

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 

Gdzie ESCAPE_SEQUENCES był tablicą znaków, których nie chcemy uniknąć.

+0

Zobacz http://www.escapecodes.info/ dla kodów znaków ucieczki – tee

0

Jak Rails 4.2, #strip_tags nie unencode HTML znaki specjalne

strip_tags("fun & co") 
    => "fun &amp; co" 

przeciwnym razie można dostać następujące:

strip_tags("&lt;script&gt;") 
    => "<script>" 

Jeśli chcesz tylko ampersanda Sugeruję filtrowanie dane wyjściowe takie jak @Unixmonkey zasugerowano i pozostaw je w stanie & tylko

strip_tags("<bold>Hello & World</bold>").gsub(/&amp;/, "&") 
    => "Hello & World"