![]() |
[MySQL][ЗАМЕТКА] Where name ='a' ='b'
Хочу разъяснить непонятку с name='a'='b'
Допустим, у нас есть такой запрос: PHP код:
1. name ='admin'='a' разбирается как ('name'='admin')='a' 2. Идет сравнение 'name' и 'admin'. Эти строки не равны => результат 0 3. Идет сравнение 0 и 'с'. Разные типы данных. Булевой и стринг. Происходит преобразование типа стринг в булен и 'с' превращается в 0 4. 0 =0 => 1 => TRUE Замечания: 1. Mysql должен быть настроен на преобразование типов 2. Mysql должен быть настроен так, чтобы при сравнении 'а' и 'с' получалось 0, а не false, потому что если скобка даст false, тогда 'с' будет преобразовано в true => false != true => return 0 Источник: http://bugs.mysql.com/bug.php?id=39337 |
Спасибо за эту темку - весьма интересная фича MySQL'а в плане безопасности. Единственно, не могу не заметить, что ты не очень верно все разьяснил. Смотри:
Цитата:
|
Говоря о name, я подразумевал что вместо наме будет подставляться значение.Я все правильно написал.
И ты правильно заметил, что where admin=admin=a => false |
По-моему, ты все-таки написал не совсем то, что подразумевал. (; Ну да ладно, думаю, кому это интересно будет, тот разберется.
Вот у меня только возник вопросик: а как в mysql можно настроить такие тонкости преобразования типов ? |
Цитата:
Между прочим, там упоминается также об именах колонок Код:
select * from mysql.user where password=1 - нету результата (это и понятно)PHP код:
script.php?log=login&pass=password (правда нужно знать имена столбцов ^^) |
| Время: 23:32 |