|
|
|
| Из формы получаю текст так:
$letter = mysql_escape_string($_POST["letter"]);
Ввожу в базу такой текст
это пример введенного текста "Чего в супе не хватает".
Из базы читаю так:
$letter=htmlspecialchars($cat['letter']);
$letter = str_replace("\r\n"," <br>",$letter);
И получаю такой результат?
это пример введенного текста \" Чего в супе не хватает \" .
Появились две косые. Как от них избавиться? | |
|
|
|
|
|
|
|
для: tavila2009
(07.02.2010 в 12:55)
| | убрать строчку $letter=htmlspecialchars($cat['letter']);
зачем использовать htmlspecialchars() при выводе из базы ? | |
|
|
|
|
|
|
|
для: t3ma
(07.02.2010 в 12:59)
| | Но ведь таков порядок извлечения из базы. Я всегда так пишу. | |
|
|
|
|
|
|
|
для: t3ma
(07.02.2010 в 12:59)
| | Сейчас посмотрела что в базе. Эти косые черты есть уже в базе. Значит надо заносить в базу как-то не так. Как? Подскажите пожалуйста. | |
|
|
|
|
|
|
|
для: tavila2009
(07.02.2010 в 13:19)
| |
<?
function stripslashes_deep($data)
{
if(is_array($data))
$data = array_map("stripslashes_deep", $data);
else
$data = stripslashes($data);
return $data;
}
if(get_magic_quotes_gpc())
{
$_GET = stripslashes_deep($_GET);
$_POST = stripslashes_deep($_POST);
$_COOKIE = stripslashes_deep($_COOKIE);
}
|
| |
|
|
|
|
|
|
|
для: tavila2009
(07.02.2010 в 12:55)
| | У вас магические кавычки включены скорее всего + вы еще функцией экранирования пользуетесь (mysql_escape_string() ).
При добавлении делайте так:
<?php
if (!get_magic_quotes_gpc()) { // если маг.кавычки выключены
$letter = mysql_real_escape_string($_POST["letter"]);
} else {
$letter = $_POST["letter"];
}
|
http://php.su/security/?magicquotes | |
|
|
|
|
|
|
|
для: neadekvat
(07.02.2010 в 13:24)
| | не надо так делать. | |
|
|
|
|
|
|
|
для: Николай2357
(07.02.2010 в 13:26)
| | Но почему - объяснять особо никто не хочет. Все только функцию, типа вашей дают. | |
|
|
|
|
|
|
|
для: neadekvat
(07.02.2010 в 13:34)
| | Объяснений на форуме стопицот штук уже. Право, лень... Но если хотите, извольте.
1. Функция mysql_real_escape_string() работает только при активном открытом соединении с сервером MySQL, а это не факт.
2. Вы безапеляционно обработали ей данные, которые могут понадобиться не только в запросах, а значит исказили их. Попробуйте вернуть переменную $letter в элемент формы.
3. Преславутая инициализация переменных. Вы рискуете получить нотис в случае отсутствия элемента массива POST | |
|
|
|
|
|
|
|
для: Николай2357
(07.02.2010 в 13:45)
| | 1. Уж если мне нужно экранировать что-то - значит недалеко запросы к бд. А к бд подключаюсь я прежде всего, еще в конфиге, который подключается в самое начало любого скрипта.
2. Если мне надо вычислить длину или проверить на запрещенные символы - то это я делаю сразу, а уж потом экранирую. В форму к пользователю же выводит его исходные, POST['что-то'] значения.
3. В соседней теме вы сами указали, как нужно делать, чтобы даже при отсутствующих элементах массива не получить нотайс. | |
|
|
|
|
|
|
|
для: neadekvat
(07.02.2010 в 13:53)
| | 1. Дело не в том даже, далеко они или нет, запросы эти. А в том, что в самом запросе не видно, обработаны данные или нет. И к тому же. это у Вас коннект в конфиге, не факт что так же у топикстартера.
2. Не путайте валидацию с обработкой. Это совершенно разные вещи. Абсолютно не связанные между собой.
3. Я - да. Указал. Но у Вас этого нет. | |
|
|
|
|
|
|
|
для: Николай2357
(07.02.2010 в 14:06)
| | Тут я с вами согласен. Согласен именно после этого поста.
Но просто так заявлять, что "так делать не надо" - тоже..не надо.. Вымораживают такие заявления, ведь понятно, что последуют вопросы, а у кого-то вообще претензии. | |
|
|
|
|
|
|
|
для: neadekvat
(07.02.2010 в 14:09)
| | Прошу простить великодушно. Иногда правда очень лень, потому что на этой теме только совсем ленивый не плясал.) | |
|
|
|
|
|
|
|
для: Николай2357
(07.02.2010 в 14:18)
| | Ну да ладно. Что для себя понял - эту тему каждый человек сам должен подробно разобрать, чтобы знать, когда, где, зачем, поэтому лучше не советовать какого-то конкретного решения, а отправлять на какие-то готовые статьи (ибо каждый раз писать статью самому в ответе на вопрос - затратно) | |
|
|
|
|
|
|
|
для: neadekvat
(07.02.2010 в 14:21)
| | То - да. Вот вполне авторитетный источник. Там вообще все по взрослому.) | |
|
|
|
|
|
|
|
для: Николай2357
(07.02.2010 в 14:32)
| | По взрослому там было бы, если б был поставлен запрет на случайное повторное применение функции.
Увы, совсем по-взрослому его не сделать, т.к. из скрипта значение get_magic_quotes_gpc менять запрещено. | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2010 в 14:43)
| | Подождем 6.0
Не за горами вроде) | |
|
|
|
|
|
|
|
для: Николай2357
(07.02.2010 в 14:51)
| | ну, если только. :) | |
|
|
|
|
|
|
|
для: Николай2357
(07.02.2010 в 14:32)
| | Пусть так.
Но я вообще предпочитаю использовать .htaccess (конечно, прежде уточняя, можно ли его использовать на хостинге). | |
|
|
|
|
|
|
|
для: Николай2357
(07.02.2010 в 13:26)
| | Спасибо большое! Получилось. Как же я про stripslashes забыла.!!! Бестолочь!
Я вот так сделала :
$letter=htmlspecialchars($cat['letter']);
$letter = stripslashes($letter);
$letter = str_replace("\r\n"," <br>",$letter);
Теперь всё чисто и красиво! Вот! Волшебник! Факт на лицо! ))) | |
|
|
|
|
|
|
|
для: tavila2009
(07.02.2010 в 13:35)
| | Николай сейчас краснеет. | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2010 в 13:41)
| | опять я что-то не то сморозила! Ну я как всегда! Больше не буду. "Виноват исправлюсь" | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2010 в 13:41)
| | Неправда Ваша. )) Я не советовал никаких
<?
$letter=htmlspecialchars($cat['letter']);
$letter = stripslashes($letter);
$letter = str_replace("\r\n"," <br>",$letter);
|
Но если меня поняли привратно, то да. Пунц проявился. | |
|
|
|
|
|
|
|
для: Николай2357
(07.02.2010 в 13:47)
| | А я не сказал, от стыда Вы краснеете, или от гнева.
Но от чего-то одного уж точно. Я бы покраснел.
Ошибся таки? | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2010 в 13:52)
| | Когда на место литра пива вернется мозг, попробую переосмыслить... Пока не понял. | |
|
|
|
|
|
|
|
для: tavila2009
(07.02.2010 в 13:35)
| | Неужели это хорошо, когда в базе данные с ненужными слешами хранятся? | |
|
|
|
|
|
|
|
для: Николай2357
(07.02.2010 в 13:26)
| | А вот вопрос:
эти слэши попадают в базу. При выводе из базы они гасятся. А может как-то перед занесением в базу их надо гасить? | |
|
|
|
|
|
|
|
для: tavila2009
(07.02.2010 в 13:43)
| | Эти слэши не попадут в базу, если Вы их туда сами не засунете. | |
|
|
|
|
автор: Тень& (07.02.2010 в 17:55) |
|
|
для: tavila2009
(07.02.2010 в 13:43)
| | Единственно верный совет был в посте Николая2357 (07.02.2010 в 13:25). Его можно дополнить так:
<?php
if( version_compare(PHP_VERSION', '6.0.0', '<') && get_magic_quotes_gpc() )
{
$_GET = stripslashes_deep($_GET);
$_POST = stripslashes_deep($_POST);
$_COOKIE = stripslashes_deep($_COOKIE);
$_REQUEST = stripslashes_deep($_REQUEST);
}
?>
|
| |
|
|
|
|
автор: Тень& (07.02.2010 в 17:55) |
|
|
для: Тень&
(07.02.2010 в 17:55)
| |
<?php
if( version_compare(PHP_VERSION, '6.0.0', '<') && get_magic_quotes_gpc() )
{
$_GET = stripslashes_deep($_GET);
$_POST = stripslashes_deep($_POST);
$_COOKIE = stripslashes_deep($_COOKIE);
$_REQUEST = stripslashes_deep($_REQUEST);
}
|
>_> | |
|
|
|
|
автор: Тень& (07.02.2010 в 17:57) |
|
|
для: Тень&
(07.02.2010 в 17:55)
| | P.S. А то, что _уже_ занесено в базу сейчас (до внедрения этого кода), необходимо исправить. | |
|
|
|
|
|
|
|
для: Тень&
(07.02.2010 в 17:55)
| | Что за чушь?
Можно подумать, из 6-ки убрали get_magic_quotes_gpc() | |
|
|
|
|
автор: Тень& (07.02.2010 в 18:27) |
|
|
для: Trianon
(07.02.2010 в 18:06)
| | Trianon смотрю поменялся. Другой стал.
Из шестрёки (одной из её версий, уж во всяком случае) скорее всего get_magic_quotes_gpc() и вынесут. In my humble opinion. Да и потом, это сигнал к тому, что это код можно будет сносить, если скрипт будет заявлен для версии >= 6.0.0.
Но я вообще-то основной целью поправки ставил добавление $_REQUEST в список обработки. | |
|
|
|
|
|
|
|
для: Тень&
(07.02.2010 в 18:27)
| | Декларация о намерениях по шестерке вообще (и по magiс quotes в частности) приводилась здесь довольно давно. Напомню.
Чтобы убрать сигнальный вариант function get_magic_quotes_gpc(){return 0;}, надо быть по уши деревянным обладать недюжинным уровнем наивности.
Портабельность же порвется к такой-то матери. | |
|
|
|
|
автор: Тень& (07.02.2010 в 19:18) |
|
|
для: Trianon
(07.02.2010 в 19:14)
| | Хамить не надо. Я сказал в одной из версий. Вы уверены, что все версии 6.x.x будут обладать этой "заглушкой"? Мне просто неприятно оставлять голым эту функцию, чуши я тут не вижу. | |
|
|
|
|
автор: Тень& (07.02.2010 в 19:22) |
|
|
для: Тень&
(07.02.2010 в 19:18)
| | Кстати, вполне вероятно, что будет выбрасываться ошибка уровня E_STRICT, IMHO | |
|
|
|
|
автор: Тень& (07.02.2010 в 19:23) |
|
|
для: Тень&
(07.02.2010 в 19:22)
| | Или E_DEPRECATED :) | |
|
|
|
|
|
|
|
для: Тень&
(07.02.2010 в 19:23)
| | применение magic_quotes on в конфиге может быть (должно быть и более того - является) deprecated.
А разумная проверка, не включил ли какой-нибудь дилетант случайно этот режим в своем php - да с каких гвоздей это настоятельно не рекомендовано? | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2010 в 19:58)
| | Мы говорим о PHP 6? Там нельзя включить magic_quotes_gpc.
P.S. Не замечаете сходства этого треда с этим: http://softtime.ru/forum/read.php?id_forum=6&id_theme=71704&page=1?
Там я придрался к тому, что Вам лень проверить список спец. символов PCRE. Но Вам так удобнее.
Тут Вы придрались к тому, что я поставил проверку версии. Мне тоже так удобнее -- я не имею представления, что разработчики PHP выдвинут в очередной раз. До сих пор вспоминаю милую ошибку уровня E_WARNING, кажется, из-за попытки записать в $_SESSION значение NULL.
Так не кажется ли Вам, что Вы придираетесь похуже меня? :) | |
|
|
|
|
|
|
|
для: Тень&
(07.02.2010 в 20:08)
| | Мы говорим о PHP 6? Там нельзя включить magic_quotes_gpc.
Мы говорим о написании эффективного кода, в том числе учитывая PHP6?
В PHP6 нельзя включить magic_quotes_gpc, но можно убедиться, что они выключены.
>Так не кажется ли Вам, что Вы придираетесь похуже меня? :)
Э нет... передергиваете.
Мой ответный комментарий решал целевую задачу выполнения контекстной замены.
Побочным эффектом я сэкономил на анализе мануала.
Ваш же целиком и полностью был посвящен тому факту, что в PHP6 действуют отдельные правила.
Стоило бы поинтересоваться, насколько именно отдельные.
А что разработчики могут загнуть, я знаю.
После того, как прочел о том, как эти magic quotes появились (версия отца-основателя PHP) мне стало дурно.
Ну так что , стреляться теперь чтоли?
Впрочем, если Вам опять охота спорить ради процесса - я просто признаю. Вы правы. Ок? | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2010 в 20:33)
| | > Ваш же целиком и полностью был посвящен тому факту, что в PHP6 действуют отдельные правила.
Я же сказал, что мой ответ был посвящен в основном тому, что Николай забыл $_REQUEST
P.S. Меня, как сноба, задевает это "что за чушь", поэтому не обижайтесь, что я Вас тут "троллю", как считаете Вы. | |
|
|
|
|
|
|
|
для: Тень&
(07.02.2010 в 20:39)
| | $_REQUEST не заметил по диагонали я. | |
|
|
|
|
|
|
|
для: Тень&
(07.02.2010 в 19:18)
| | Это по фактам. http://bugs.php.net/bug.php?id=42262
>Хамить не надо. Я сказал в одной из версий.
По одной из чьих версий?
Я не знал, что Вы входите в команду разработчиков.
Если не входите - данная фраза ни коим образом не должна была Вас задеть.
Если входите - я повторю её еще раз, но уже лично.
Это не хамство. Если ты берешься что-то делать для других людей, сперва научись это делать.
В противном случае они не постесняются сказать всё, что думают об авторе.
И таки я не понял Ваши слова про "оставлять голым функцию" . Правда, не понял. | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2010 в 19:55)
| | >По одной из чьих версий?
>Я не знал, что Вы входите в команду разработчиков.
OK, я читал по диагонали эту фразу: "Чтобы убрать сигнальный вариант ..."
> И таки я не понял Ваши слова про "оставлять голым функцию" . Правда, не понял.
Оставлять вызов этой функции без предварительной проверки версии PHP. | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2010 в 19:55)
| | Почему-то вертится в голове фраза - "... рыцарь без страха и упрёка" ...
В наложении на Трианон получается всегда -
"Рыцарь без страха НО с УПРЁКОМ ..."
))))))))))))
без страха но с упрёком ....
с упрёком но без страха ...
без страха но с упрёком ....
с упрёком но без страха ...
без страха но с упрёком ....
с упрёком но без страха ...
без страха но с упрёком ....
с упрёком но без страха ...
без страха но с упрёком ....
с упрёком но без страха ...
- это уже вариации.
))))))))))))
))))))))))))
и т.д. бесконечный цикл
Ну всё, теперь забанят! Однозначно. ) Не надо меня банить. Я исправлюсь ) | |
|
|
|
|
|
|
|
для: tavila2009
(07.02.2010 в 22:15)
| | Le Chevalier sans peur, sans reproche дословно переводится как бесстрашный, безупречный рыцарь.
Если есть упреки в мой адрес- в личную почту, пожалуйста. | |
|
|
|
|
|
|
|
для: tavila2009
(07.02.2010 в 22:15)
| | упреками воспринимается желание наставить вас на путь истинный? какой смысл советовать изначально неправильный подход, но который решит вашу проблему? это в дальнейшем наверняка заставит вас пересматривать весь код. намного проще восстановить испорченные данные один раз в начале любого сценария, а mysql_real_escape_string применять только в формировании запросов, потому что на этапе формирования запроса практически невозможно не быть подключенным к базе. тут вам и безопасность, и корректность данных и никаких лишних телодвижений. другие решения так же имеют право на жизнь, только от версии к версии вам придется их корректировать. почему же не послушаться, и не сделать один раз как положено, чтобы никогда к этому не возвращаться? | |
|
|
|
|
|
|
|
для: Рома
(08.02.2010 в 00:04)
| | Конечно наставляйте на путь истинный. Я за этим и пришла .
Да это шутка была. Какие там упрёки. Кроме благодарности от меня никаких упрёков. Я вообще очень доброжелательный человек. Это просто Тень с Трианоном взаимными упрёками обменялись - вот и возникла фраза.
"... Два отточенных клинка ..." У меня на сайте знакомств поэтэсса зарегистрировалась. Вообщем начиталась её стихов ... Под впечатлением ... :)))
Я вот так сделала и у меня всё получилось. Забыла слэши погасить.
$letter=htmlspecialchars($cat['letter']);
$letter = stripslashes($letter);
$letter = str_replace("\r\n"," <br>",$letter);
А сегодня Масленица! С праздником всех!!!!!
Масленичная неделя в этом году приходится на 8–14 февраля.
| |
|
|
|
|
|
|
|
для: tavila2009
(08.02.2010 в 00:12)
| | > Забыла слэши погасить.
Не с той стороны Вы их гасите-то :( | |
|
|
|
|
|
|
|
для: Тень&
(08.02.2010 в 00:40)
| | Я разберусь. сейчас всё перечитаю и разберусь. :)))) С праздником Вас! | |
|
|
|
|
|
|
|
для: tavila2009
(08.02.2010 в 00:12)
| | >Я вот так сделала и у меня всё получилось.
>
>$letter=htmlspecialchars($cat['letter']);
>$letter = stripslashes($letter);
вот имено об этом я говорю - когда ваш уровень знаний повысится и вы начнете понимать что и как должно быть на самом деле(дай бог конечно), будете говорить 'вот гад этот дядька Trianon - не мог доходчиво объяснить как правильно сделать' и будете переписывать свой код заново, хотя он никому ничего не должен, а его критика должна быть вам в радость.
stripslashes не должен обрабатывать данные на выходе из базы, потому что это затычка дыры получившейся при неправильном подходе добавления этих данных в базу. научите скрипт класть данные в базу так, чтобы избавиться от применения этой функции. многие на этом собаку съели, а еще большему количеству - еще только предстоит. хотя я больше склоняюсь к мнению, что вам плевать на правильное решение и вы войдете в группу последних, хоть и есть все, для того, чтобы этого избежать. думайте... | |
|
|
|
|
|
|
|
для: Рома
(08.02.2010 в 00:48)
| | Мне не плевать. Это я Вам по секрету скажу. Поэтому это мой любимый форум. А "гад дядька Трианон" он же и не со мной вовсе "упрекался" а с Тенью. Да хорошо я к ним отношусь. Более чем.
И вот тому подтверждение. http://softtime.ru/forum/read.php?id_forum=2&id_theme=70749&page=4
Устали мы все похоже. Надо отдохнуть. Выспаться. Спокойной ночи. :))))
Всего Вам самого самого доброго. | |
|
|
|