Всем привет у меня проблема =( есть форма в нем есть списки select к примеру выбор города переменная проходит через $city = stripslashes($city);$city= htmlspecialchars($city);$city = mysql_real_escape_string($city); и только потом в базу но кто то умудрился добавить объявление с городом "где попало" как такое возможно и как защититься?
Насчет списка - не за чем передавать имена городов, можно назначить каждому номер <option value="123">Город</option>, так будет надежней. А что значит ? Где попало?
stripslashes обходится. а mysql_real_escape_string надежно, для целочисленных параметров можно intval если вы точно знаете, что в базу произошла вставка, значит не в этом месте Добавлено спустя 1 минуту 2 секунды: htmlspecialchars — LOL. не там и не про то
Если я все правильно понимаю о том, что случилось, то можно скорее всего было сделать так: сохранить html, поправить в селект ручками и жмакнуть submit, ну или firebug. YSandro, дело говорит, только я бы еще добавил проверку существования в БД идентификатора перед вставкой.
oksana, Пойми, что любой запрос можно подделать. Вовсе не обязательно отправлять данные в твой php-обработчик именно из твоей формы. К браузерам существуют плагины, в которых можно руками генерировать любые запросы, также средствами php можно создавать запросы к другим сайтам. И если у тебя есть какой-то раскрывающийся список с предустановленным набором значений - это вовсе не значит, что кроме этих значений в твой скрипт больше ничего нельзя отправить. Можно отправить всё, что угодно Любую переменную, которая приходит в твой скрипт от пользователя, нужно проверять так, как будто в ней может оказаться совсем не то, что ты ожидаешь
YSandro, в объявлении в место города москва и всех остальных был "где попало" и так далее sobachnik, плагин это firebag? а как там генерировать запросы? а какие еще существуют функции проверки переменных или дайте ссылку с удовольствием почитаю =) Добавлено спустя 1 минуту 47 секунд: кстати слышала о какой то защите от подмены формы как ее делают желательно ссылку =) Добавлено спустя 21 минуту 46 секунд: ну насчет <select> понятно сделаю проверку если не те значения отбой а как быть в теге <textaria> ?
ну довольно приметивно <option> <select>москва</select> <select>питер</select> <select>таганрог</select> </option> Добавлено спустя 21 минуту 22 секунды: в мозиле нашла функцию изменить select на текстовое поле =( работа на вечер есть
отлично. никто так не делает. никто не передает города по названию. у вас в базе есть таблица городов?
ну думаю теперь будет сделаю запрос с выводом select просто я ученик попова и всех тонкостей не знаю (особенно в безопасности) =( Добавлено спустя 6 минут 4 секунды: А как защитить то что в теге textaria
а зачем? помещайте в бд через mysql_real_escape_string и усё а когда пришлют айдишник города или какой другой целочисленный параметр его можно просто Код (PHP): $city = (int) $city;
Ну да, что защитили, что сломали =) Я не пойму зачем у вас включен 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 где требуется экранирование строк(и). А еще лучше, сделайте себе функцию где у вас будут проверяться передаваемые данные, чтобы не писать везде проверки, а только в одном месте написать и чтобы потом это от одного места передавалось (разные данные).
было бы по лучше если подскажите как дорасти до вашего уровня =), к примеру книжечку посоветовать один совет усвоила, раньше писала через дримвивер, сказали через notepad ++ , действительно очень не плохо, раньше HTML не могла без вивера =)