在我的config/initializers
中,我向String
类添加了以下内容:
class String
def sanitize(options={ tags: %w(div p span strong b em i br ol ul li) })
ActionController::Base.helpers.sanitize(self, options)
end
end
在我的本地开发站点上,这会将所有不允许的标记转换为编码的HTML,所以
"<span><img src=\"nonexistent.png\" onerror=\"alert('This alert should not be shown');\"></span><p>Build something</p>"
成为
"<span><img src=\"nonexistent.png\" onerror=\"alert('This alert should not be shown');\"/></span><p>Build something</p> "
但是在rspec中,对同一个字符串调用同一个方法会导致:
"<span></span><p>Build something</p>"
它不再编码图像标签;它只是把标签完全剥离了。模型规格中的行为与模型中的行为不同的原因是什么?
1条答案
按热度按时间2w3rbyxf1#
很难说很容易查到。主要是:不要这样做。
很难知道:有什么东西在破坏你的消毒方法还是你在破坏别人的?
很容易发现:编写一个测试。在调用sanitize之前设置断点。踩进去,继续踩。你可能很快就会看到发生了什么。
不要这样做:
1.其他东西要么添加该方法,要么从其他东西调用sanitize。我不确定什么是适合您的解决方案,但可能控制器或辅助方法
sanitize(string, options)
比您所做的更好。毕竟,这就是你所说的。1.如果你必须添加一个方法,不要像你做的那样打开类并进行破坏: