base64_encode странное поведение - PullRequest
1 голос
/ 18 октября 2008

Я делаю что-то вроде следующего:

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';

Я всегда получаю ошибку, я даже повторяю $ somepass и $ myrow [1], они одинаковые, но все равно ошибка. Что я делаю неправильно? Спасибо

Ответы [ 5 ]

2 голосов
/ 18 октября 2008

Попробуйте использовать var_dump вместо эха - возможно, у одного из них в начале / конце есть пробел или новая строка.

Edit:

Вы должны хранить его как CHAR (40): A fixed-length string that is always right-padded with spaces to the specified length when stored

Используйте VARCHAR или trim()

0 голосов
/ 18 октября 2008

Некоторые проблемы:

  • Из ваших комментариев в другом месте, я предполагаю, что проблема с текущим кодом в том, что поле вашей базы данных - CHAR (40). Поле CHAR всегда имеет фиксированный размер. Попробуйте изменить тип поля базы данных на VARCHAR вместо CHAR.

  • Использование base64_encode перед сохранением в базе данных далеко не безопасно. Хорошей практикой является хранение в базе данных только одностороннего хэша пароля - обычно это md5 или (лучше) sha1. Затем, когда пользователь хочет войти в систему, используйте ту же хеш-функцию для предоставленного пароля, а затем сравните два хеша.
    Это дает дополнительное преимущество работы с паролями длиной более 40 символов.
    Хэш sha1 или md5 всегда занимает фиксированное количество места, поэтому если вы идете по этому пути, вам не нужно переключать столбец базы данных на VARCHAR:)

0 голосов
/ 18 октября 2008

Эта кодировка делает две вещи:

  1. Добавляет код, что делает его более сложным и легче делать ошибки
  2. Если вы просматриваете свою базу данных на экране, и кто-то смотрит через ваше плечо, пароли могут быть немного сложнее запомнить.

Так что нет, это не добавляет безопасности. Это просто кодировка, ее легко декодировать.

Может быть, вы принимаете это за хеширование md5 или что-то в этом роде.

Тренироваться прекрасно, но когда дело доходит до безопасности, я действительно рекомендую не использовать то, что вы не понимаете. В конечном счете, он будет наносить больше урона, чем пользы.

0 голосов
/ 18 октября 2008

Я думаю, что если я сделаю var_dump (), я получу:

string (40) "YWRraM2 =" строка (8) "YWRraM2 ="

выглядит как-то, если я вставляю данные в БД с помощью консоли, это добавляет дополнительный пробел к полю прохода.

myplacedk: есть ли причина, по которой я не должен этого делать? Я думал, что это добавит дополнительный уровень безопасности?

0 голосов
/ 18 октября 2008

Если $ myrow [1] на самом деле правильный пароль в base64-кодировке, я не вижу никаких ошибок.

Попробуйте это в конце:

echo "<br />$myrow[1] != $somepass";

Что это говорит?

И, между прочим: я не вижу смысла кодировать пароли в base64. Что вы пытаетесь достичь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...