Gestire i contenuti del proprio sito: autenticazione.

Ho lavorato per un anno con joomla (non che ci lavorassi tutti i giorni, ma i lavori che ho fatto ultimamente li ho fatti con lui, o lei!).

L'ho spulciato per benino, ho modificato centiania di righe per adattarlo ai miei scopi ma ultimamente mi sto chiedendo se sia effettivamente utile riscrivere tanto codice anzichè farne uno ad hoc.

Del resto raramente trovo qualcosa che sia come serve a me, per lo più devo apportare modifiche anche rilevanti al codice.

In più mi piace programmare, è una brutta malattia, lo so, ma mi piace controllare tutto il processo, anche se non sono esperto.

Quindi per il mio sito volevo tornare all'origine.

Ho gia postato di recente circa la costruzione di una web gallery, fatti i miei conti mi risulta più facile usare un database, ma per questioni di compatibilità dei nomi di file e cartelle ho deciso di creare una pagina di gestione della gallery.

Una cosa semplice in effetti.

Veniamo a ciò che mi serve.

www.nomesito.it/admin/login.php

Qui ci piazzo un bel form con user e pass.

Come si gestisce al meglio l'accesso monoutente ad una sezione di amministrazione di contenuti?

Nei miei precedenti lavori (che non ho con me purtroppo), usavo creare una tabella nel database con i dati dell'admin e facendo un controllo incrociato scrivevo i permessi dell'utente in una sessione.

Ho spulciato un pò il forum ma non ho trovato quello che mi serve.

Mi consigliate le procedure da seguire per garantire la sicurezza?

inviato 10 anni fa
arjuna
X 0 X

La sicureza in che senso?

- Senso lato, dovuta più che altro all'hoster?

- Dovuta alla sicurezza dei dati immagazzinati nel DB?

- Dovuta al tuo script?

A parte l'ultima che dipende solo dal programmatore, la seconda dipende sia dal database che da come sono immagazzinati i dati su di esso, mi spiego: se immagazzini i dati in chiaro, il rischio di perdere la sicurezza in caso che venga 'bucato' il database è altissimo, quindi i dati immagazzinati su di esso, almeno quelli relativi alla gestione cliente, devono essere crittografati a singola via, così che se pure viene 'bucato' il database i dati sono ragionevolmente sicuri.

In questo caso md5 è abbastanza sicuro, dato per ora solo nove combaci sono stati beccati e quindi prima che venga decriptato tutto ce ne vuole.

Lato dell'hoster, be ma qui non dipende da te a meno che tu non sia anche hoster, quindi lo escluderei dal problema, dato che se non nell'ultima ipotesi, non ci puoi fare molto.

Si torna al database, ovvero quale scegliere per rendere il sistema di login sicuro.

Un metodo molto più sicuro di un database comune è il sistema .htaccess .htpassword perché permette un login senza codice, il punto più debole della catena, e se l'integrità del server non viene compromessa non c'è modo di carpire informazioni.

Il suo metodo è semplice, si crea un file .htaccess nella cartella da proteggere, ovvero si edita quello già presente, ad esempio, .htaccess potrebbe avere questo aspetto:

AuthUserFile /home/pluto/.htpasswd
AuthGroupFile /dev/null
AuthName "pippo"
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>

Dove l'utente pluto ha creato una cartella chiamata pippo nella quale si trova questo file.

Al suo interno, come prima cosa c'è il riferimento all'altro file, quello che richiama il file con le password, che non è nella stessa cartella pippo (sarebbe pericoloso ai fini della sicurezza), ma in un percorso dal quale nessun utente Web può raggiungere, cioè la root del tuo account sul server.

Ed ecco il file .htpasswd

paperino:so.72Zx50K/lo

Tutto qui, l'utente paperino ha come password be te lo dico va :D pdp che però è codificata e nonsi può leggere. Ovviamente se più utenti hanno la possibilità di accedere alla cartella, vanno aggiunti in seguenza nei due file:

AuthUserFile /home/pluto/.htpasswd
AuthGroupFile /dev/null
AuthName "pippo"
AuthName "paperone"
AuthName "arjuna"
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>

e parimenti in quello delle password

paperino:so.72Zx50K/lo
paperone:egSi2xK6XuHYA
arjuna:xpSzdHa.kkdFE

