Quali sono le migliori pratiche per proteggere la sezione di amministrazione di un sito web? [chiuso]


92

Mi piacerebbe sapere quali sono le migliori pratiche per la protezione delle sezioni di amministrazione dei siti Web, in particolare da un punto di vista di autenticazione / accesso.

Ovviamente ci sono cose ovvie, come l'utilizzo di SSL e la registrazione di tutti gli accessi, ma mi chiedo dove sopra questi passaggi di base le persone considerano la barra da impostare.

Per esempio:

  • Stai solo facendo affidamento sullo stesso meccanismo di autenticazione che usi per gli utenti normali? Se no, cosa?
  • Stai eseguendo la sezione Admin nello stesso "dominio dell'applicazione"?
  • Quali passi fai per rendere la sezione di amministrazione non scoperta? (o rifiuti l'intera faccenda dell'oscurità)

Finora, i suggerimenti dei rispondenti includono:

  • Introdurre una pausa artificiale lato server in ogni controllo della password amministratore per prevenire attacchi di forza bruta [Developer Art]
  • Utilizza pagine di accesso separate per utenti e amministratori utilizzando la stessa tabella DB (per interrompere XSRF e il furto di sessioni concedendo l'accesso alle aree di amministrazione) [Thief Master]
  • Considera anche l'aggiunta dell'autenticazione nativa del server web all'area di amministrazione (ad es. Tramite .htaccess) [Thief Master]
  • Considera l'idea di bloccare l'IP degli utenti dopo una serie di tentativi di accesso amministratore falliti [Thief Master]
  • Aggiungi captcha dopo tentativi di accesso amministratore falliti [Thief Master]
  • Fornire meccanismi altrettanto potenti (utilizzando le tecniche di cui sopra) per utenti e amministratori (ad esempio, non trattare gli amministratori in modo speciale) [Lo'oris]
  • Considera l'autenticazione di secondo livello (ad es. Certificati client, smart card, spazio per schede e così via) [JoeGeeky]
  • Consenti l'accesso solo da IP / domini affidabili, aggiungi il controllo alla pipeline HTTP di base (tramite ad esempio HttpModules) se possibile. [JoeGeeky]
  • [ASP.NET] Blocca IPrincipal e Principal (rendili immutabili e non enumerabili) [JoeGeeky]
  • Elevazione dei diritti federati: ad esempio, inviare un'e-mail ad altri amministratori quando i diritti di un amministratore vengono aggiornati. [JoeGeeky]
  • Considera i diritti a grana fine per gli amministratori, ad esempio, anziché i diritti basati sui ruoli, definisci i diritti per le singole azioni per amministratore [JoeGeeky]
  • Limita la creazione di amministratori: ad esempio, gli amministratori non possono modificare o creare altri account amministratore. Usa un client "superadmin" bloccato per questo. [JoeGeeky]
  • Prendi in considerazione certificati SSL lato client o telecomandi di tipo RSA (token elettronici) [Daniel Papasian]
  • Se si utilizzano i cookie per l'autenticazione, utilizzare cookie separati per le pagine admin e normali, ad esempio inserendo la sezione admin su un dominio diverso. [Daniel Papasian]
  • Se pratico, considera di mantenere il sito di amministrazione su una sottorete privata, fuori dall'Internet pubblica. [John Hartsock]
  • Riemettere i ticket di autenticazione / sessione quando ci si sposta tra i contesti di utilizzo normale / amministratore del sito web [Richard JP Le Guen]

2
Solo un pensiero ma. Probabilmente il modo migliore per proteggere la sezione di amministrazione è di non averla su Internet pubblico. Puoi scegliere di mantenere il sito di amministrazione solo su una sottorete privata.
John Hartsock

1
Quale di queste idee che hai specificato non sarebbe una buona idea da applicare a tutti gli utenti, non solo agli amministratori?
Vivian River

Potresti voler controllare WebLoginProject su webloginproject.com , è un sistema di login collaborativo progettato per essere sicuro contro XSS, SQL Injection, Session fixation e CSRF vulnerabilità. Ha il codice sorgente in ASP e PHP, è multilingue e ha un bell'aspetto. Molti sviluppatori ci stanno lavorando risolvendo i buchi, quindi questo è probabilmente il più vicino possibile alla sicurezza.
feste

-1 per aver incluso la "password complessa" terribilmente sbagliata (che in realtà è invece una password molto debole) suggerimento
o0 '.

@ Lohoris - Non capisco davvero perché hai svalutato questa domanda. Stai downvoting perché ho riassunto il suggerimento di qualcuno con cui non sei d'accordo? Forse il downvoting della relativa risposta sarebbe più costruttivo. : / Puoi chiarire esattamente con cosa hai un problema?
UpTheCreek

Risposte:


18

Queste sono tutte buone risposte ... In genere mi piace aggiungere un paio di livelli aggiuntivi per le mie sezioni amministrative. Sebbene abbia utilizzato alcune variazioni su un tema, generalmente includono uno dei seguenti:

  • Autenticazione di secondo livello : potrebbe includere certificati client (es. X509 certs), smart card, cardspace, ecc ...
  • Restrizioni dominio / IP : in questo caso, solo client provenienti da domini affidabili / verificabili; come le sottoreti interne; sono ammessi nell'area di amministrazione. Gli amministratori remoti spesso passano attraverso punti di ingresso VPN affidabili in modo che la loro sessione sia verificabile ed è spesso protetta anche con chiavi RSA. Se stai usando ASP.NET puoi facilmente eseguire questi controlli nella pipeline HTTP tramite moduli HTTP che impediranno alla tua applicazione di ricevere richieste se i controlli di sicurezza non sono soddisfatti.
  • Bloccato IPrincipal e Autorizzazione basata su Principal : la creazione di principi personalizzati è una pratica comune, sebbene un errore comune sia renderli modificabili e / o enumerabili con i diritti. Sebbene non sia solo un problema di amministrazione, è più importante poiché è qui che è probabile che gli utenti abbiano diritti elevati. Assicurati che siano immutabili e non enumerabili. Inoltre, assicurati che tutte le valutazioni per l'autorizzazione siano effettuate in base al preside.
  • Elevazione dei diritti federati : quando un account riceve un numero selezionato di diritti, tutti gli amministratori e il responsabile della sicurezza vengono immediatamente informati tramite e-mail. In questo modo, se un utente malintenzionato eleva i diritti lo sappiamo subito. Questi diritti ruotano generalmente intorno a diritti privilegiati, diritti di vedere informazioni protette dalla privacy e / o informazioni finanziarie (ad esempio carte di credito).
  • Rilascia i diritti con parsimonia, anche agli amministratori : infine, e questo può essere un po 'più avanzato per alcuni negozi. I diritti di autorizzazione dovrebbero essere il più discreti possibile e dovrebbero circondare comportamenti funzionali reali. Gli approcci tipici della sicurezza basata sui ruoli (RBS) tendono ad avere una mentalità di gruppo . Dal punto di vista della sicurezza questo non è il modello migliore. Invece di " Gruppi " come " Gestione utenti ", prova a suddividerlo ulteriormente (ad es. Crea utente, Autorizza utente, Eleva / Revoca i diritti di accesso, ecc ...). Questo può avere un po 'più di sovraccarico in termini di amministrazione, ma questo ti dà la flessibilità di assegnare solo i diritti che sono effettivamente necessari al gruppo di amministratori più grande. Se l'accesso è almeno compromesso, potrebbero non ottenere tutti i diritti. Mi piace racchiudere questo nelle autorizzazioni Code Access Security (CAS) supportate da .NET e Java, ma questo va oltre lo scopo di questa risposta. Un'altra cosa ... in un'app, gli amministratori non possono gestire la modifica di altri account amministratore o rendere un utente un amministratore. Ciò può essere fatto solo tramite un client bloccato a cui possono accedere solo un paio di persone.

19

Se il sito Web richiede un accesso sia per le attività regolari che per gli amministratori, ad esempio un forum, utilizzerei accessi separati che utilizzano lo stesso database utente. Ciò garantisce che XSRF e il furto di sessioni non consentano all'autore dell'attacco di accedere alle aree amministrative.

Inoltre, se la sezione admin si trova in una sottodirectory separata, proteggerla con l'autenticazione del server web (.htaccess in Apache per esempio) potrebbe essere una buona idea - allora qualcuno ha bisogno sia della password che della password dell'utente.

Oscurare il percorso di amministrazione non produce quasi alcun guadagno in termini di sicurezza: se qualcuno conosce dati di accesso validi è molto probabile che sia anche in grado di scoprire il percorso dello strumento di amministrazione poiché lo ha phishing o keyloggato o lo ha ottenuto tramite l'ingegneria sociale (il che probabilmente rivelerebbe il percorso anche).

Potrebbe anche essere utile una protezione a forza bruta come bloccare l'IP dell'utente dopo 3 accessi falliti o richiedere un CAPTCHA dopo un accesso non riuscito (non per il primo accesso in quanto è estremamente fastidioso per gli utenti legittimi).


8
  • Respingo l'oscurità
  • Utilizzare due sistemi di autenticazione invece di uno è eccessivo
  • La pausa artificiale tra i tentativi dovrebbe essere fatta anche per gli utenti
  • Il blocco degli IP dei tentativi falliti dovrebbe essere fatto anche per gli utenti
  • Anche le password complesse dovrebbero essere utilizzate dagli utenti
  • Se consideri i captcha ok, indovina un po ', potresti usarli anche per gli utenti

Sì, dopo averlo scritto, mi rendo conto che questa risposta potrebbe essere sintetizzata come un "niente di speciale per il login amministratore, sono tutte caratteristiche di sicurezza che dovrebbero essere utilizzate per qualsiasi login".


6
Grazie per la risposta. Personalmente tendo a non essere d'accordo, ad esempio: un utente sarebbe soddisfatto di password come "ksd83," | 4d # rrpp0% 27 & lq (go43 $ sd {3> "? E, non sta ripristinando i blocchi IP che gli utenti validi hanno attivato dimentico che genererà un lavoro di amministrazione / servizio clienti non necessario? Personalmente penso che i diversi livelli di rischio giustifichino approcci diversi
UpTheCreek

1
La password dell'amministratore dovrebbe essere complessa ma non eccessivamente complessa, altrimenti anche l'amministratore non la ricorderà e la annoterà da qualche parte (lo costringeresti a sfidare ogni regola di sicurezza). Bloccare temporaneamente gli IP con un tentativo fallito è piuttosto standard, vbulletin lo fa, phpbb lo fa IIRC, gli utenti ci sono abituati.
o0 '.

Non voglio davvero guardare a phpbb o vbulletin per le migliori pratiche di sicurezza;)
UpTheCreek

@UpTheCreek ovviamente, sono d'accordo! Stavo solo chiedendo questo "Non è il ripristino dei blocchi IP che utenti validi hanno attivato per essere smemorati genererà un lavoro di amministrazione / assistenza clienti non necessario" <- Non credo che sarebbe un problema, perché gli utenti sono già utilizzati a tale caratteristica.
o0 '.

3

Se utilizzi un solo accesso per gli utenti che hanno sia privilegi di utente normale che privilegi di amministratore, rigenera il loro identificatore di sessione (sia esso in un cookie o in un parametro GET o qualsiasi altra cosa ...) quando si verifica un cambiamento nel livello di privilegio ... per lo meno.

Quindi, se accedo, eseguo un po 'di cose normali da parte degli utenti e poi visito una pagina di amministrazione, rigenera il mio ID di sessione. Se poi esco da una pagina di amministrazione a una normale pagina utente, rigenera nuovamente il mio ID.


Potresti spiegare cosa si ottiene?
Denis Pshenov


Credo che questo non aiuterà tanto quanto pensi. Perché se l'attaccante è in grado di ottenere il tuo ID di sessione corrente nella normale pagina utente, potrebbe usarlo per accedere alla pagina di amministrazione e generarsi un nuovo ID di sessione. Correggimi se sbaglio.
Denis Pshenov

1
Ma l'attaccante non può accedere alla pagina di amministrazione senza una password. Non c'è un cambiamento nel livello di privilegio fino a dopo l'autenticazione. La mancata rigenerazione dell'ID di sessione significa che possono riutilizzare una sessione creata in modo non sicuro per aggirare l'autenticazione.
Richard JP Le Guen

Ho capito adesso. Stavo pensando che tu abbia descritto uno scenario in cui l'utente non deve eseguire nuovamente il login quando passa dal contesto normale / amministratore.
Denis Pshenov

1

Avere una buona password amministratore.

Non "123456"solo una sequenza di lettere, cifre e caratteri speciali abbastanza lunga, diciamo, 15-20 caratteri. Mi piace "ksd83,'|4d#rrpp0%27&lq(go43$sd{3>".

Aggiungi una pausa per ogni controllo della password per prevenire attacchi di forza bruta.


potresti spiegare un po 'cosa sarebbe una "pausa"? Ti riferisci a fare qualcosa come Thread.Sleep (5000) per ammazzare un po 'di tempo?
terrestre

5
questo è stupido: una password troppo complessa per essere ricordata verrà scritta da qualche parte (o salvata), quindi peggiorando le cose che se permettessi una password VERAMENTE buona (cioè una password che verrà digitata perché la ricordi invece di copiarla incollata ).
o0 '.

3
Oh, vorrei poter svalutare questa schifezza fino all'età della pietra, è così stupida, così sbagliata ... Odio le persone che diffondono disinformazione come questa.
o0 '.

1
@ Lo'oris: Cos'è esattamente con cui non sei d'accordo?

2
L'ho scritto in ... mi piace ... il commento appena sopra?
o0 '.

1

Ecco alcune altre cose da considerare:

  1. Un'opzione da considerare, soprattutto se gestisci i computer dell'amministratore o se sono tecnicamente competenti, è utilizzare qualcosa basato su certificati SSL per l'autenticazione del client. I telecomandi RSA e quant'altro possono essere utilizzati anche per una maggiore sicurezza.
  2. Se stai utilizzando i cookie, forse per un token di autenticazione / sessione, probabilmente vorrai assicurarti che i cookie vengano inviati solo alle pagine di amministrazione. Questo aiuta a mitigare i rischi posti al tuo sito rubando i cookie, dalla compromissione del livello 1/2 o dall'XSS. Questo può essere fatto facilmente facendo in modo che la parte admin si trovi su un nome host o dominio diverso e impostando il flag di sicurezza con il cookie.
  3. Anche la limitazione tramite IP può essere intelligente e se hai utenti su Internet puoi comunque farlo, se esiste una VPN affidabile a cui possono aderire.

1

Usiamo Windows Authenticationper l'accesso amministratore. Questo è il modo più pratico per proteggere le aree di amministrazione mantenendo l'autenticazione separata da ciò che si applica agli utenti finali generali. L'amministratore di sistema gestisce le credenziali di accesso dell'utente amministratore e applica i criteri per le password sull'account utente del dominio.


-1

Il modo rigoroso è quello di avere due "farm" completamente diverse, inclusi database, server e tutto il resto, e spostare i dati da una farm all'altra. I sistemi più moderni e su larga scala utilizzano questo approccio (Vignette, SharePoint, ecc.). Normalmente si parla di diverse fasi "fase di modifica" -> "fase di anteprima" -> "fase di consegna". Questo metodo ti consente di trattare il contenuto / configurazione nello stesso modo in cui tratti il ​​codice (dev-> qa-> prod).

Se sei meno paranoico puoi avere un unico database ma solo la tua sezione di amministrazione disponibile sui server di "modifica". Voglio dire, solo gli script / file di modifica vengono inseriti nel server di modifica.

Naturalmente la fase di editing dovrebbe essere disponibile solo su una intranet locale e / o utilizzando una VPN.

Questo può sembrare un po 'eccessivo e potrebbe non essere la soluzione più semplice per tutti i casi di utilizzo, ma è sicuramente il modo più robusto di fare le cose.

Nota che cose come "avere password di amministratore complesse" sono carine, ma lascia comunque il tuo amministratore aperto a tutti i tipi di elementi intelligenti.


Penso che questo sarebbe davvero utile / pratico solo in situazioni puramente CMS / di pubblicazione in cui si spinge il contenuto piuttosto che l'elaborazione dei dati.
UpTheCreek

Forse, ma ho conosciuto (e visto) situazioni in cui ciò viene fatto anche per l'elaborazione e l'input dell'utente. Per una singola fattoria con server di editing separato è un gioco da ragazzi. Per più farm ciò che si fa è far entrare in coda (DB o altro) input dal sito e, utilizzando una procedura esterna, viene elaborato e copiato nel server / DB di "editing". Questo ti dà un maggiore controllo su ciò che entra nel tuo sistema. Tuttavia, è complicato da implementare.
Nir Levy

-2

Dipende molto dal tipo di dati che si desidera proteggere (requisiti legali e simili).

  • Molti suggerimenti riguardano l'autenticazione .. Penso che dovresti prendere in considerazione l'utilizzo dell'autenticazione OpenId / Facebook come login. (Molto probabilmente spenderanno più risorse per la sicurezza dell'autenticazione di te)

  • Salva le modifiche e aggiorna i valori nel database. In questo modo puoi ripristinare le modifiche dell'utente X o tra la data X e Y.


