|
|
|
| Сегодня впервые решил применить функции AES_DE(EN)CRYPT и при первом же прогоне наткнулся на MySQL error в SELECT...WHERE 'имя_столбца_с_шифрованным_паролем'='шифрованный_пароль_из_внешнего_источника'.Приглядевшись,увидел,что шифрованный пароль содержит одинарные кавычки и есссно,база мне популярно объяснила,куда и с какой скоростью мне следует двигаться... | |
|
|
|
|
|
|
|
для: Ralph
(10.07.2007 в 18:52)
| | Каким образом шифрованный пароль вообще учавствует в запросе? Такого быть не должно.
Если хотите делать авторизацию
SELECT * FROM `accounts` WHERE `username` = 'Admin' AND `passwdhash` = AES_ENCRYPT('passwd', 'salt');
|
, где вместо "Admin", "passwd", "salt" Ваши значения.
Помимо прочего поле с шифрованным паролем должно быть BLOB. Ну или tinyblob. В зависимости от того, какой длины пароль разрешаете ставить пользователю.
А для того, чтобы все-таки впихнуть хеш в запрос нужно экранировать спец. символы функцией mysql_escape_string(). | |
|
|
|
|
|
|
|
для: Unkind
(10.07.2007 в 19:21)
| | Собственно,вопрос в чем:как правильно написать запрос поиска по таблице-SELECT ... WHERE QUOTE(имя_столбца_с_шифрованным_паролем)='эскапированный_шифрованный_пароль_извне' или просто WHERE имя...лем='эска...вне'???
To Unkind:все просто-при прямой авторизации базара нет,берется чистый пароль,обработанный preg,но в данном случае-ситуация,когда утеряна сессия и пароль берется из кук,а согласитесь,хранить нешифрованный пароль в куках-это... | |
|
|
|
|
|
|
|
для: Ralph
(10.07.2007 в 19:54)
| | Черт,поймите меня правильно,просто я начинал с Ассемблера,где все на уровне бит/байтовых операциях и где я контролировал ВСЕ,а здесь каждая функция как хочет,так и ...поступает :((( | |
|
|
|
|
|
|
|
для: Ralph
(10.07.2007 в 19:54)
| | Если сессия утеряна, то что Вы еще хотите делать?
Вы хотите бинарные данные хранить в cookies?
Зачем Вы пытаетесь экранировать ИМЯ СТОЛБЦА?
Вы видели мой совет насчет mysql_escape_string()?
MySQL-функция QUOTE() не может использоваться в данном случае, так как это MySQL-функция и она требует, как это не парадоксально экранированные данные в кач-ве аргумента. | |
|
|
|
|
|
|
|
для: Unkind
(10.07.2007 в 21:26)
| | Сразу хочу сказать,если мой алгоритм кажется в чем то неверным,то это потому,что переделываю один двиг,и далеко отступать от духа оригинала Заратустра не позволяет :) Если сессия утеряна, то что Вы еще хотите делать?-замысел творца:три куки- PHPSESSID,login,pass(шифрованный).Если сессия активна,работаем с массивом _SESSION,иначе инициализируем новую,заполняя массив _SESSION данными из БД,используя login и pass Вы хотите бинарные данные хранить в cookies? -данные в них хранятся base64_encode | |
|
|
|
|
|
|
|
для: Ralph
(11.07.2007 в 04:09)
| | Зачем Вы пытаетесь экранировать ИМЯ СТОЛБЦА?
-извините,не понял,если я напишу WHERE MD5(mypass)='pass',разве я буду хэшировать ИМЯ столбца,а не его содержимое ??? Помимо прочего поле с шифрованным паролем должно быть BLOB. Ну или tinyblob.-вот за это спасибо,протупил и хранил в char,и если один из крайних символов пробельный-трындец паролю :) | |
|
|
|
|
|
|
|
для: Ralph
(11.07.2007 в 04:26)
| | Вы видели мой совет насчет mysql_escape_string ()?
-не только видел,но и всегда его использую,и не обязательно именно эту функцию.Вот с этим мой первоначальный вопрос и возник...В условии WHERE encoding_pass='escaping_pass_from_cookies' справа экранированные данные,а слева обработанные функцией AES_ENCRYPT,то есть неэкранированные.Как в таком случае выполнить корректное сравнение ? | |
|
|
|
|
|
|
|
для: Unkind
(10.07.2007 в 21:26)
| | MySQL-функция QUOTE() не может использоваться в данном случае, так как это MySQL- функция и она требует, как это не парадоксально экранированные данные в кач-ве аргумента.
-а вот с этого момента пожалуйста поподробнее...Какой же тогда смысл этой функции ? Я думал,она как раз и экранирует внутри запроса | |
|
|
|
|
|
|
|
для: Ralph
(11.07.2007 в 04:41)
| | Экранируют данные для того, чтобы они были корректно обработаны, а не для того, чтобы все усложнять.
Если Вы записываете в БД \', то в базу попадет только одинарная кавычка.
Нужно сравнивать оригинальные данные, а не экранированные. | |
|
|
|