Ovviamente per creare questi files, o lo fai mano o crei un sistema automatico, il che rende la cosa più complessa e potenzialmente pericolosa, ciò significa anche che si ritorna al problema principale di ogni sistema di autenticazione, lo script che lo implementa il punto debole della catena.

risposto 10 anni fa
Marco Grazia
X 0 X

ho notato che tu ci vai proprio a nozze con la sicurezza  :police:

io avevo in mente qualcosa di più classico:

- sezione amministrativa /root-sito/admin

- login tramite form (dovrebbe bastare solo la pass essendo io l'unico admin)

- navigazione ristretta all'interno delle pagine di /root-sito/admin

queste pagine non devono essere indicizzate dai MdR e non accessibili a chi non è autorizzato.

lasciando stare al sicurezza del server e del database che non mi compete (non ho dati sensibili sul mio sito e quindi non è cosa che interessi un hacker), l'unica cosa che veramente mi interessa è bloccare l'accesso alle pagine agli altri.

Credo per tanto che una pass sia più che sufficiente.

- login

- autenticazione

- apertura della sessione

adesso quindi le cose che vorrei capire sono:

- come eseguire un login pulito

- che metodo usare per l'autenticazione

- che accorgimenti si devono prendere per rendere la sessione sicura

ovviamente sicuro è un termine relativo, spero però di aver reso il grado di sicurezza che mi interessa.

le cose semplici sono le migliori.

gli script che ho trovato in rete sono vecchiotti e generalmente complessi.

cmq se ti sembra che quello che avevo in mente può non essere indicato sono ben lieto di ricevere tuoi suggerimenti.

adesso inizio a studiacchiarmi i vecchi sistemi di login che ho trovato e poi vi faccio sapere, ma se avete qualcos'altro da propormi ne sarei grato... vorrei finire tutto in un paio di ore al massimo.

- protezione bruteforce: concessione di soli tre tentativi con conseguente segnalazione dell'ip di chi abusa

-

risposto 10 anni fa
arjuna
X 0 X

un sistema di login potrebbe funzionare in questo modo:

1) memorizzi in una tabella lo username e l'md5 della password dell'utente (o dell'admin)

2) crei un classico form per far inserire nome utente e password

3) controlli che sia stato inserito qualcosa

4) se nel php.ini è stato attivato il magic quote allora fai lo streep_slash di username e password

5) fai l'escape di username con la funzione mysql_real_escape_string

6) calcola l'md5 della password

7) prepara la query per la verifica dell'utente: SELECT user_id FROM utenti WHERE username = '$username' AND password='$password'

8) se la query restituisce un risultato allora avvia la sessione:

session_set_cookie_param(0); // così scade alla chiusura del borwser

session_start();

9) memorizzi in sessione l'id dell'utente.

$_SESSION['user_id'] = ...

Nelle pagine da proteggere controlla che la variabile $_SESSION['user_id'] sia settata.

bye

risposto 10 anni fa
Gianni Tomasicchio
modificato 10 anni fa
X 0 X

Arjuna due cosucce :)

Quel metodo è il più semplice di tutti perché non ti devi ammattire con le tabelle di un database, ma è anche sicuro, poi ovvio, vedi tu.

Altra cosa, di solito un cracker si diverte a scassinare i sistemi non solo per carpire informazioni, ma sopratutto per trovare un buco da cui passare per mettere un server zombie, queste persone se ne fregano dei dati tuoi sensibili, loro preferiscono mettere su un bello zombie da cui fare spam, come sai gestisco un server, ecco perché la mia fissa sulla sicurezza :)

Comunque sia e qualsiasi sarà la strada scelta, per evitare che i bot dei motori di ricerca indicizzino la tua cartella 'segreta', be intanto ti dico che non possono entrarvi, così come qualsiasi altro utente senza password e comunque metti nella cartella principale, o meglio la cartella prima di quella segretata, un bel file robot.txt con dentro almeno queste righe:

User-agent: *

Disallow: /mia cartella segretata/

e qualsiasi robot di un motore di ricerca che passi di lì saprà che non deve entrare nella cartella.

http://www.robotstxt.org/wc/norobots.html

risposto 10 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda