Эта тема на forum.dklab.ru


ustas: Addslashes() не слэшит!!!
Здраствуйте!!!
Вот такая ерунда получается, перед отправкой данных в базу переменная обрабатывается функцией addslashes(), но в базу попадает совсем не обработанная строка!

$my_var = addslashes($my_var);
...
...
$sql = "insert into my_table values
(
'".$my_var."',
'".$my_var."',
'".$my_var."',
)";
$result = mysql_query($sql) or die(...);
...
...

Хотя если вывести эту переменную перед или после SQL-запроса "echo $my_var;", то строка выводится в обработанном виде, а в базу попадает без слэшей. :-(
Но если применить эту функцию дважды, непосредственно в самом запросе:

$my_var = addslashes($my_var);
...
...
$sql = "insert into my_table values
(
'".addslashes($my_var)."',
'".addslashes($my_var)."',
'".addslashes($my_var)."',
)";
$result = mysql_query($sql) or die(...);
...
...

, то вставляется в базу уже со слэшами. Еще раз подчеркну слово дважды, потому что если вверху или в запросе убрать одну функцию, то перестает работать.
Что это может быть? Подскажите пожалуйста!
Чебурген:
А зачем тебе в базе обработанная строка?

И откуда взялось утверждение, что Addslashes() не слэшит!!!
Как можно утверждать, что "перестает работать", когда ты сам видишь, что
если вывести эту переменную перед или после SQL-запроса "echo $my_var;", то строка выводится в обработанном виде,
?
Так в обработанном, или не работает?
Ты бы определился бы, а?
Владимир Хоменко:
Ustas:

А как вы проверяете, что в базе находится именно необработанная строка?

Вот, например, если из консоли просматривать содержимое записи, то видно так, как будто бы строка действительно не заслЭшена, хотя на самом деле это не так.
Чебурген:
Владимир Хоменко:
А как вы проверяете, что это на самом деле не так?
Владимир Хоменко:
Чебурген:
Чтото я совсем туплю. Извиняюсь.

Ustas:
Чебурген в данном случае прав. Попробуйте ответить на его вопросы.
Чебурген:
Напоминает бессмертное "Сурка видишь?" :)
ustas:
Sorry, я возможно не так выразился. Addslashes слэшит конечно, но почему-то в базу данных заносит необработанную строку??? Я просматриваю через PHPMyAdmin-а.
Чебурген:
Ты не ответил на вопрос - а зачем тебе в базе обработанная строка?
ustas:
Да разве это важно для решения данного вопроса!!!
Ты не ответил на вопрос
Чёрт, запостился - словно в прокуратуру попал! :-)
а зачем тебе в базе обработанная строка?
Из соображений безопасности и нормальной работы БД, чтобы потом не было всяких непоняток.
Юрий Насретдинов:
но в базу попадает совсем не обработанная строка
Почитайте синтаксис SQL-запросов, может быть, поймете, почему так происходит
ustas:
Я, прежде чем обращаться к Вам с этим вопросом, перерыл кучу литературы, но почему-то ничего, способного помочь мне в данной ситуации не нашел.
Юрий Насретдинов:
Эх... Хорошо, почитайте конкретно вот это: http://dev.mysql.com/doc/mysql/ru/String_syntax.html
Чебурген:
Ustas:
Из соображений безопасности и нормальной работы БД, чтобы потом не было всяких непоняток
Очень интересно.
А можно узнать КОНКРЕТНО, КАК ИМЕННО обеспечивает безопасность слеш, лежащий в базе?
Если можно - с примерами.
Чёрт, запостился - словно в прокуратуру попал
А как же иначе?
Прежде, чем добиваться какого-то функционала, желательно знать - а зачем он вообще нужен?

yUAC:
При всем уважении, но все это не по теме.
Тут вопрос скорее гносеологический.
ustas:

yUAC:
При всем уважении, но все это не по теме.

!!!


Очень интересно.
А можно узнать КОНКРЕТНО, КАК ИМЕННО обеспечивает безопасность слеш, лежащий в базе?


