За последние 24 часа нас посетили 18333 программиста и 1606 роботов. Сейчас ищут 1267 программистов ...

Есть ли дыры в скрипте

Тема в разделе "Вопросы от блондинок", создана пользователем Klin, 29 июл 2008.

  1. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Dagdamor
    а "--"? :)
    или /* :)

    надо юзать то, что предоставляет интерфейс самой базы, а не юзать самопал. не имхо :)
     
  2. Anonymous

    Anonymous Guest

    могут. settings-dependent
     
  3. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Dagdamor
    во-во! Начнем с того, хотя бы, что для использования mysql_escape_string нужно уже установить соединение с базой. Да и писать название этой функции дольше ;).

    Klin, если уж так хочешь, раскомментируй тут mysql_real_escape_string и закомментируй addslashes.
     
  4. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    antonn
    Внутри строки? o_O

    Горбунов Олег
    Пример инъекции, обходящей addslashes(), в студию.
     
  5. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Dagdamor
    строка - набор символов.
    от юзера пришли данные в виде строки, в ней может быть все что угодно. эти данные используются в запросе (ну например логин осуществляется). не понимаю удивления
     
  6. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    antonn
    Раз не понимаешь, тогда тот же вопрос, что и к Олегу. Приведи пример работающей SQL-инъекции для данных, обработанных addslashes() перед подстановкой в запрос:

    PHP:
    1. <?php
    2.  
    3. $string="Что угодно"; // Здесь можете написать все, что хотите
    4. $escaped=addslashes($string);
    5. $query="SELECT * FROM mytable WHERE strfield='$escaped'";
    6. mysql_query($query); // Здесь должна быть инъекция
     
  7. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Код (Text):
    1. $user_val="0 UPDATE fusion_users SET user_level=100 WHERE user_id=1--";
    2. $user_val=addslashes($user_val);
    3. $text="SELECT * FROM users WHERE user_id=$user_val and user_level=101";
    4.  
    5. echo $text;
    ?
     
  8. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    antonn
    А обрамлять одинарными кавычками переменную кто будет? Смотри мой шаблон внимательнее.
    Подставлять переменную в запрос НЕ в контексте строки, без предварительного жесткого приведения к целочисленному или плавающему типу - самоубийство. Тут тебя никакой mysql_real_escape_string не спасет.
     
  9. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    когда появится набор символов означающий нечто непредвиденное сейчас - кто с addslashes будет впухать? :)

    ЗЫ я запостил когда твоего поста не видел.
     
  10. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    antonn
    Если такое случится - mysql_real_escape_string нагнется с тем же успехом, ведь эта функция не приводит к дополнительному запросу к SQL серверу, она, как и addslashes, отрабатывает локально, в контексте процесса PHP, и о будущих изменениях в парсере MySQL она знать никак не может.
    Да и сомневаюсь я, что парсер запросов будут менять на таком низком уровне, на уровне парсинга строк. Такую поломку BC можно только спьяну устроить...
     
  11. Anonymous

    Anonymous Guest

    может, ибо завязана на libmysql.dll, который, должен братся от установленной версии Мускула, если вебсервер корректно настроен.
     
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Все функции, начинающиеся с mysql_ берутся из мускульной библиотеки, и точно так же все функции для работы с разными подключаемыми модулями.
     
  13. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Для китайцев :)

    PHP:
    1. <?php
    2. $str = "\xbf\x27 OR 1=1 LIMIT 10/*";
    3.  
    4. mysql_connect('localhost', 'root', '');
    5.  
    6. mysql_query('SET NAMES \'GBK\'');
    7. $query = 'SELECT * FROM items WHERE item_id=\'' . addslashes($str) . '\'';
    8.  
    9. $res = mysql_query($query) or die(mysql_error());
    10.  
    11. while ($row = mysql_fetch_assoc($res)) {
    12.     print_r($row);
    13. }
    Сам факт этой ошибки хоть на китайской кодировке уже против этой функции.
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    есть ещё и XSS кстати ;)
     
  15. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Просто ты избавишся сразу от 2 атак, SQL инекции и XSS
     
  16. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Ну да. От XSS в SQL запросе %)
     
  17. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Ыы понял что сморозил глупость =)))
    ну и что, вдруг бы там было INSERT INTO :)