1
Autenticazione Facebook per la sezione admin di un sito web ... pensi davvero che sia una buona idea? Per utenti generici, sì ... ma per la sezione admin ? Mi sembra un po 'pericoloso ...
Richard JP Le Guen

Non ne sono sicuro. ma penso che questo sito esegua solo l'autenticazione openid. E non penso che ci sia una grande (in teoria) differenza tra l'autenticazione di Facebook e openid. Ma non ho letto alcun contratto di licenza o simili.
Carl Bergquist

1
Pessima idea l'openid per l'autenticazione dell'amministratore, anche il rollback il più delle volte è impossibile, e il cattivo è tutto pronto all'interno del tuo sistema ... quale rollback?
Aristos

Sentiti libero di spiegare perché pensi che sia brutto. Bene, se l'accesso come amministratore ti dà pieno accesso al db e il backup è sicuramente difficile da ripristinare, ma in quel caso sei pronto. I miei suggerimenti erano rivolti al sito cmsisch.
Carl Bergquist

-3

Non ho notato che nessuno ha menzionato l'archiviazione / convalida della password dell'amministratore. Per favore, per favore, per favore, non memorizzare la PW in testo normale, e preferibilmente nemmeno qualcosa che può essere invertito - usa qualcosa come un hash MD5 salato in modo che almeno se qualcuno capita di recuperare la "password" memorizzata non hanno qualcosa di terribilmente utile, a meno che non abbiano anche il tuo schema di sale.


1
-1 per md5. Non vuoi un hash veloce per le password, anche al di là degli altri problemi con md5ing. bcrypt sarebbe un'opzione migliore.
Kzqai

-4

Aggiungi un campo per la password e una domanda di sicurezza che l'amministratore saprà, ad esempio qual era il nome della tua prima ragazza, o randomizza le domande ogni volta che visualizzi il pannello di amministrazione.

Forse potresti sempre mettere la sezione di amministrazione in una grande directory, ad es

http://domain.com/sub/sub/sub/sub/sub/index.php

Ma non è proprio un bene hah.

Forse potresti includere una stringa di query nella home page, come:

http://domain.com/index.php?display=true

Quando lo fa, appariranno il campo nome utente e password.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.