2016-08-01 4 views
0

Я использовал brakeman для генерации отчетов сканирования в своем приложении. Он генерировал множество предупреждений о безопасности на уровне Cross Site Scripting с высоким доверием. В этом один из них:Как устранить предупреждение о безопасности на сайте Cross Site Scripting в рельсах, созданных brakeman?

значение неэкранированного параметра оказывается инлайн вблизи линий 47: визуализации (текст => "Неожиданный EventType # {PARAMS [" типСобытие "]}", {: состояние => 406}) приложения /controllers/event_controller.rb. В приведенном ниже методе контроллера в первой строке отображается указанное выше предупреждение.

Я видел в link, но не мог исправить. Пожалуйста помоги. И это код контроллера:

def purchase 

    render :status => 406, :text => "Unexpected EventType #{params['EventType']}" and return unless params['EventType'] == 'purchased' 
    @account = Account.new 
    render :status => 406, :text => "Could not find Plan #{params['Plan']}" and return unless @account.plan = @plan = SubscriptionPlan.find_by_name(params['Plan']) 

    end 

ответ

2

При использовании render :text => ... Rails по-прежнему делает вывод в виде HTML (с типом контента text/html). Поскольку ваш код вводит пользовательский ввод (params['EventType']) непосредственно на выходе, это классическая уязвимость межсайтового скриптинга.

У вас есть два варианта. Используйте render :plain вместо (который будет оказывать с типом контента text/plain вместо HTML):

render :status => 406, :plain => "Unexpected EventType #{params['EventType']}" 

или избежать ввода данных пользователем:

render :status => 406, :text => "Unexpected EventType #{ERB::Util.html_escape(params['EventType'])}"