2010-11-21 32 views
0

Un exemple:Pourquoi le désinfectant Rails supprime-t-il les hrefs contenant des URL majuscules?

[Dev]> ActionController::Base.helpers.sanitize('<a href="http://google.com">test</a>') 
=> '<a href="http://google.com">test</a>' 
[Dev]> ActionController::Base.helpers.sanitize('<a href="Http://google.com">test</a>') 
=> '<a>test</a>' 

extrêmement frustrant!

+1

Je peux confirmer que je reçois le même résultat ici 3.0.1. Malheureusement, je ne peux même pas trouver de documentation sur cette fonction dans l'API de rails :(Peut-être que mes compétences de recherche sont rouillées. –

Répondre

2

Cela semble être un bug dans la méthode contains_bad_protocols? dans action_controller/vendor/html-scanner/html/sanitizer.rb. Cette méthode est définie comme:

def contains_bad_protocols?(attr_name, value) 
    uri_attributes.include?(attr_name) && 
    (value =~ /(^[^\/:]*):|(&#0*58)|(&#x70)|(%|&#37;)3A/ 
     && !allowed_protocols.include?(value.split(protocol_separator).first)) 
end 

Et allowed_protocols comme:

self.allowed_protocols = Set.new(%w(ed2k ftp http https irc mailto news gopher nntp 
    telnet webcal xmpp callto feed svn urn aim rsync tag ssh sftp rtsp afs)) 

Ainsi:

allowed_protocols.include? 'http' => true 
allowed_protocols.include? 'Http' => false