class ApplicationController < ActionController::Base
....
def sanitize(value)
ActionController::Base.helpers.sanitize(value.try(:strip)).gsub('&', '&').gsub('>', '>').gsub('<', '<') if value.present?
end
end
und in einer Ressourcemüssen wir starke params in schienen explizit sanieren?
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
hier Standort und Benutzername sind User-Modell Attribute.
tatsächliches Verhalten ohne sanitize Methode:
wenn wir "Hey <script type='text/javascript'> alert('Hi') </script>"
an Benutzername oder Standort Eingabefeld eines Benutzerformulars hinzufügen, nachdem Formulareinreichung sie gespeichert ist, wie es
"Hey <script type='text/javascript'> alert('Hi') </script>"
tun müssen wir Bereinigen Sie diese Attribute für Skript-Tags, bevor Sie sie in der Datenbank speichern? und
werden starke Params Skript Tags nicht von diesen Attributen bereinigen?
Das stimmt, aber was ist, wenn Sie das gespeicherte Ergebnis auf anderen Plattformen wie einem API-Dienst dienen müssen, der Android oder IOS dient. – Jaswinder
Kommt nur darauf an, wie du es passierst. Wenn Sie 'params [: mein_param_name]' an die API/den Dienst übergeben haben, wird es standardmäßig mit Escapezeichen versehen. – codyeatworld
nein, es wäre standardmäßig nicht maskiert. – Jaswinder