[MySQL][ЗАМЕТКА] Where name ='a' ='b'

Discussion in 'PHP' started by Krist_ALL, 4 Sep 2009.

  1. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    Хочу разъяснить непонятку с name='a'='b'

    Допустим, у нас есть такой запрос:
    PHP:
    SELECT FROM users WHERE name='admin'='a' 
    Давайте посмотрим, как такой запрос обработает mysql:
    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
     
    3 people like this.
  2. cr0w

    cr0w Elder - Старейшина

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    Спасибо за эту темку - весьма интересная фича MySQL'а в плане безопасности. Единственно, не могу не заметить, что ты не очень верно все разьяснил. Смотри:
    Это не так. `name` это название колонки - оно не будет сравниваться со строкой как строка. Будет произведена выборка по условию name ='admin'='a'. Т.е. значения колонки `name` всех строк таблицы будут поочередно проверяться на соответствие этому условию, и они все будут ему соотвтствовать, кроме строки, где name='admin', т.к. выражение 'admin'='admin'='a', собственно, будет возвращать FALSE.
     
    #2 cr0w, 4 Sep 2009
    Last edited: 4 Sep 2009
    1 person likes this.
  3. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    Говоря о name, я подразумевал что вместо наме будет подставляться значение.Я все правильно написал.
    И ты правильно заметил, что where admin=admin=a => false
     
  4. cr0w

    cr0w Elder - Старейшина

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    По-моему, ты все-таки написал не совсем то, что подразумевал. (; Ну да ладно, думаю, кому это интересно будет, тот разберется.

    Вот у меня только возник вопросик: а как в mysql можно настроить такие тонкости преобразования типов ?
     
    2 people like this.
  5. ElteRUS

    ElteRUS Elder - Старейшина

    Joined:
    11 Oct 2007
    Messages:
    367
    Likes Received:
    460
    Reputations:
    93
    Что-то тут такое наворочено не понятно. Лучше б переписал примеры с источника, там не нужно угадывать что подразумевалось

    Между прочим, там упоминается также об именах колонок

    Code:
    select * from mysql.user where password=1    - нету результата (это и понятно)
    select * from mysql.user where password=password=1   – есть результат  
    select * from mysql.user where password=password   – есть результат 
    
    Если авторизация реализована как в той моей задачке, но переменные не обрамляются кавычками в запросе, можно воспользоваться именами столбцов для обхода авторизации (всего лишь как один из возможных вариантов)

    PHP:
    <?php
            $log 
    $_GET['log'];
            
    $pass $_GET['pass'];

                              .   .  .

            
    $query "select * from `admin` where login = $log and password = $pass";

                    
    $result mysql_query($query);

                    if(
    mysql_num_rows($result) > 0)
                    {
                                
    //в админке
                    
    }
    ?>
    Authorization bypass:
    script.php?log=login&pass=password

    (правда нужно знать имена столбцов ^^)
     
    #5 ElteRUS, 5 Sep 2009
    Last edited: 5 Sep 2009
    4 people like this.
Loading...
Similar Threads - MySQL ЗАМЕТКА Where
  1. GAiN
    Replies:
    3
    Views:
    7,938