2012-12-05 9 views
6

In questo applicatin ci sono quattro ruoli,Sicurezza: il ruolo definito può essere utilizzato in modo improprio tramite modifica e modifiche dell'URL. in applicazione rubino

ruolo può ottenere in pagine non autorizzate modificando i ids url ed eseguire azioni su opzioni disponibili per quanto riguarda la pagina fuorviante malfunzionamento dell'applicazione.

chiunque ne abbia idea. È il problema della chiusura della sessione o delle vie permition problema ... grazie in anticipo

+1

Non ha nulla a che fare con i problemi di routing, è un problema di autorizzazioni ed è qualcosa che devi gestire da solo. Forse usando qualcosa come Cancan? github.com/ryanb/cancan puoi controllare se un ruolo ha il permesso di modificare qualcosa in un filtro precedente e, in caso contrario, reindirli e dare loro un feedback –

risposta

1

suo nulla legati alle rotte, è possibile limitare l'accesso azione te stesso con filtri, cioè

class MyController < ApplicationController 
    before_filter :check_access 

    def secure_action_a 
    end 

    def secure_action_b 
    end 

    private 

    def check_access 
    case params[:action] 
     when 'secure_action_a': 
     redirect_to root_path, error: "Not Allowed" unless current_user.role == 'admin' 
     when 'secure_action_b': 
     redirect_to root_path, error: "Not Allowed" unless current_user.role == 'user' 
    end 
    end 
end 

e anche sul un'azione, devi verificare che l'utente abbia accesso alla risorsa, quindi supponiamo che tu abbia un'azione che mostri una transazione all'utente e che possa vedere le sue transazioni solo se scrivi un codice come:

def transaction 
    @transaction = Transaction.find(params[:id]) 
end 

quindi hai un grosso problema, perché chiunque può iniziare a scrivere richieste come "http://mywebsite.com/transaction/23" e vedere la transazione perché non ci sono filtri sull'utente corrente, quindi di solito assicurati che il utente possiede la risorsa

def transaction 
    @transaction = current_user.transactions.find(params[:id]) 
end 

o uno

def transaction 
    @transaction = Transaction.where(user_id: current_user.id, id: params[:id]) 
end 

successivamente si può gemme avanzate come cancan per controllare l'accesso alle risorse

infine, assicuratevi di leggere la rails security guide

+0

grazie per ans. sto cercando di farlo .... –

+0

cool, se la mia risposta mi ha aiutato con il compito, non dimenticare di accettare la mia risposta come risposta valida (in modo da poter ottenere più reputazione e posti di lavoro migliori in futuro: P), se hai altre domande riguardo le restrizioni sui ruoli, fammelo sapere, ma come ho scritto, la guida alla sicurezza dei binari è un'ottima guida per leggere la sicurezza delle rotaie e come prevenire un cattivo uso del tuo sito web;) – rorra

+0

ya lo so .. –

Problemi correlati