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

Foi útil?

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:

  1. Acrescenta código, tornando-se mais complexo e mais fácil de cometer erros
  2. 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 :)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top