我最近将我的Ruby 1.9.3升级到2.0.0并且出人意料; CGI :: escapeHTML现在正在逃避单引号,意思是:
CGI::escapeHTML("'")
=> "'"
最奇怪的是,在定义escapeHTML时,一切似乎都很好,并且复制方法的定义会给出正确的结果(它不会逃避单引号)
有没有人对此有所了解?
谢谢,
答案 0 :(得分:8)
实际上,它执行2.0源中定义的内容。但你是对的,实现从1.9.3变为2.0。
def CGI::escapeHTML(string)
string.gsub(/[&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
end
def CGI::escapeHTML(string)
string.gsub(/['&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
end
他们为什么要改变它?
这是在this commit中完成的,因为(根据bug #5485)OWASP 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
找到您知道的消息并未出现在您的输入中!