2016-12-07 1 views
0
class ApplicationController < ActionController::Base 
.... 

    def sanitize(value) 
    ActionController::Base.helpers.sanitize(value.try(:strip)).gsub('&amp;', '&').gsub('&gt;', '>').gsub('&lt;', '<') 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

ist
"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?

Antwort

0

Schienen speichern die Eingabe so, wie sie ist, aber sie wird immer entfliehen, wenn Sie damit arbeiten.

Sie müssen raw oder html_safe explizit für unsanitized (HTML/Skript) Zeichenfolgen aufrufen.

+0

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

+0

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

+0

nein, es wäre standardmäßig nicht maskiert. – Jaswinder

Verwandte Themen