Ciao ..
in linea di principio (quindi non tanto a livello di codice), com'è che dovrebbe essere impostata la funzione di 'login', affinchè sia un metodo sicuro ?
Grazie mille
Ciao ..
in linea di principio (quindi non tanto a livello di codice), com'è che dovrebbe essere impostata la funzione di 'login', affinchè sia un metodo sicuro ?
Grazie mille
in questa discussione trovi la risposta
http://forum.html.it/forum/showthrea...readid=1440626
http://www.miniscript.it
Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.
possiamo fare un pò di ordine (un ABC) per uno come me, che si avvicina ora agli argomenti .. e li mastica a malapena ?
scusate le tante domande, oltretutto "banali" ..
1) il codice php è 'visibile' in qualche modo dall'esterno ?
2) una volta che ho criptato tutto quello che devo/posso criptare (parliamo di password), nel momento in cui scrivo l'esito dell'interrogazione/verifica in una sessione (scrittura non della password, ma dell'utenza con i permessi di aggiornamento per poter proseguire con la navigazione in tutte le pagine) ho un contenitore blindato o una sessione è comunque 'forzabile' ?
3) il 'pericolo' dell'effettuazione di un login, quale sarebbe ?
- avere il campo del form in chiaro ? (leggibile non solo da chi è davanti al monitor, ma anche in rete ?)
- il trasferimento del dato dal client al server (che interpreta il php) ?
- il dato salvato nel DB ?
- negli esempi che ho visto nel forum, viene criptato il dato inserito nel DB
.. e quando viene fatto il test(select)Codice PHP:
INSERT INTO utenti (nome, password) VALUES ('gianni', SHA1('prova'));
cominciamo da stà cosetta ..Codice PHP:
SELECT id FROM utenti WHERE nome = '$nome' AND password = SHA1('$password')
1) una volta scritta la riga in DB, quel campo è in qualche modo leggibile in chiaro ?
(mi verrebbe da dire che come lo faccio io, lo potrebbe fare chiunque)
dopo averlo scritto, ho provato con
ma il risultato è stato ottenere il criptaggio del dato criptato, ma è anche vero che ho provato a fare una select mettendo il campo password nella where (come nell'esempio trovato), ma la riga non mi è stata trovata ! mha .. avrò sbagliato qualcosa !?Codice PHP:
SELECT username, SHA1('password'), ...
Codice PHP:
SELECT *
FROM utenze
WHERE password = SHA1('prova')
chiedevo se sia possibile leggere in chiaro il campo, nell'ipotesi che voglia estrarmi la riga con la sola utenza (in where), per vedere se sia corretta, e poi confrontare input e dato di password contenuta nel DB
(è anche vero che posso fare 2 select, una con la sola utenza in where, e poi una sia con utenza che passw)
altre cosette ..
- criptare la password lato client vorrebbe dire questo ? .. e a cosa servirebbe ?
Codice PHP:
$password = SHA1($_POST ['password'])
Grazie mille
Allora ci sono molte cose non ti sono chiare, e per questo esistono le guide.
In tutti i casi posso risponderti io:
Vediamo un po di fare chiarezza...
Il browser (Mozzilla firefox o altri, per intenderci) effettua una chiamata al server.
Infatti quando noi visitiamo www.nomesito.it/file.estensione, diciamo al server di interpretare il file, in basse all'estensione. Il browser non fa altro che interpretare l'HTML, e tutti i linguaggi CLIENT SIDE, che la pagina contiene; Il php è come dire "un generatore di HTML dinamico", infatti il PHP viene interpretato dall'interprete presente sul server, quindi almenochè l'utente non abbia in possesso il server (cosa al quanto difficile) non puo mai visionare il codice PHP.
Ora passiamo al login, ti spiego brevemente come avviene il tutto:
Un server spesso è affiancato da una base di dati (Abbreviabile in DB [DataBase] ), spesso, il DB è sotto forma MySQL, che non è altro che un gestore di dati (DBMS). I login della maggior parte dei siti avvengono con lo storage (salvataggio) dei dati dell'utente nel DB, da parte dello script PHP. Per aumentare la sicurezza spesso i dati vengono codificati (l'algoritmo sha1 che usavi nel tuo esempio, è di tipo one-way, ovvero è impossibile ricavare la parola data in input), vengono usati questi algoritmi di cryptazione in modo che anche se scasualmente un malintenzionato s'infiltrasse nel DataBase, non potrebbe leggere le password originali degli utenti.
Per quanto riguarda la leggibbilità dei dati nel DataBase, è come se un hacker volesse entrare nel tuo pc, io sono della filosofia che nulla è impossibile per un hacker, quindi per un utente normale è impossibile leggere i dati nel DB.
Io ti ho dato più o meno le basi teoriche, per la patrica ti serve studiare una buona guida. Nella sezione PHP di html.it ne trovi molte.
Ciao
quindi tutto stò discorso sulla sicurezza delle password, è indirizzato all'unica ipotesi che un maleintenzionato riesca ad entrare nel DB .. trovando così la sorpresa delle password criptate ..
e il discorso del così detto "Man in the middle" ?
.. che il criptaggio avviene solo nel server, e non nel browser .. per cui "in viaggio" la password potrebbe essere intercettata ?
ultima cosetta ..
se uno riesce ad entrare nel db che stà nel server (che immagino abbia delle protezioni, oltre alla password che gli imposto io) mi verrebbe da dire che è anche in grado di vedere il codice in php (è proprio per questo che chiedevo se il codice sia leggibile da maleintenzionati)
MiM è sempre in agguato.Originariamente inviato da JANUS70
quindi tutto stò discorso sulla sicurezza delle password, è indirizzato all'unica ipotesi che un maleintenzionato riesca ad entrare nel DB .. trovando così la sorpresa delle password criptate ..
e il discorso del così detto "Man in the middle" ?
.. che il criptaggio avviene solo nel server, e non nel browser .. per cui "in viaggio" la password potrebbe essere intercettata ?
ultima cosetta ..
se uno riesce ad entrare nel db che stà nel server (che immagino abbia delle protezioni, oltre alla password che gli imposto io) mi verrebbe da dire che è anche in grado di vedere il codice in php (è proprio per questo che chiedevo se il codice sia leggibile da maleintenzionati)
Per aggiungere sicurezza al transito dei dati tra client e server puoi usare HTTPS.
Se qualcuno ha accesso "fisico" al server, anche con tutte le protezioni del mondo prima o poi riuscirà a fare quello che vuole fare
Diciamo che se un hacker riesce ad accedere al server con una shell, è in grado di fare bene o male tutto quello che vuole, compreso leggere (e modificare!) il codice Php.
Di solito comunque chi ha interesse ad accedere a un server difficilmente ha interesse nel codice Php. Più probabilmente ha interesse agli indirizzi email o account di carte di credito o comunque dati sensibili e importanti. Altre volte invece sono interessati a guadagnare una shell per aprire backdoor sul server, in modo da usarlo come ponte per attaccare altri server.
Nella mia piccola esperienza di sicurezza informatica, non mi è mai capitato di vedere un hacker entrare in un server e analizzare codice Php, mentre è successo spessissimo di vedere "attacchi" ai firewall (per aprire una backdoor) o ai database (per recuperare indirizzi email e...password cripatate!).
![]()
ho capito .. grazie mille
ultima cosetta ..
la password sul DB serve a qualcosa ? .. o sono altre le sicurezze che proteggono il DB ?
grazie
JANUS vuoi un consiglio? Vai per gradi.Originariamente inviato da JANUS70
ho capito .. grazie mille
ultima cosetta ..
la password sul DB serve a qualcosa ? .. o sono altre le sicurezze che proteggono il DB ?
grazie
Chiariamo chi mi ha preceduto ha detto cose ESATTISSIME!!
Vorrei però farti presente che nemmeno FACEBOOK utilizza https... e lì di dati "riservati" ve ne sarebbero...
Quando si realizza un sistema di login bisogna chiedersi a che scopo questo viene costruito e basarsi su una logica di proporzionalità. Non penso che il tuo attuale scopo sia quello di realizzare un sistema di login per una banca!!?
Ebbene... Vuoi fare un sistema di login?
Inizia dalla struttura del DATABASE...
poi fai un passo alla volta... registrazione+login+password smarrita+modifica password+ gestione profili+gestione permessi...
... poi token, XSS, brute force... e poi https.
http://www.miniscript.it
Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.
Si, in modo da far rendere piu difficile l'accesso di altri utenti dello stesso server. Infatti per connettersi ad un DB, c'è bisogno di fornire questi dati:la password sul DB serve a qualcosa ?
-IP del server che spesso è omesso in quanto la maggior parte degli hosting non offre la possibilità agli altri (quindi persone con IP diverso) di connettersi al DB.
-Username che comunque è un dato poco sensibile (spesso l'username è uguale al nome del sito)
-Password che permette l'accesso solo agli utenti che conoscono la password (dello stesso server se l'IP accettato è unico) di connettersi.
Per quanto riguarda i MITM e affini, nulla ti puo proteggere da essi, nemmeno le connessioni cifrate (HTTPs e SSL incluse) possono fortinirti un adeguata protezione, infatti, aimè, oggi sono bypassabili, e aimè di nuovo, non così difficilmente.
Senza pensare che esistono alcune tecniche (Vedi DNS Cache Poisoning), che non "intaccano" il protocollo di comunicazione.
Infine posso dirti, come già gli utenti precedentemente hanno fatto, che prenderti un sito su un hosting affidabile e programmare un sito in PHP decente, proteggendoti da semplici vulnerabilità che alcuni lamer potrebbero sfruttare, può bastare per le tue esigenze.
P.S.
Voglio ribadire che per la gente competente (Hacker, Cracker e affini) nulla è impossibile, infatti l'unico intoppo che c'è nei computer è l'uomo.