Rails 4.2 - Как правильно использовать rails sanitize для защиты от уязвимостей кросс-скриптинга

Я нахожусь на рельсах 4.2.1 (ruby 2.2.1p85), и я хочу очистить ввод пользователя, а также удалить этот текст из параметров post / get. Я не хочу зависеть исключительно от автоэскейпинга на рельсах 4.

Поскольку я был немного новичком в рельсах, я не знал о параметрах очистки. http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

Изначально я собирался создать помощника для таких целей, чтобы я мог сделать что-нибудь, как показано ниже. Я пытаюсь очистить ввод формы, чтобы обезопасить себя от уязвимостей межсайтового скриптинга (XSS).

базовый пример помощника. Это работает, но, вероятно, это не лучший способ сделать это с помощью rails? Также текст все еще находится в запросе post / get.

<%= text_field_tag :input_text, Safetxt(params[:input_text])  %>

вспомогательный метод

  def Safetxt(input_value)
    txtOut = input_value
    if txtOut.blank?
      txtOut = ""
    else
      txtOut = txtOut.gsub("<script>", "")
      txtOut = txtOut.gsub("</script>", "")
    end
    return txtOut
  end

при отправке input_text очищается на выходе, но значения get / post по-прежнему содержат удаленные значения.

input_text=<script>alert%28"blah"%29<%2Fscript>

Как я могу использовать настраиваемый ползунок во вспомогательном методе для правильной дезинфекции ввода (удаления опасного текста, тегов)? Я немного запутался, как правильно реализовать это с помощью пользовательских правил.

Например, что-то, как показано ниже (я знаю, что это неправильно). И как лучше всего исключить этот текст в запросе post / get? Я знаю, что мне следует дезинфицировать текст на стороне контроллера для ввода, но если есть способ, я бы хотел, чтобы этот текст был очищен в запросе на отправку, если это возможно.

def Safetxt(input_value)
    scrubber = Rails::Html::TargetScrubber.new
    scrubber.tags = ['script']
    txtOut = input_value
    if txtOut.blank?
      txtOut = ""
    else
      txtOut.scrub!(scrubber)
    end
    return txtOut
  end  

person Bryan.I    schedule 07.10.2015    source источник


Ответы (1)


Вы можете использовать метод sanitize в Rails 4 для удаления тегов, которые по умолчанию не включены в «белый список» по умолчанию.

Итак, в коде вашего контроллера вы можете иметь:

ActionView::Base.new.sanitize("<script>alert('hello')</script>")

который уберет тег скрипта. Вы можете занести в белый список свои собственные атрибуты или элементы, а не значения по умолчанию, или, если вам нужно больше настраиваемого поведения, вы можете определить свой собственный ползунок в методе sanitize.

person slykat    schedule 28.01.2016