[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вопрос по функции
antonov_sa
Здравствуйте! Подскажите, пожалуйста, этот код нормально защитит глобальные переменные?

    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)

Спустя 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(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;
}
}

но как это должно выглядеть целиком?) Ваша функция и


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
Цитата
Но я не вижу никакой пользы от этого, а наоборот в дальнейшем может создать проблемы.

Проблемы (как оказалось) создает именно эта директива, по этому польза есть. И очень даже приличная - исправить ту ошибку разработчиков, которая пока еще существует. В 6-й версии PHP этого артефакта уже не будет.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.