Я нахожусь на рельсах 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