Verifica se l'utente corrente esiste prima di eseguire il codice

1

In uno dei miei controller ho questo metodo:

  def method_name
    if current_user
      @model = Model.find(params[:id])
      if @model.destroy
        flash.alert = 'Model deleted successfully'
        redirect_to models_path
      end
    end
  end

Controllo se esiste un utente corrente assegnato da devise prima di dare la possibilità di eliminare @model. È sicuro e sufficiente in termini di sicurezza?

Quello che faccio veramente è solo controllare se l'utente corrente esiste. Quindi c'è un modo in cui qualcuno può "ingannare" il sistema che current_user esiste e come risultato essere in grado di attivare i comandi inclusi nel metodo?

    
posta Stefanos.Ioannou 13.05.2014 - 16:35
fonte

1 risposta

1

Non sono sicuro della tua applicazione, ma ciò che sembra manchi è che l'utente ha un qualche tipo di controllo sul modello (cioè la possibilità di eliminarlo).

Se la tua applicazione consente agli utenti di essere creati senza alcun intervento / approvazione, chiunque potrebbe creare un nuovo utente (e quindi avere un valido utente corrente) e rimuovere tutti gli oggetti semplicemente iterando attraverso tutti i tuoi valori di identificazione:

  • / url / 1
  • / url / 2
  • ...

Ancora una volta, non sei sicuro di cosa fa la tua app, ma potresti voler inserire qualcosa come:

if current_user
  @model = current_user.models.find(params[:id])
  if @model.destroy
    flash.alert = 'Model deleted successfully'
    redirect_to models_path
  end
end

Ciò consentirà solo a un utente di rimuovere i propri oggetti, non tutti gli oggetti sul sistema.

    
risposta data 14.05.2014 - 06:24
fonte

Leggi altre domande sui tag