webew
Войти » Регистрация
 
MySQL/MariaDB
PHP :: безопасность

PASSWORD() - что это такое и "стоит ли оно того"?

30 ноября 2008, 23:44
Автор: FreeOwl
Приветствую!

Собственно вопрос сформулирован в теме. Но хотелось бы немного расширить, что это за функция понятно из описания, хочу уточнить, какой формат следует указывать в базе и какой размер? Из примеров взятых в сети, я установил тип VARCHAR [32]. Есть ли чёткое описание для этой функции?

И ещё, как средство для хранения пароля пользователя в базе, стоит ли вообще с этим "заморачиваться"?

Сорри, если вопрос покажется вам "смешным", я пытаюсь самостоятельно изучить PHP и MySQL, выполня конкретную задачу :) вот и возникают вопросы...
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
NO USERPIC

rgbeast

Неразумно хранить пароли в базе в открытом виде. Если база попадется кому-то на глаза, то он увидит все пароли. Поэтому хранят хэш. Какой именно хэш - не так важно, но конечно лучше надежный, современный и.т.д. Рекомендую функцию sha1(). Она хорошо всем известна и определена в разных языках - длина хэша фиксированная - 40 символов. Раньше использовали md5(), но оказалось, что математичски это не очень надежный хэш.

PASSWORD() - функция, используемая для хранения паролей в таблице mysql.user самим mysql. Так как она не описана (конечно ее алгорит известен гикам), то не рекомендую ее использовать в своих приложения. Все равно password основана на sha1 или md5 или чем-то подобном.
01.12.2008, 00:27
Ответить
NO USERPIC

FreeOwl

Спасибо за весьма исчерпывающий ответ.
Подскажите пожалуйста, в описании функции написано
Возвращаемая величина представляет собой 40-разрядное шестнадцатеричное число
, я правильно понимаю, что можно использовать тот же CHAR размером в 40 символов?
01.12.2008, 22:19
Ответить
NO USERPIC

rgbeast

Да, CHAR(40) вполне адекватный для этого тип.
01.12.2008, 23:13
Ответить
NO USERPIC

FreeOwl

помогите ещё раз. Помогите понять где я ошибся:
код:
$password = sha1($_POST['txtPassword']);
// выбрать все поля из таблицы пользователей для записи с паролем $password
$sql = "SELECT * FROM cartella_clinica_user WHERE user_pass = $password";
$result = mysql_query($sql)
or die('Query failed. ' . mysql_error());

результат:
Query failed. Unknown column 'd033e22ae348aeb5660fc2140aec35850c4da997' in 'where clause'

таблица:
$query = "create table cartella_clinica_user (id int(7) primary key auto_increment,
pref VARCHAR(15), nome VARCHAR(30), cognome VARCHAR(30), dolj VARCHAR(50),
otd VARCHAR(50), tel_dom VARCHAR(15), tel_off VARCHAR(15), tel_mob VARCHAR(15),
path_foto VARCHAR(30), status VARCHAR(1), user_lang VARCHAR(3), user_pass CHAR(40))";
02.12.2008, 15:29
Ответить
NO USERPIC

FreeOwl

спасибо, разобрался, невнимательность всему виной. Было $sql = "SELECT * FROM cartella_clinica_user WHERE user_pass = $password" стало $sql = "SELECT * FROM cartella_clinica_user WHERE user_pass = '$password'";
02.12.2008, 16:50
Ответить
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100