За последние 24 часа нас посетили 17804 программиста и 1649 роботов. Сейчас ищет 921 программист ...

sql иньекции

Тема в разделе "PHP для новичков", создана пользователем KFan, 29 июл 2011.

  1. KFan

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

    С нами с:
    22 июл 2011
    Сообщения:
    11
    Симпатии:
    0
    как от них защититься? mysql_real_escape_string все время бьет ошибку...

    жду подсказок о защита от иньекций
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    какую нахрен ошибку он может бить?
     
  3. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    ты сначала с БД соединись, а потом вызывай Mysql_real_escape_string
     
  4. KFan

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

    С нами с:
    22 июл 2011
    Сообщения:
    11
    Симпатии:
    0
    незнаю, в этот раз пытался ее вывести она не выходит...

    но все таки, это не совершенный способ... есть какой то более надежный способ?
     
  5. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Объясни
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Для строк:
    PHP:
    1. <?php
    2. function myescape($str = '', $db = false) {
    3.         $str = stripslashes($str);
    4.     $str = $db ? mysql_real_escape_string($str, $db) : mysql_escape_string($str);
    5.     return($str);
    6. }
    7. $str = myescape($str, $db);
    8. $sql = "INSERT INTO `table_name` (`field_name`) VALUES ('{$str}')";
    Для чисел:
    PHP:
    1. <?php
    2. $num = (int) $num;
    3. $sql = "INSERT INTO `table_name` (`field_name`) VALUES ({$num})";
     
  7. KFan

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

    С нами с:
    22 июл 2011
    Сообщения:
    11
    Симпатии:
    0
    более хорошие способы естьф защиты?
     
  8. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
  9. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    не забывай не доверять всем данным если будешь юзать ajax , я тут уже нахакал несколько таких. человек думает что если он в js выставил значение , то его нельзя изменить =D
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    KFan
    Не знаю, чем тебе не нравится mysql_real_escape_string(), но можешь использовать mysqli и делать параметризированные запросы.
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Забейте на MySQL и переходите на MySQLi или PDO, кончайте мирмекофилией промышлять... Вы бы ещё на РНР3 писать стали...
     
  12. alexfer

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

    С нами с:
    2 авг 2010
    Сообщения:
    239
    Симпатии:
    0
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    alexfer
    это другая функция. =)
     
  14. alexfer

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

    С нами с:
    2 авг 2010
    Сообщения:
    239
    Симпатии:
    0
    igordata
    не я выдернул ее из бредофункции несколькими постами выше.
    PDO рулит..
     
  15. KFan

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

    С нами с:
    22 июл 2011
    Сообщения:
    11
    Симпатии:
    0
    а разницы между ними? я раньше специализировался только на серверах ла2 а там работа ведеться только с мускулом
     
  16. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    MySQLi - это не сервер баз данных, сама субд будет таже самая MySQL. MySQLi
     
  17. rainarr

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

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    прямо сердце кровю перелилось, разве тут есть возможность сломать? :)
     
  18. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    я скорей разведу автора на логин/пароль от фтп , чем найду способ как обойти =D
     
  19. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    rainarr
    Хороший способ это не тот который не сломать. Способ вообще стереть весь код и уйти в монастырь тоже работает безотказно, но лучше ли этот способ ?
     
  20. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    По поводу моей бредофункции - согласен, что это устаревшее, но оно успешно работает и там в четырёх строчках учтена возможно вкюченная директива magic quotes, и также функция корректно отработает независимо от того, была она вызвана ДО установления соединения с б.д. или после.
    Сейчас всё чаще приходится пользоваться mysqli - в ТЗ по разрабатываемым сайтам начали часто выдвигать требование - только параметризированные запросы к б.д. Наверно, это хорошо, но на самом деле если чел способен проконтроллировать абсолютно элементарные вещи, то ничего плохого в стареньком mysql_query() я не вижу. А по поводу скорости... очень сомневаюсь что ДВЕ отправки данных серверу (сперва сама конструкция запроса, потом - данные) сработают быстрее, чем если отправить сразу запрос с подставленными данными.
    Возможно я не прав. Самоучка всё-таки :)
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    sobachnik
    это функция для чайников, кто не вкурсе что у него на сервере включено и как =)
     
  22. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    igordata
    Ну я бы не сказал. Тут какое дело - когда пишется сайт, не всегда заранее известно, где он будет работать. Конечно предполагается, но 100% гарантии нет. Я всегда стараюсь писать такой код, чтобы он работал независимо не только от настроек php, но и даже от ОС сервера - чтобы оно одинаково верно работало и на виндовом и на unix/linux и на Mac - серверах.
    Конкретно приведенная выше функция даёт мне уверенность, что данные будут правильно эскейпиться независимо от magic quotes. Хотя, как я писал только что где-то рядом, в последнее время всё реже приходится работать с таким привычным и нравящимся мне mysql_...()
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    sobachnik
    хз. проще настройки сменить, чем с кодом извращаться =)
     
  24. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
  25. rainarr

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

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    ого, это думаю стоит целой темы.