Да при чем здесь слэш, лежащий в базе!!!!!! Вот он то как раз никому и не мешает!!!!
А по поводу безопасности - для экранирования символов, которые могут являться служебными и должны быть выделены в запросах к базам данных и т.п. Например: ('), двойные кавычки ("), (\) и NUL (нулевой байт).
Чебурген:
Да при чем здесь слэш, лежащий в базе!!!!!! Вот он то как раз никому и не мешает!!!!
Как это никому не мешает?
Зачем говорить за всех?
Вот мне мешает.

Поэтому я не парюсьна тему того, что его там нет.
И тебе тоже советую не переживать так.
ustas:

Как это никому не мешает?
Зачем говорить за всех?
Вот мне мешает.

O'K, я за всех говорить не буду. Я буду говорить за себя!!!
Господа, мне жуть как не мешает слэш, который стоит перед специальными символами в базе данных!!!
Но у меня его там нет, и я очень хочу, чтоб он у меня там был!!! И я очень прошу дать мне дельный совет (в моей ситуации см. выше), для решения этого вопроса, а не отговаривать меня применять эти функции и говорить, что это совсем безопасно!!!
Чебурген:
На колу мочало, начинаем сказку с начала.
- Почему у меня нету слеша в базе????
- А зачем он тебе там?
- он обеспечивает безопасность!!!
- Как он обеспечивает безопасность?
- он там никому не мешает!!!

Итак.
Все-таки. Можно получить ответ на вопрос - как слеш, лежаший в базе, обеспечивает безопасность?
Из всех твоих объяснений я услышал только, что слеш нужен в запросе. И даже готов поверить в это, хотя доказательств с примерами не увидел.
Но зачем нужен слеш в базе, я так и не узнал. Буду весьма признателен.

а не отговаривать меня применять эти функции и говорить, что это совсем безопасно!!!
Побойся бога! Кто тебя здесь отговаривает?
Чебурген:
Я, кажется, догадался, в чем проблема.
Ты не делаешь различия между запросом, которым обращаются к базе, и собственно данными лежащими в в ней.
ustas:
Короче!!!!!!!!
Спасибо всем за советы, они мне очень помогли!!!!!!!
Все, можно закрывать тему, далее, как я понял ничего полезного тут не будет!!!!!

Вопрос решен, тему можно закрыть.
Maus:
слэш, который стоит перед специальными символами в базе данных!!!

Ustas:
Кстати да, что Вам мешает обработать addslashes(), то, что Вы забрали из базы?
Чебурген:
Все, можно закрывать тему, далее, как я понял ничего полезного тут не будет!!!!!
Это тоже заблуждение. :-)
Теперь тебе можно дать эту ссылку. После того, как ты понял, в чем была твоя ошибка.
Для закрепления материала, а так же для освоения правильных приемов составления запросов тебе следует прочитать
PHP FAQ: \"Кавычки \". Надоедливые наклонные, слеши, экранирование кавычек.
ustas:
Спасибо конечно, но зачем надо это делать таким образом. Нельзя было сразу этот линк кинуть? Нет же, надо человека довести до нервных припадков, чтоб он сначала разбил свою голову об стены в надежде на то, что от ударов вывалится мысля и озарит его да прольет свет на его проблему ибо нужно учится только на своих ошибках!!! :-)
Спасибо всем!!!

З.Ы. Извиняюсь перед модераторами за данный пост.
Чебурген:
А там ведь нету теоретического обоснования.
Только практические советы для тех, кто отличает данные от запроса.
А хотелось, чтобы ты твердо уяснил разницу.
К тому же, я не был уверен, что это именно то, что тебе нужно - уж очень путанно был вопрос задан.
Ну, и разве не приятно додуматься своей головой, а не прочитать готовый текст?
Владимир Хоменко:
ОФФ:
Чебурген:
У вас, кстати, на этом посте, карма пункта на 3 упала...

И никто про воззвание к пользователям так и не вспомнил ...
Чебурген:
У вас, кстати, на этом посте, карма пункта на 3 упала...
Очень актуальное замечание.
Честно говоря, я как раз нахожусь перед нелегким выбором в связи с этим ужасающим фактом.
То ли петлю на люстру, то ли голову в духовку (газовую, конечно). Не подскажете, что эффективнее?
Хотя, в последнее время, склоняюсь к тому, чтобы по простому, без затей, утопиться.
И никто про воззвание к пользователям так и не вспомнил ...
Кстати а где там, в воззвании, написано о том, что нельзя заставлять посетителей думать?
Я, что-то, запамятовал.
ustas:
Я конечно извиняюсь за ламерство, просто хотелось уточнить. Как я понял, то слэши перед спецсимволами при занесении в БД отсекаются. Потому они нужны лишь для того, чтобы не было различных косяков в самом запросе?! Если это так, то почему в некоторых моих скриптах слэши все же заносятся в БД, после чего необходимо использовать функцию stripslashes()?
Чебурген:
Я же говорил - без специальной подготовки эта ссылка бесполезна. Меньше, чем с тремя классами церковно-приходской туда можно даже и не пытаться...
Ant:
И никто про воззвание к пользователям так и не вспомнил ...
Никто == я. (-:

Если честно, то мне уже надоело не будучи модератором в форуме, делать модераторскую работу.

Кстати а где там, в воззвании, написано о том, что нельзя заставлять посетителей думать?
Я, что-то, запамятовал.
Там написано, что надо обращаться на «Вы», если не оговорено иное.
Чебурген:
Прошу прощения, я немного запутался.
Дело в том, что воззвании написано
Чтобы чувствовать себя здесь, как рыба в воде, и не вызывать всеобщих антипатий, ознакомьтесь с правилами поведения на других форумах — например, на Форуме Алекса Экслера.
Я ознакомился. В частности, с таким пунктом:
Имейте в виду, что, как правило, на форумах "Экслер.ру" принята форма обращения на "ты" ко всем участникам. Впрочем, это зависит от конкретного форума. Например, в форуме для весьма интеллектуального общения на тему искусства "Улетающий камин" обращение на "вы" вполне принято. Однако к администрации и модераторам даже в личных письмах вы можете спокойно обращаться на "ты".
Надеюсь, меня оправдывает то, что вопрос, как, с какой буквы и к кому обращаться, оказался несколько противоречиво освещен.
Впредь обещаю быть внимательнее и уделять больше внимания этому, несомненно, важному и живтрепещущему, а так же фатально губительному для кармы моменту.
ustas:
Я же говорил - без специальной подготовки эта ссылка бесполезна.
Что еще за специальная подготовка? Что Вы все время загадками!!! Нельзя ли сразу, допустим, хотя бы линк кинуть на эту специальную подготовку или литературу, освещающую мою тему?!

Меньше, чем с тремя классами церковно-приходской туда можно даже и не пытаться...
Ха... Остроумно. :-(
Чебурген:
Так я кинул. А толку?

Хотя мне тут объяснили причину.
Видимо, это потому, что я не по уставу обратился.
Ant:
Я ознакомился. В частности, с таким пунктом:
С ООП я вижу Вы не знакомы. (-;
scalpel:

Хотя мне тут объяснили причину.
Видимо, это потому, что я не по уставу обратился.
Хорошо сказал, серьезно, мне понравилось :). Только вот, модераторы правы все равно, имхо.


Если вся проблема в обеспечении безопасности SQL-запросов, то попробуйте поискать по запросу "плейсхолдеры", может быть это чем-нибудь поможет.
placeholder
Я конечно извиняюсь за ламерство, просто хотелось уточнить. Как я понял, то слэши перед спецсимволами при занесении в БД отсекаются. Потому они нужны лишь для того, чтобы не было различных косяков в самом запросе?! Если это так, то почему в некоторых моих скриптах слэши все же заносятся в БД, после чего необходимо использовать функцию stripslashes()?
Идея такова: перед осуществлением запроса на БД выполняете addslashes(), когда забираете данные из БД, вырезаете слеши stripslashes().
+ возможно у Вас magic_quotes_gpc включен, если Вы все выполняете корректно, но слешится по 2 раза...
+ попробуйте погуглить, по этой теме множество информации.
Чебурген:
Если вся проблема в обеспечении безопасности SQL-запросов, то попробуйте поискать по запросу "плейсхолдеры", может быть это чем-нибудь поможет.
Можно два вопроса?
1. Каким образом плейсхолдеры обеспечивают безопасность SQL-запросов?
2. Чем недостаточна информация по приведенной мной ссылке, если ее надо дополнять какими-то поисками?
Идея такова: перед осуществлением запроса на БД выполняете addslashes(), когда забираете данные из БД, вырезаете слеши stripslashes().
Извините, я не очень уловил идею. Можно чуть более развернуто?
если Вы все выполняете корректно, но слешится по 2 раза...
Осмелюсь заметить, что если все выполнять корректно, то ничего два раза слешиться не будет.
+ попробуйте погуглить, по этой теме множество информации.
Опять же, вопрос. Что есть в гугле, но нет по ссылке, которую я привел?

Заранее сердечно благодарен Вам за проявленное Вами внимание и потраченное Вами время, если Вас не затруднит ответить на заданные Вам вопросы.
scalpel:
Чебурген:
1) SQL-инъекции
2) после Вашей ссылки Ustas: ничего не понял, имхо, и м.б. доп. информация поможет ему...
Извините, я не очень уловил идею. Можно чуть более развернуто?
То же самое, что и плейсхолдеры, только упрощенный, неудобный и некорректный вариант, однако ustas'у он помог бы реализовать именно то, что он хотел
Осмелюсь заметить, что если все выполнять корректно, то ничего два раза слешиться не будет.
Разумно.
Опять же, вопрос. Что есть в гугле, но нет по ссылке, которую я привел?
Сами подумайте...
ustas:
Всё, наконец-то допёр!!!
Чебурген:
scalpel:
С невыразимым сожалением вынужден констатировать, что Вы не в состоянии самостоятельно связать ни слова по обсуждаемому вопросу, а можете лиишь, как попугай, повторять чужие слова, не понимая их смысла.

