Разница между дезинфекцией и strip_tags rails

80
4

Я точно не знаю разницы между ними.
Я прочитал это


http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html


но не получите точной разницы.
Может ли кто-нибудь сообщить мне о различии?

спросил(а) 2014-11-05T13:32:00+03:00 5 лет, 11 месяцев назад
1
Решение
70

С помощью sanitize вы можете разрешить некоторые HTML-теги или класс, strip_tags не может. Он делает то же самое. Проверьте код https://github.com/rails/rails/blob/76a0b1028e312b6c3c00a50b4a09d68c23b5e713/actionview/lib/action_view/helpers/sanitize_helper.rb#L80

ответил(а) 2014-11-05T13:36:00+03:00 5 лет, 11 месяцев назад
81

sanitize использует дезинфицирующее средство белого списка. 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_tags является то, что sanitize удаляет содержимое (материал между ними) некоторых тегов, особенно тег <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 "< &"
=> "< &"
[71] pry(main)> strip_tags "< &"
=> "< &"

Кроме того, они обрабатывают вложенные теги по-разному. Сравните следующие,


[73] pry(main)> sanitize "some<<b>script>alert('hello')<</b>/script>", tags: []
=> "some<script>alert('hello')</script>"
[74] pry(main)> strip_tags "some<<b>script>alert('hello')<</b>/script>"
=> "somealert('hello')"

ответил(а) 2015-08-05T16:07:00+03:00 5 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема