![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
anurbol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 30.5.2007 Где: Алматы, Казахстан Репутация: нет Всего: нет |
К сожалению не нашел в нете подробно об этом.
Знаю что \ и ' а недавно заинтересовало, является ли } (фигурная скобка) опасным символом? Просто в моем движке он никак не экранируется/кодируется, а ведь есть запросы типа
И вообще какие еще символы нужно преобразовывать? Это сообщение отредактировал(а) anurbol - 10.5.2010, 15:12 |
|||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: нет Всего: 1 |
Опасных символов нет вообще. Ты правда считаешь, что это вопрос "для профи"?
|
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
любой символ - это набор байт, которые не имеют между собой никакой разницы. было бы по меньшей мере странно, если бы определённую комбинацию байт можно было бы хранить в БД, а другую нет. ущербная база получается
вся опасность возникает при составлении запроса, в котором присуствуют управляющие конструкции, такие как кавычки и прочее. кавычки к примеру отделяют блок данных от блока sql-кода, поэтому строка, содержащая и то и другое (самый обычный запрос) легко может быть переразбита в другое соотношение кода и данных, достаточно ввести лишних кавычек в блоке данных чтобы этого не происходило было введено простое правило экранирования служебных символов. (служебных, а не опасных!). а чтобы лень программиста вообще ничем не тревожить были придуманы методы экранировки то что называется in one click, в данном случае в одну функцию. достаточно пропустить данные через mysql_real_escape_string($data); и всё заэкранируется где надо и как надо |
|||
|
||||
anurbol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 30.5.2007 Где: Алматы, Казахстан Репутация: нет Всего: нет |
про mysql_real_escape_string знаю давно, но мой использует не его, а просто во всех входящих $POST данных, ' и & перерабатывает в html сущности. Просто как бы хотел поинтересоваться у профи, является ли { опасным (служебным если хотите) символом, mysql_real_escape_string его не обрабатывает.
Добавлено через 1 минуту и 2 секунды просто где то давно об этом прочитал мимолетом, не обратил внимание, не знаю может то было просто мнение какого нибудь дилетанта на форуме. |
|||
|
||||
LeoK |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 14.12.2007 Где: Moscow Репутация: нет Всего: нет |
||||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: нет Всего: 1 |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
конечно, задать вопрос - "зачем?", бессмысленно? сам посуди - пользователь вводил некий текст, который содержал кавычки. ты его переписываешь в хтмл-сущности. ладно, для отображения в некоем хтмл-теле страницы оно сойдёт. но если был ввод шаблона поиска? или данные в последствии будут отданы в качестве ленты куда-то ещё? к примеру, человек вводит ... ООО "ГлавСтрой" .... ты его преобразуешь в ООО "e;Главстрой, найдёт ли пользователь поиском этот текст? тогда какие вопросы, если ты знаешь, что она экранирует все служебные символы? или может быть не знаешь? |
|||
|
||||
anurbol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 30.5.2007 Где: Алматы, Казахстан Репутация: нет Всего: нет |
Спасибо, что прояснили ситуацию, а насчет поиска, можно делать htmlspecialchars_decode и все.
|
|||
|
||||
SickFxck |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 16.4.2010 Репутация: нет Всего: 1 |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
наверное, всё-таки методика розг в учебных заведениях прошлого имеет определённый смысл. ведь в данном случае уже исчерпаны все варианты без мата
и что я сегодня такой добрый? |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 9 Всего: 401 |
anurbol, у языка SQL, как и языка HTML, есть свои правила. Которые нужно соблюдать при работе с этими языками. Нет общих правил "на все случаи жизни", которыми можно разом "заткнуть все дыры и там, и там".
Аналогия IRL: перед едой принято мыть руки с мылом, перед походом в театр принято чистить ботинки обувным кремом. Как выглядит человек, трущий руки смесью мыла с обувным кремом ("чтобы пойти в театр, а там поесть") - нелепо, правда? Но именно так выглядит со стороны "преобразование спецсимволов HTML в сущности во всех входящих данных", особенно если это позиционируется как "защита от иньекций" (к которым оно никаким боком). Настоятельная просьба внимательно и вдумчиво прочитать PHP FAQ: \"Кавычки \". Cоставление запросов, слеши, SQL Injection. От начала до конца. -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
anurbol |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 30.5.2007 Где: Алматы, Казахстан Репутация: нет Всего: нет |
о боже, какой я идиот... простите я видимо очень спать хотел и как то ляпнул не то ![]() Конечно обидно, то что вы пишете, но все же моя цель - получить помощь а не спорить поэтому собственно прошу у вас помощи поправить в моем движке то что нужно. Дело в том что движок не мой, движок платный. В файле header.php (который подключается к абсолютно всем файлам) есть следующяя обработка
Ну а вот собственно сама функция.
Так вот, встает вопрос, неужели этого недостаточно, и все равно надо использовать mysql_real_escape_string() ? Раньше кстати я и обрабатывал все данные с ее помощью, а числовые с помощью intval или даже round(floatval($var),4) Но тогда я не видел что у меня в хедере есть функция security(), а когда увидел, решил нигде не обрабатывать с помощью mysql_real_escape_string. Помогите!! Где я не прав?? Добавлено через 13 минут и 14 секунд может просто
переделать в
и все?? Это сообщение отредактировал(а) anurbol - 11.5.2010, 14:33 |
||||||||||
|
|||||||||||
bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
эта функция написана человеком не понимающим смысла обработки данных для вставки в БД. к сожалению, таких на пхп большинство, а то что они пишут большие проекты - ничего не значит.
единственное, что имеет смысл делать на входе - инициализировать необходимые переменные, причём только те, что нужны то есть в примитивном идеале, обработка выглядит так:
всё, ничего больше на входе с переменными происходить не должно. в итоге ты точно будешь знать, что у тебя есть переменная $_REQUEST['some_var'], которая не будет случайно отсутствовать в коде или иметь не ожидаемый тип а вставка данных в БД - это уже совсем другая история, и обычно она делается точно также. то есть не всё подряд прогоняется в непонятные кодировки, а автоматизируется необходимый процесс обработки:
|
||||
|
|||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 9 Всего: 401 |
1) В нежелании разобраться, что делает и для чего нужна ф-ция mysql_real_escape_string, а что и для чего - htmlspecialchars; 2) В нежелании внимательно прочитать ссылку. -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
LeoK |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 14.12.2007 Где: Moscow Репутация: нет Всего: нет |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
||||
|
||||
Muerto |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
mysql_real_escape_string супер не надежный
*Sorry for english, not at home... if you have a website where you echo the $data from you fetched from your DB, you will have a problem! For example: try to send something like
you will do
You won't get any errors, just and alert message if you dare to echo it
result: popup message = alert... cause of this you need a filters, you cant work only with mysql_real_escape_string, I personaly don tsee any point in this function... maybe to filter key words... Это сообщение отредактировал(а) Muerto - 10.7.2010, 11:43 |
||||||
|
|||||||
enoff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 30.6.2010 Где: Санкт-Петербург Репутация: нет Всего: 13 |
и в каком месте он ненадежный? Добавление в базу данных проходит без ошибок, а вывод в браузер уже другая история - htmlspecialchars() |
|||
|
||||
Muerto |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
и ты допустим в скрипте блога будеш каждый раз фильтровать by htmlspecialchars?
если вы поиска боитесь лучше запрос поиска пропустите через ту же функцию, имхо так умней а intval / (int) как фильтр чисел, оч плох what if my passport number is 4743756475647? |
|||
|
||||
enoff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 30.6.2010 Где: Санкт-Петербург Репутация: нет Всего: 13 |
да буду. потому что в базе будет храниться именно то, что ввел пользователь. Потом может понадобиться экспорт бд, перемещение на другой движок и т.д. применять htmlspecialchars перед выводом - общепринято, так умнее, и не имхо. вы где живете? ctype_digit(), регулярные выражения не помогут? |
|||
|
||||
bars80080 |
|
||||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
или, если мне важна скорость, но не имеет значения объём БД, буду хранить два варианта. оригинал для правок и преобразованную версию для отдачи пользователю
слово "умней" не очень подходит для совершения делов без понимания чего ты хочешь добиться и чего делают те или иные функции
intval хорош, если ты хочешь привести число к формату int(11), оно для этого и существует. если ты хочешь привести число к другому формату, то есть другие функции |
||||||
|
|||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
если настолько важна скорость, что htmlspecialchars стало узким местом, то уже давно должна быть реализована кеширование сформированных кусков страницы целиком. ибо на фоне работы с базой данных, файлами, сетью, htmlspecialchars - совсем незаметное проишествие.
|
|||
|
||||
Muerto |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
я тестировал mysql_real_escape_string и уже писал чем закончилось дело...
но все же - как его стоит использовать?
а почему нет аналога mysql_real_escape_string но просто функция? которую я смогу применять без открытого подключения? и ещё: предположим я хочу хранить адреса! http://mysql.com/?r=3&b=6&v=7 after htmlspecialchars http://mysql.com/?r=3&b=6&v=7 и такое браузер не поймет если перейдем на ссылку! а если не фильтровать то нам хсс инджекшен запихнут! |
|||
|
||||
bars80080 |
|
||||||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
как-то не так использовал.
а смысл её применять, если ты не собираешься вставлять данные в БД это кстати ключевой вопрос, который обязательно нужно уяснить: зачем что-то делать с текстом, если ты не собираешься его никак использовать? если ты его собираешься как-то использовать, то нужно определить соответствующие средства для безопасности. а не все подряд без разбору
а пример с xss можно? |
||||||||
|
|||||||||
Muerto |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
а пример с xss можно?
вот так можно наращивать себе тиц: есть сайт к примеру http://blabla.ru там есть поиск http://blabla.ru/search.php?q= q - this is our query for the search... so now - > http://blabla.ru/search.php?q="<a href='http://mysql.com/?r=3&b=6&v=7'>mysite</a> и в определенных условиях получаем иногда то цтхо искали показывается в форме поиска сверху... и выходит что будет форма пустой и слева ссылка на ваш сайт, теперь осталось на свой сайт поместить ссылку: http://blabla.ru/search.php?q="<a href='http://mysql.com/?r=3&b=6&v=7'>mysite</a> и получаем от того сайта линк бэк... у меня дома даже где то список таких сайтов был... спецом выискивал... |
|||
|
||||
skyboy |
|
||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
сначала "хранишь адреса"
потом вдруг речь начинает идти о строке поиска: чем в таком случае "мешает" htmlspecialchars - непонятно. после будет выведен как раз просто текст "<a href='http://mysql.com/?r=3&b=6&v=7'>mysite</a> а вообще, браузер вполне нормально работает с адресами, в которых вместо "&" находится "&" более того, на структуру типа
ругается валидатор, потому что
|
||||||
|
|||||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |