За последние 24 часа нас посетили 34760 программистов и 1695 роботов. Сейчас ищут 886 программистов ...

фзломали форму

Тема в разделе "PHP и базы данных", создана пользователем oksana, 24 май 2012.

  1. oksana

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

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    Всем привет у меня проблема =(
    есть форма в нем есть списки select к примеру выбор города
    переменная проходит через
    $city = stripslashes($city);$city= htmlspecialchars($city);$city = mysql_real_escape_string($city);
    и только потом в базу
    но кто то умудрился добавить объявление с городом "где попало"
    как такое возможно и как защититься?
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Насчет списка - не за чем передавать имена городов, можно назначить каждому номер <option value="123">Город</option>, так будет надежней.
    А что значит
    ? Где попало?
     
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    stripslashes обходится. а mysql_real_escape_string надежно, для целочисленных параметров можно intval
    если вы точно знаете, что в базу произошла вставка, значит не в этом месте

    Добавлено спустя 1 минуту 2 секунды:
    htmlspecialchars — LOL. не там и не про то
     
  4. Ke1eth

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

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Если я все правильно понимаю о том, что случилось, то можно скорее всего было сделать так: сохранить html, поправить в селект ручками и жмакнуть submit, ну или firebug.
    YSandro, дело говорит, только я бы еще добавил проверку существования в БД идентификатора перед вставкой.
     
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    oksana,
    Пойми, что любой запрос можно подделать. Вовсе не обязательно отправлять данные в твой php-обработчик именно из твоей формы. К браузерам существуют плагины, в которых можно руками генерировать любые запросы, также средствами php можно создавать запросы к другим сайтам. И если у тебя есть какой-то раскрывающийся список с предустановленным набором значений - это вовсе не значит, что кроме этих значений в твой скрипт больше ничего нельзя отправить. Можно отправить всё, что угодно :) Любую переменную, которая приходит в твой скрипт от пользователя, нужно проверять так, как будто в ней может оказаться совсем не то, что ты ожидаешь :)
     
  6. oksana

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

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    YSandro, в объявлении в место города москва и всех остальных был "где попало" и так далее

    sobachnik, плагин это firebag? а как там генерировать запросы?

    а какие еще существуют функции проверки переменных или дайте ссылку с удовольствием почитаю =)

    Добавлено спустя 1 минуту 47 секунд:
    кстати слышала о какой то защите от подмены формы как ее делают желательно ссылку =)

    Добавлено спустя 21 минуту 46 секунд:
    ну насчет <select> понятно сделаю проверку если не те значения отбой
    а как быть в теге <textaria> ?
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а откуда берутся названия городов, детачка? =)
     
  8. oksana

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

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    ну довольно приметивно
    <option>
    <select>москва</select>
    <select>питер</select>
    <select>таганрог</select>
    </option>

    Добавлено спустя 21 минуту 22 секунды:
    в мозиле нашла функцию изменить select на текстовое поле =( работа на вечер есть
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    отлично.

    никто так не делает. никто не передает города по названию.

    у вас в базе есть таблица городов?
     
  10. oksana

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

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    ну думаю теперь будет
    сделаю запрос с выводом select

    просто я ученик попова и всех тонкостей не знаю (особенно в безопасности) =(

    Добавлено спустя 6 минут 4 секунды:
    А как защитить то что в теге textaria
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а зачем? помещайте в бд через mysql_real_escape_string и усё
    а когда пришлют айдишник города или какой другой целочисленный параметр его можно просто
    Код (PHP):
    1. $city = (int) $city; 
     
  12. oksana

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

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
  13. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Ну да, что защитили, что сломали =)
    Я не пойму зачем у вас включен Magics и столько проверок...
    Вы там, чего делаете?)

    Вы же смотрите, что как работает при обращении объекта к области. =)))
    Если вы работаете с базой то используйте $city = mysql_real_escape_string($city,mysql_connect());

    Если это не с базой, то если включены если ниже 5.4php(нужно воспользоваться get_magic_quotes_gpc() если включены то не нужно addslashes(), так как они уже магией экранируются :) ) get_magic_quotes_gpc() - 5.4.0 Всегда возвращает FALSE, так как функционал магических кавычек удален из PHP.

    Удалите =) и пользуйтесь addslashes где требуется экранирование строк(и).

    А еще лучше, сделайте себе функцию где у вас будут проверяться передаваемые данные, чтобы не писать везде проверки, а только в одном месте написать и чтобы потом это от одного места передавалось (разные данные).
     
  14. oksana

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

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    Your, хороший урок =)
     
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я вобще не понял о чем он =)
     
  16. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    какая разница. главное, что девушка осталась довольна
     
  17. oksana

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

    С нами с:
    16 мар 2012
    Сообщения:
    221
    Симпатии:
    0
    было бы по лучше если подскажите как дорасти до вашего уровня =), к примеру книжечку посоветовать
    один совет усвоила, раньше писала через дримвивер, сказали через notepad ++ , действительно очень не плохо,
    раньше HTML не могла без вивера =)
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    теперь попробуй через netbeans =)