base64_encode comportamento strano
Domanda
Sto facendo qualcosa del tipo:
SELECT * FROM table WHERE user='$user';
$myrow = fetchRow() // previously I inserted a pass to the db using base64_encode ex: WRM2gt3R=
$somepass = base64_encode( Sto facendo qualcosa del tipo:
<*>
Ricevo sempre errori, echo persino $ somepass e $ myrow [1] sono uguali, ma comunque errore. Che cosa sto facendo di sbagliato? Grazie
POST['password']);
if($myrow[1] != $somepass) echo 'error';
else echo 'welcome';
Ricevo sempre errori, echo persino $ somepass e $ myrow [1] sono uguali, ma comunque errore. Che cosa sto facendo di sbagliato? Grazie
Soluzione
Prova a usare var_dump
invece di echo - forse uno di loro ha uno spazio o una nuova riga all'inizio / alla fine.
Modifica:
È necessario memorizzarlo come CHAR (40): Una stringa di lunghezza fissa che viene sempre riempita a destra con spazi alla lunghezza specificata quando archiviata
Usa VARCHAR o trim()
Altri suggerimenti
Se $ myrow [1] è in realtà la password corretta nella codifica base64, non vedo alcun errore.
Prova questo alla fine:
echo "<br />$myrow[1] != $somepass";
Cosa dice?
E comunque: non vedo alcun motivo per codificare base64 le password. Cosa stai cercando di realizzare?
Penso che in qualche modo se faccio un var_dump () ottengo:
stringa (40) " YWRraM2 = " string (8) " YWRraM2 = "
sembra in qualche modo se inserisco i dati nel db usando la console aggiungendo uno spazio extra al campo pass.
myplacedk: c'è qualche motivo per cui non dovrei farlo? Pensavo che aggiungesse un ulteriore livello di sicurezza?
Questa codifica fa due cose:
- Aggiunge codice, rendendo più complesso e più facile fare errori
- Se visualizzi il database sullo schermo e qualcuno ti guarda alle spalle, le password potrebbero essere un po 'più difficili da ricordare.
Quindi no, non aggiunge alcuna sicurezza. È solo una codifica, è facile da decodificare.
Forse ti stai scambiando per hash md5 o qualcosa del genere.
Giocare è fantastico, ma quando si tratta di sicurezza, consiglio vivamente di non usare qualcosa che non capisci. A lungo termine, farà più danni che benefici.
Alcuni problemi:
-
Dai tuoi commenti altrove, suppongo che il problema con il codice corrente sia che il campo del tuo database è CHAR (40). Un campo CHAR ha sempre una dimensione fissa. Prova a cambiare il tipo di campo del database in VARCHAR anziché in CHAR.
-
L'uso di base64_encode prima della memorizzazione in un database non è affatto sicuro. La buona pratica è archiviare solo un hash unidirezionale della password nel database, in genere md5 o (meglio) sha1. Quindi, quando l'utente desidera accedere, utilizzare la stessa funzione hash sulla password fornita, quindi confrontare i due hash.
Questo ha l'ulteriore vantaggio di lavorare anche con password più lunghe di 40 caratteri.
Un sha1 o md5-hash occupa sempre una quantità fissa di spazio, quindi se segui questa route, non devi cambiare la colonna del tuo database in VARCHAR :)