Estoy empezando con Rails, así que estoy usando Brakeman para aprender sobre posibles vulnerabilidades en mi código de novato. Está lanzando una alta confianza "Dinámica Render Path" de advertencia sobre el código siguiente en mi archivo show.js.erb
:Rails Advertencia de Brakeman: ¿Falsa alarma de ruta de renderizado dinámico?
$('#media-fragment').html('<%= escape_javascript(render(params[:partial])) %>');
realidad esperaba que esto era un problema, por lo que no hay sorpresa. Así que lo cambié a la siguiente:
# controller:
def show
if legal_partial?
@allowed_partial = params[:partial]
else
raise StandardError, "unexpected partial request: #{params[:partial]}"
end
end
private
def legal_partial?
%w(screenshots video updates).include? params[:partial]
end
# ...
# show.js.erb
$('#media-fragment').html('<%= escape_javascript(render(@allowed_partial)) %>');
Aunque creo que el código está ahora a salvo, Brakeman sigue siendo infeliz con esto. ¿Hay una forma más idiomática de controlar la representación de un parcial basado en la entrada del usuario?
Me parece que no puede obtener la condición de guarda a trabajar para los atributos del modelo. Tengo un método en mi modelo: 'def sanitized_partial_path; if ["foo", "bar"]. include? (atributo); "ruta/a/# {atributo}"; end; 'y todavía da el falso positivo. – Nick
@Nick Brakeman no va a mirar el contenido de 'sanitized_partial_path' (aunque en el futuro Brakeman Pro lo hará). El ejemplo en mi respuesta funciona debido a la asignación a una variable de instancia en la acción del controlador que se utiliza más adelante en la vista. – Justin