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

È stato utile?

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:

  1. Aggiunge codice, rendendo più complesso e più facile fare errori
  2. 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 :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top