2015-10-07 7 views
2

Я нахожусь на рельсах 4.2.1 (ruby 2.2.1p85), и я хочу дезинформировать вход пользователя, а также удалить этот текст из сообщения/get Титулы. Я не хочу исключительно зависеть от собственных автогидов 4.Rails 4.2 - Как правильно использовать rails sanitize для защиты от уязвимостей, связанных с перекрестным сценарием

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

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

базовый вспомогательный пример Это работает, но, вероятно, это не лучший способ рельсов для этого? Также текст остается в сообщении 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 очищается на выходе, но прибудет/после значения по-прежнему содержит оголенные значения.

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 

ответ

0

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

Таким образом, в вашем коде контроллера вы можете иметь:

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

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