function slashes(&$el)
{
if (is_array($el))
foreach($el as $k=>$v)
slashes($el[$k]);
else $el = stripslashes($el);
}
if (ini_get('magic_quotes_gpc'))
{
slashes($_GET);
slashes($_POST);
slashes($_COOKIE);
}
Спустя 13 минут, 19 секунд (26.03.2010 - 14:22) Extremal написал(а):
Нет,этот код вобще не защищает.
Спустя 12 минут, 36 секунд (26.03.2010 - 14:35) antonov_sa написал(а):
Цитата (Extremal @ 26.03.2010 - 11:22) |
Нет,этот код вобще не защищает. |
но что делает этот код? в скрипте, где я это встретил было четко написано, что "защитим переменные от слэшей"
Спустя 5 минут, 22 секунды (26.03.2010 - 14:40) ZigZag написал(а):
Рекурсивная функция, обходит массивы в $_GET, $_POST и $_COOKIE и применяют к каждому значению функцию stripslashes()
* Удаляет экранирующие бэкслэши. (\' преобразуется в ', и т.д.). Двойные бэкслэши (\\) преобразуется в одиночные(\).
* Удаляет экранирующие бэкслэши. (\' преобразуется в ', и т.д.). Двойные бэкслэши (\\) преобразуется в одиночные(\).
Спустя 4 минуты, 35 секунд (26.03.2010 - 14:45) vagrand написал(а):
Этот код рекурсивно обходит суперглобальные массивы get, post и cooke и для каждого элемента выполняет команду stripslashes() которая удаляет ненужные слеши. Для того чтобы добавлять слеши нужно юзать addslashes().
Но я не вижу никакой пользы от этого, а наоборот в дальнейшем может создать проблемы.
Добавлять слеши к данным нужно тогда когда вставляешь их в запрос к БД и т не ко всем а только к строковым, если же у тебя число то логичнее сделать приведение типа: (int), (float)
Но я не вижу никакой пользы от этого, а наоборот в дальнейшем может создать проблемы.
Добавлять слеши к данным нужно тогда когда вставляешь их в запрос к БД и т не ко всем а только к строковым, если же у тебя число то логичнее сделать приведение типа: (int), (float)
Спустя 2 минуты, 25 секунд (26.03.2010 - 14:47) antonov_sa написал(а):
а что нужно сделать с пост или гет переменной, чтобы она была безопасной для добавления в БД?)
можно этот код преобразовать в адекватный код?)
Спустя 3 минуты, 7 секунд (26.03.2010 - 14:50) Lenarfate написал(а):
попробуй так
function slashes($el)
{
if(is_array($el))
$el = array_map('slashes', $el);
else
$el = mysql_real_escape_string($el);
return $el;
}
Спустя 1 минута, 34 секунды (26.03.2010 - 14:52) Lenarfate написал(а):
или
function magic_off($el)
{
if(is_array($el))
{
if(get_magic_quotes_gpc())
$el = array_map('stripslashes', $el);
$el = array_map('mysql_real_escape_string', $el);
return $el;
}
else
{
if(get_magic_quotes_gpc())
$el = stripslashes($el);
$el = mysql_real_escape_string($el);
return $el;
}
}
Спустя 27 секунд (26.03.2010 - 14:52) Extremal написал(а):
<?php
function input($el)// Ввод данных
{
if (!get_magic_quotes_gpc())
{
$el = addslashes($el);
}
return $el;
}
function output($el)// Вывод
{
$el = stripslashes(htmlspecialchars($el));
return $el;
}
?>
Вот к примеру 2 функции,одна на ввод данных другая на вывод,каждую переменную нужно будет передавать через какую то из них,но это не даст тебе полной защиты.
Спустя 50 секунд (26.03.2010 - 14:53) Lenarfate написал(а):
пользуй мою вторую функцию, мне помогает)
Спустя 7 минут, 57 секунд (26.03.2010 - 15:01) vagrand написал(а):
Я с вас удивляюсь. Зачем эскейпить все элементы этих массивов? Работать нужно только с теми их элементами, которые используются для составления запроса и только непосредственно при его составлении.
Спустя 1 день, 2 часа, 13 минут, 14 секунд (27.03.2010 - 17:14) antonov_sa написал(а):
Цитата (Lenarfate @ 26.03.2010 - 11:52) |
или function magic_off($el) |
но как это должно выглядеть целиком?) Ваша функция и
if (ini_get('magic_quotes_gpc'))
{
magic_off($_GET);
magic_off($_POST);
magic_off($_COOKIE);
}
?
Спустя 6 часов, 37 минут, 39 секунд (27.03.2010 - 23:52) HardWoman написал(а):
Спустя 7 часов, 2 минуты, 36 секунд (28.03.2010 - 05:54) twin написал(а):
antonov_sa
Все правильно ты делал. Эта функция позволяет избавиться от медвежьей услги так называемых магических кавычек. Применив её, можно больше не волноваться, что они могут оказаться включены и исказят данные.
vagrand
Все правильно ты делал. Эта функция позволяет избавиться от медвежьей услги так называемых магических кавычек. Применив её, можно больше не волноваться, что они могут оказаться включены и исказят данные.
vagrand
Цитата |
Но я не вижу никакой пользы от этого, а наоборот в дальнейшем может создать проблемы. |
Проблемы (как оказалось) создает именно эта директива, по этому польза есть. И очень даже приличная - исправить ту ошибку разработчиков, которая пока еще существует. В 6-й версии PHP этого артефакта уже не будет.