class ApplicationController < ActionController::Base
....
def sanitize(value)
ActionController::Base.helpers.sanitize(value.try(:strip)).gsub('&', '&').gsub('>', '>').gsub('<', '<') if value.present?
end
end
и в ресурсеНужно ли нам явно дезинфицировать сильные параметры в рельсах?
class UsersController < ApplicationController
...
def update
if current_user.update(update_users_params)
redirect_to root_path
end
end
private
def update_users_params
params.require(:user).permit(username: sanitize(params[:user] [:username]),
location: sanitize(params[:user][:location]))
end
здесь расположение и имя пользователя являются модели пользователя атрибуты.
Фактическое поведение без использования метода дезинфицировать:
если добавить "Hey <script type='text/javascript'> alert('Hi') </script>"
к имени пользователя или местоположения в поле ввода пользовательской формы, после отправки формы он хранится, как это
"Hey <script type='text/javascript'> alert('Hi') </script>"
мы должны дезактивировать эти атрибуты для тегов скриптов перед сохранением в базе данных? и
ли сильные параметры не будут дезинфицировать теги сценариев из этих атрибутов?
Это правда, но что делать, если вам нужно обслуживать сохраненный результат на других платформах, таких как служба API, которая служит для Android или IOS. – Jaswinder
Просто зависит от того, как вы его передаете. Если вы просто передали 'params [: my_param_name]' API/службе, по умолчанию он будет экранирован. – codyeatworld
Нет, он не будет экранирован по умолчанию. – Jaswinder