ruby-on-rails - sanitize 和 strip_tags rails 之间的区别

标签 ruby-on-rails actionviewhelper

确切地说,我不知道这些之间的区别。
我读了这个
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html
但没有得到确切的区别。
谁能告诉我有什么区别?

最佳答案

sanitize正在使用白名单 sanitizer 。 strip_tags剥离所有标签。

相比:

[64] pry(main)> sanitize "hello <h1>h1</h1> <b>b</b>"
=> "hello <h1>h1</h1> <b>b</b>"
[65] pry(main)> strip_tags "hello <h1>h1</h1> <b>b</b>"
=> "hello h1 b"

如果您不提供任何列入白名单的标签,sanitize默认允许以下标签。
[66] pry(main)> ActionView::Base.white_list_sanitizer.allowed_tags.to_a * ', '
=> "strong, em, b, i, p, code, pre, tt, samp, kbd, var, sub, sup,
dfn, cite, big, small, address, hr, br, div, span, h1, h2, h3,
h4, h5, h6, ul, ol, li, dl, dt, dd, abbr, acronym, a, img,
blockquote, del, ins"

如果您提供自己的白名单标签,则它们会覆盖默认标签。
[67] pry(main)> sanitize "hello <h1>h1</h1> <b>b</b>", tags: %w(b)
=> "hello h1 <b>b</b>"
sanitize之间的另一个区别和 strip_tagssanitize删除一些标签的内容(中间的东西),特别是 <script>标签。

相比:
[68] pry(main)> sanitize "a<script>alet('foo')</script>"
=> "a"
[69] pry(main)> strip_tags "a<script>alet('foo')</script>"
=> "aalet('foo')"

另外,sanitize对某些字符进行 html-escape,但 strip_tags没有。
[70] pry(main)> sanitize "< &"
=> "&lt; &"
[71] pry(main)> strip_tags "< &"
=> "< &"

此外,它们以不同的方式处理嵌套标签。比较以下,
[73] pry(main)> sanitize "some<<b>script>alert('hello')<</b>/script>", tags: []
=> "some&lt;script>alert('hello')&lt;/script>"
[74] pry(main)> strip_tags "some<<b>script>alert('hello')<</b>/script>"
=> "somealert('hello')"

关于ruby-on-rails - sanitize 和 strip_tags rails 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754955/

相关文章:

ruby-on-rails - Rails 迁移顺序和 Git

ruby-on-rails - 当数据库上的 lower(field) 与 ruby​​ 中的 field.downcase 不同时,如何执行不区分大小写的搜索?

ruby-on-rails - ActiveMerchant:将商品详细信息发送到 Paypal 网址

ruby-on-rails-3 - Rails - 如何在 Controller 中获取单个图像 Assets 的 URL?

ruby-on-rails - 升级rails 2.3后在集成测试中设置多个cookie会导致NoMethodError

ruby-on-rails - 如何从代表中过滤掉属性/集合?

ruby - 人性化的Rails问题

ruby-on-rails - 如何在 Assets 管道中包含 ActionView 助手?

ruby-on-rails - Rails 控制台 - 使用 image_tag 方法

ruby-on-rails - Rails yield 和 content_for wieird 行为, `yield :filter` 仅在放置在默认 yield 之后才有效