comportamento estranho base64_encode
Pergunta
Estou fazendo algo como o seguinte:
SELECT * FROM table WHERE user='$user';
$myrow = fetchRow() // previously I inserted a pass to the db using base64_encode ex: WRM2gt3R=
$somepass = base64_encode($_POST['password']);
if($myrow[1] != $somepass) echo 'error';
else echo 'welcome';
Im sempre recebendo erro, eu até echo $ somepass e $ linha [1] eles são o mesmo, mas ainda erro. O que estou fazendo de errado? Graças
Solução
Tente usar var_dump
vez de eco -. Talvez um deles tem um espaço ou nova linha no início / fim
Editar:
Você deve estar armazenando-o como CHAR (40): A fixed-length string that is always right-padded with spaces to the specified length when stored
Use VARCHAR ou trim()
Outras dicas
Se $ linha [1] é realmente a senha correta em base64-codificação, eu não vejo quaisquer erros.
Tente este ind final:
echo "<br />$myrow[1] != $somepass";
O que ele diz?
E a propósito: eu não vejo qualquer razão para base64 codificar as senhas. O que você está tentando realizar?
Eu acho que de alguma forma se eu fizer um var_dump () eu recebo:
string (40) "YWRraM2 =" string (8) "YWRraM2 ="
Parece que de alguma forma se eu inserir os dados no db usando o console seu adicionando um espaço extra para o campo passagem.
myplacedk: há alguma razão por que eu não deveria estar fazendo isso? Eu pensei que irá adicionar uma Leyer extra de segurança?
Esta codificação faz duas coisas:
- Acrescenta código, tornando-se mais complexo e mais fácil de cometer erros
- Se você ver o seu banco de dados em sua tela, e alguém olha por cima do ombro, as senhas podem ser um pouco mais difícil de lembrar.
Então, não, não realmente adicionar qualquer segurança. É apenas uma codificação, é fácil de descodificar.
Talvez você está confundindo-a com md5-hash ou algo parecido.
Brincando é grande, mas quando se trata de segurança, eu realmente recomendo não usar algo que você não entende. No longo prazo, ele vai fazer mais dano do que bem.
Alguns problemas:
-
De seus comentários em outros lugares, eu acho que o problema com o código atual é que seu campo de banco de dados é CHAR (40). Um campo CHAR sempre tem um tamanho fixo. Tente alterar o tipo de campo de banco de dados VARCHAR em vez de CHAR.
-
Usando base64_encode antes de armazenar em um banco de dados está longe de ser seguro. A boa prática é armazenar apenas uma one-way hash da senha no banco de dados - normalmente md5 ou (melhor) sha1. Então, quando o usuário quer entrar, usar a mesma função de hash na senha fornecida, e então comparar os dois hashes.
Isto tem a vantagem de trabalhar com senhas mais de 40 caracteres também.
A SHA1 ou MD5 hash sempre leva uma quantidade fixa de espaço, por isso, se você seguir esse caminho, você não tem que mudar a sua coluna de banco de dados para VARCHAR :)