Кодировка MYSQL и уязвимость запроса

Discussion in 'PHP' started by Apeckou, 4 Jan 2012.

  1. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    Здравствуйте, у меня два вопроса

    Сделал поиск по ключевому слову в таблице у себя на сайте, запрос ввожу как
    SELECT fname WHERE ftext LIKE '%$word%';

    Вопрос первый: достаточно ли сделать
    str_replace('"','',$word);
    str_replace("'','',$word);
    (то есть убрать все одинарные и двойные кавычки чтобы закрыть уязвимости к инжектам?

    Вопрос второй: когда юзаю вышеописанный поиск по латинским словам - все ровно. А когда вписываю, например, "Ы", то он находит совершенно рандомные файлы в которых этой буквы естественно нет.
    Что делать? Менять кодировку? На сайте у меня все файлы сохранены в ANSI, в хедерах прописываю charset win-1251. Придется все в УТФ перегонять?

    Кодировка в мускуле настроена следующим образом:


    PHP:
    mysqlshow variables like 'char%';
    +--------------------------+----------------------------+
    Variable_name            Value                      |
    +--------------------------+----------------------------+
    character_set_client     latin1                     |
    character_set_connection latin1                     |
    character_set_database   latin1                     |
    character_set_filesystem binary                     |
    character_set_results    latin1                     |
    character_set_server     latin1                     |
    character_set_system     utf8                       |
    character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)
    Когда через putty делаю выборку - та же херня получается. Т.К. русский текст выдается в виде щЙЯРПЕЛЮКЭМШЕ_яХРСЮЖХХ_б
     
    #1 Apeckou, 4 Jan 2012
    Last edited: 4 Jan 2012
  2. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    на счёт путти, тут дело в самом путти, в настройках кодировку ковырять нужно. а по поводу фильтрации - это велосипед, а не фильтрация. mysql_real_escape_string есть для этого.
     
  3. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    mysql_real_escape_string, совсем забыл про нее
    но или я тупой, или оно не хочет работать
    делаю так
    $word=mysql_real_escape_string($word);

    возвращает всегда пустоту =(
     
    #3 Apeckou, 4 Jan 2012
    Last edited: 4 Jan 2012
  4. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    не верю. покажите больше кода. показ нотисов включен?
     
  5. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    PHP:
    <?php

    $wordstr
    ="abcdef";
    $wordstr=substr($wordstr,0,100);
    $wordstr=str_replace("'",'',$wordstr);
    $wordstr=str_replace('"','',$wordstr);
    $wordstr=str_replace('  ',' ',$wordstr);
    $wordstr=mysql_real_escape_string($wordstr);
    echo(
    $wordstr);

    ?>
    возвращает пустоту. а если закоментить строку - то норм
     
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Apeckou Для работы функции mysql_real_escape_string:
     
    _________________________
  7. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    опа...а я и не знал...пасиба
     
Loading...
Similar Threads - Кодировка MYSQL уязвимость
  1. Kruzak
    Replies:
    4
    Views:
    2,380
  2. heks
    Replies:
    8
    Views:
    1,768
  3. Alekzzzander
    Replies:
    10
    Views:
    2,480
  4. hakky13
    Replies:
    1
    Views:
    1,800