Доказывать что-либо здесь бессмысленно.
если человек в ответ на вопрос "Каким образом плейсхолдеры обеспечивают безопасность SQL-запросов [от SQL-инъекций]?" отвечает "SQL-иньекции", это порождает обоснованную тревогу за его здоровье.
Я надеюсь, что напряженные учебные занятия вкупе с непомерными умственными усилиями, затрачиваемыми на усвоение материалов этого форума, не ненесли непоправимого ущерба Вашему драгоценному здоровью, а лишь оказали временное негативное влияние.
Впрочем, как я вижу, речевые центры остались в добром здравии.

Значит, на вопрос КАК [плейсхолдеры обеспечивают защиту] мы получили ответ на вопрос, ОТ ЧЕГО. Мило.
На фоне этого ответа следующий просто проливает бальзам на мою израненную дущу.
Он хотя бы приблизительно соответствует вопросу. Правда, опять же, никакой конкретики и странное убеждение в том, плейсхолдеры, по определению являсь весьма вторичным и никакого отношения не имеющим к безопасности средством, как-то помогут нашему дорогому Юстасу.

Дальше нас ждет бездна мудрости.
То же самое, что и плейсхолдеры, только упрощенный, неудобный и некорректный вариант, однако ustas'у он помог бы реализовать именно то, что он хотел
ЧТО такое плейсхолдеры мы так и не выяснили, но зато узнали, что шаманство с добавлением и обрезанием слешей, это - оказывается, то же самое!
Надо признать, что какая-то сермяжная правда в этом есть.
С точки зрения человека, для которого и то и другое - тайна за семью печатями, разницы, действительно, никакой.
Как я уже убедился, задавать Вам, дражайший скальпель, вопросы, требующие самостоятельного мышления, бессмысленно. А то бы я обязательно поинтересовался - заменяет ли механизм плейсхолдеров применение addslashes?
А так же, в чем некорректность, упрощенность и неудобство добавления слешей к данным, вставляемым в запрос.

Разумно.
К величайшему своему сожалению, и несмотря на давление всех правил всех форумов мира, не могу себе позволить равнозначного высказывания в адрес Вашей драгоценной персоны.
Вы сами-то, понимаете, насколько глупо выглядите?
Duchal Alexander:
Чебурген:
Не знаю как другим, но лично мне надоело Ваши постоянные нападки на scalpel. Какую бы я тему не открыл - где только встречается топик scalpelа, сразу же появляетесь и Вы с критикой. Вы так сильно озабочены этим? Вы или давайте реальные ответы на вопросы или не критикуйте других, за то что они пытаются хоть чем то помочь. За время наблюдения Ваших ответов на этом форуме, я не встретил ни одного ответа, который бы кому-то помог, наблюдается только: "Ах какой я умный, а вы все ......". (Это мое личное мнение).
Чебурген:
интересно, на этом форуме ВСЕ - самодовольные тупицы или есть хоть один нормальный человек?
Юрий Насретдинов:
Тема закрыта.

Эта тема на forum.dklab.ru