Strong Params, Seguridad de parámetros en las peticiones en Ruby on Rails

Si hiciéramos la siguiente acción, Rails nos advertirá que esta acción no es segura:

@article = Article.new(params[:article])

¿Por qué? Porque desde el Front podrían inyectarnos atributos de la clase que no tuviera permiso para modificar.

Por ejemplo imaginemos una clase Usuario que tuviera de atributos (name, age, type) y que type pueda ser user o administrator.

Si dejáramos la consulta anterior, en un formulario del Front donde se registra el usuario, podrían mandar maliciosamente el atributo type=»administrator» se guardaría, convirtiéndose automáticamente en administrador del sistema y poder hacer lo que le plazca.

Para evitar estos errores de seguridad Rails no deja guardar el objeto entero sino hay que indicarle los parámetros exactos que tienen permiso.

 

Para hacerlo correctamente hay que indicarle parámetro por parámetro los permitidos:

@article = Article.new(title: params[:article][:title],
                       body: params[:article][:body])

 

O crear una función que nos los devuelva los parámetros permitidos por nosotros:

@article = Article.new(article_params)
private

def article_params
  params.require(:article).permit(:title,:body)
end