Ka4_0k
26.10.2009 - 00:39
Ещё есть места где эта вещь остаётся включенной. И плюс ещё и пхп установлен отдельно, а не как мод апача. Так вот как кто относится к данной вещи? Стоит ли доверять? У меня то на локалке есстесна офф, но вот если проверка get_magic_quotes_gpc покажет что они включены как бороться? Делать stripslashes мне кажется глупым потому что в тексте могут быть свои слэшы. С другой стороны доверять полностью magic_quotes_gpc тоже глупо. А делать mysql_real_escape_string поверх magic_quotes_gpc чтобы получить
не хочется по понятным причинам
)
Может кто-нибудь предложить сколько-нибудь более приемлемое решение?
Спустя 5 минут, 1 секунда (25.10.2009 - 23:44) FatCat написал(а):
Отключить через эйчтиакцесс...
Спустя 4 минуты, 2 секунды (25.10.2009 - 23:49) Ka4_0k написал(а):
Цитата |
php_flag magic_quotes_gpc Off |
Спасибо, нашёл
Я правда когда-то читал что управление директивами пхп через htaccess не всегда срабатывает...
Как раз ведь не сработает если пхп установлен не как модуль апача.
Спустя 7 минут, 50 секунд (25.10.2009 - 23:56) kirik написал(а):
Цитата (Ka4_0k @ 25.10.2009 - 15:49) |
Я правда когда-то читал что управление директивами пхп через htaccess не всегда срабатывает... |
Ага, поэтому нужно обрабатывать все входящие значения stripslashes();
Спустя 3 минуты, 37 секунд (26.10.2009 - 00:00) Ka4_0k написал(а):
Цитата (kirik @ 25.10.2009 - 20:56) |
Цитата (Ka4_0k @ 25.10.2009 - 15:49) | Я правда когда-то читал что управление директивами пхп через htaccess не всегда срабатывает... |
Ага, поэтому нужно обрабатывать все входящие значения stripslashes();
|
А если в тексте, например в тексте комента есть свои слэши?
Спустя 27 минут, 41 секунда (26.10.2009 - 00:28) Gram написал(а):
PHP |
// функция восстановления испорченных входных параметров function reset_stripslashes($mixed) { if (is_array($mixed)) { $mixed=array_map('reset_stripslashes', $mixed); foreach ($mixed as $key => $value) { // обнуляем массив, чтоб не получилось повторной обработки обработанных элементов // не уверен в необходимости, но на всякий случай $arr = array(); $keynew = stripslashes($key); if ($keynew !== $key) { $mixed[$keynew] = $mixed[$key]; unset($mixed[$key]); } $arr = $mixed; } return $mixed; } else { return stripslashes($mixed); } }
// если магические кавычки включены, применяем функцию if(get_magic_quotes_gpc()) { $_POST = reset_stripslashes($_POST); $_GET = reset_stripslashes($_GET); $_COOKIE = reset_stripslashes($_COOKIE); } |
Спустя 1 минута, 25 секунд (26.10.2009 - 00:29) Gram написал(а):
Кстати, хотелось бы спросить мнение экспертов по этому коду. Не сильно накрутил, просто переживаю за обработку ключей?
Спустя 7 минут, 46 секунд (26.10.2009 - 00:37) Ka4_0k написал(а):
Gram, omg
Мне кажется должен быть более короткий способ решения
З.Ы. И более корректынй
) Даже я нашёл уже пару излишков.
Спустя 3 минуты, 42 секунды (26.10.2009 - 00:41) glock18 написал(а):
Ka4_0k
вообще говоря, если есть свои слеши, то они удвоятся магическими кавычками
юзать
get_magic_quotes_gpc + strip_slashes и все. ничего лишнего не съест.
Gram
ключи обычно зависят от одного человека - программиста. и я предпочту их вовсе не использовать, а обойтись всего-навсего
array_walk_recursive() - одна строка.
Спустя 1 минута, 24 секунды (26.10.2009 - 00:42) twin написал(а):
Gram
мыслил правильно, но наверно просто не знаешь что такое рекурсия...
А нужные бэкслэши не пропадают. Они магическими кавычками удваиваются. Да просто проверь да и всё.
PHP |
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); } |
Этого обычно достаточно...
Спустя 1 минута, 21 секунда (26.10.2009 - 00:43) Ka4_0k написал(а):
Цитата |
Ka4_0k вообще говоря, если есть свои слеши, то они удвоятся магическими кавычками
юзать get_magic_quotes_gpc + strip_slashes и все. ничего лишнего не съест. |
Цитата |
А нужные бэкслэши не пропадают. Они магическими кавычками удваиваются. Да просто проверь да и всё. |
Если уже у 2-х экспертов одинаковые мнения, то так тому и быть:) Спаибо, пойду пробовать.
Спустя 1 минута, 25 секунд (26.10.2009 - 00:45) glock18 написал(а):
нафиг, array_map + stripslashes_deep ежли одной строкой это делается
Спустя 1 минута, 4 секунды (26.10.2009 - 00:46) twin написал(а):
Спустя 9 минут, 32 секунды (26.10.2009 - 00:55) kirik написал(а):
Цитата (twin @ 25.10.2009 - 16:42) |
Этого обычно достаточно... |
Лучше еще и ключи обрабатывать..
Цитата (glock18 @ 25.10.2009 - 16:45) |
нафиг, array_map + stripslashes_deep ежли одной строкой это делается |
А если массив не одноуровневый?
Спустя 7 минут, 29 секунд (26.10.2009 - 01:03) Gram написал(а):
Вот я по этому и спрашивал. Но как говорит glock, все зависит от программиста - просто не давать ключам состоять из любых символов, а обязательно фильтровать данные, если они могут стать ключами.
Спустя 2 минуты, 38 секунд (26.10.2009 - 01:05) kirik написал(а):
Но полюбому ключи нужно хотя бы проверять
Вдруг когда-нибудь понадобится вставить в запрос ключ..
Спустя 5 минут, 31 секунда (26.10.2009 - 01:11) Gram написал(а):
Ну если в запросе всегда применять mysql_real_escape_string, то максимум будет ошибка выборки данных.
Спустя 23 минуты, 3 секунды (26.10.2009 - 01:34) kirik написал(а):
Цитата (Gram @ 25.10.2009 - 17:11) |
то максимум будет ошибка выборки данных |
во-во.. из-за каких-то непонятных "волшебных кавычек"
Спустя 7 минут, 1 секунда (26.10.2009 - 01:41) Gram написал(а):
Не страшней sql инъекции )
Спустя 7 часов, 4 минуты, 52 секунды (26.10.2009 - 08:46) glock18 написал(а):
насчет вставки в запрос ключика поля:
часто вы называете ключики словами с использованием слэшей и кавычек? у меня обычно это чисто символьная строка.
kirik
array_walk_recursive() применяется рекурсивно. Не проверял слишком придирчиво, но должно работать что надо.
Спустя 45 минут, 21 секунда (26.10.2009 - 09:31) kirik написал(а):
Цитата (glock18 @ 26.10.2009 - 00:46) |
часто вы называете ключики словами с использованием слэшей и кавычек? |
Нет не часто.. точнее ни разу
Цитата (glock18 @ 26.10.2009 - 00:46) |
array_walk_recursive() применяется рекурсивно. |
Пойдет
_____________
-Oh My God! They Killed Kenny!
-You Bastards!