CGI :: escapeHTML正在逃避单引号

时间:2013-09-11 07:54:33

标签: ruby-on-rails ruby

我最近将我的Ruby 1.9.3升级到2.0.0并且出人意料; CGI :: escapeHTML现在正在逃避单引号,意思是:

CGI::escapeHTML("'")
=> "'"

最奇怪的是,在定义escapeHTML时,一切似乎都很好,并且复制方法的定义会给出正确的结果(它不会逃避单引号)

有没有人对此有所了解?

谢谢,

2 个答案:

答案 0 :(得分:8)

实际上,它执行2.0源中定义的内容。但你是对的,实现从1.9.3变为2.0。

1.9.3 source:

def CGI::escapeHTML(string)
  string.gsub(/[&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
end

2.0 source:

def CGI::escapeHTML(string)
  string.gsub(/['&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
end

他们为什么要改变它?

这是在this commit中完成的,因为(根据bug #5485OWASP recommends在将它们插入HTML之前转义单引号。所以这是安全的事情。

答案 1 :(得分:0)

我不想要新的行为。我使用CGI :: Escape可能是错的,但我没有时间弄明白为什么或重做它。我只想恢复旧的行为。

我最终选择了&#39;我称之为CGI :: Escape:

 def escapeHTML(title)
  char = "\u00A9"
  target_title = title.gsub("'", char)
  target_title = CGI.escapeHTML(target_title)
  target_title = target_title.gsub(char, "'")
  return target_title
 end

找到您知道的消息并未出现在您的输入中!