Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: AES_CRYPT
 
 автор: Ralph   (10.07.2007 в 18:52)   письмо автору
 
 

Сегодня впервые решил применить функции AES_DE(EN)CRYPT и при первом же прогоне наткнулся на MySQL error в SELECT...WHERE 'имя_столбца_с_шифрованным_паролем'='шифрованный_пароль_из_внешнего_источника'.Приглядевшись,увидел,что шифрованный пароль содержит одинарные кавычки и есссно,база мне популярно объяснила,куда и с какой скоростью мне следует двигаться...

   
 
 автор: Unkind   (10.07.2007 в 19:21)   письмо автору
 
   для: 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().

   
 
 автор: Ralph   (10.07.2007 в 19:54)   письмо автору
 
   для: Unkind   (10.07.2007 в 19:21)
 

Собственно,вопрос в чем:как правильно написать запрос поиска по таблице-SELECT ... WHERE QUOTE(имя_столбца_с_шифрованным_паролем)='эскапированный_шифрованный_пароль_извне' или просто WHERE имя...лем='эска...вне'???

To Unkind:все просто-при прямой авторизации базара нет,берется чистый пароль,обработанный preg,но в данном случае-ситуация,когда утеряна сессия и пароль берется из кук,а согласитесь,хранить нешифрованный пароль в куках-это...

   
 
 автор: Ralph   (10.07.2007 в 20:01)   письмо автору
 
   для: Ralph   (10.07.2007 в 19:54)
 

Черт,поймите меня правильно,просто я начинал с Ассемблера,где все на уровне бит/байтовых операциях и где я контролировал ВСЕ,а здесь каждая функция как хочет,так и ...поступает :(((

   
 
 автор: Unkind   (10.07.2007 в 21:26)   письмо автору
 
   для: Ralph   (10.07.2007 в 19:54)
 

Если сессия утеряна, то что Вы еще хотите делать?
Вы хотите бинарные данные хранить в cookies?
Зачем Вы пытаетесь экранировать ИМЯ СТОЛБЦА?
Вы видели мой совет насчет mysql_escape_string()?

MySQL-функция QUOTE() не может использоваться в данном случае, так как это MySQL-функция и она требует, как это не парадоксально экранированные данные в кач-ве аргумента.

   
 
 автор: Ralph   (11.07.2007 в 04:09)   письмо автору
 
   для: Unkind   (10.07.2007 в 21:26)
 

Сразу хочу сказать,если мой алгоритм кажется в чем то неверным,то это потому,что переделываю один двиг,и далеко отступать от духа оригинала Заратустра не позволяет :) Если сессия утеряна, то что Вы еще хотите делать?-замысел творца:три куки- PHPSESSID,login,pass(шифрованный).Если сессия активна,работаем с массивом _SESSION,иначе инициализируем новую,заполняя массив _SESSION данными из БД,используя login и pass Вы хотите бинарные данные хранить в cookies? -данные в них хранятся base64_encode

   
 
 автор: Ralph   (11.07.2007 в 04:26)   письмо автору
 
   для: Ralph   (11.07.2007 в 04:09)
 

Зачем Вы пытаетесь экранировать ИМЯ СТОЛБЦА?
-извините,не понял,если я напишу WHERE MD5(mypass)='pass',разве я буду хэшировать ИМЯ столбца,а не его содержимое ??? Помимо прочего поле с шифрованным паролем должно быть BLOB. Ну или tinyblob.-вот за это спасибо,протупил и хранил в char,и если один из крайних символов пробельный-трындец паролю :)

   
 
 автор: Ralph   (11.07.2007 в 04:36)   письмо автору
 
   для: Ralph   (11.07.2007 в 04:26)
 

Вы видели мой совет насчет mysql_escape_string ()?
-не только видел,но и всегда его использую,и не обязательно именно эту функцию.Вот с этим мой первоначальный вопрос и возник...В условии WHERE encoding_pass='escaping_pass_from_cookies' справа экранированные данные,а слева обработанные функцией AES_ENCRYPT,то есть неэкранированные.Как в таком случае выполнить корректное сравнение ?

   
 
 автор: Ralph   (11.07.2007 в 04:41)   письмо автору
 
   для: Unkind   (10.07.2007 в 21:26)
 

MySQL-функция QUOTE() не может использоваться в данном случае, так как это MySQL- функция и она требует, как это не парадоксально экранированные данные в кач-ве аргумента.
-а вот с этого момента пожалуйста поподробнее...Какой же тогда смысл этой функции ? Я думал,она как раз и экранирует внутри запроса

   
 
 автор: Unkind   (11.07.2007 в 06:11)   письмо автору
 
   для: Ralph   (11.07.2007 в 04:41)
 

Экранируют данные для того, чтобы они были корректно обработаны, а не для того, чтобы все усложнять.
Если Вы записываете в БД \', то в базу попадет только одинарная кавычка.
Нужно сравнивать оригинальные данные, а не экранированные.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования