экранирование "магических кавычек"

Статус
В этой теме нельзя размещать новые ответы.

saen

Постоялец
Регистрация
6 Авг 2006
Сообщения
756
Реакции
129
написал скрипт экранирования магических. Хотелось бы узнать у знатоков, насколько верный и безопасный код получился)



PHP:
set_magic_quotes_runtime(0);

if(get_magic_quotes_gpc())
{
    if(is_array($_GET))
    {
        while (list($k, $v) = each($_GET))
        {
            if (is_array($_GET[$k]))
            {
                while(list($k2, $v2) = each($_GET[$k]))
                {
                    $_GET[$k][$k2] = addslashes($v2);
                }
                @reset(@$_GET[$k]);
            }
            else
            {
                $_GET[$k] = addslashes($v);
            }
        }
        @reset(@$_GET);
    }
    if(is_array($_POST))
    {
        while(list($k,$v) = each($_POST))
        {
            if(is_array($_POST[$k]))
            {
                while(list($k2, $v2) = each($_POST[$k]))
                {
                    $_POST[$k][$k2] = addslashes($v2);
                }
                @reset(@$_POST[$k]);
            }
            else
            {
                $_POST[$k] = addslashes($v);
            }
        }
        @reset(@$_POST);
    }
    if(is_array($_COOKIE))
    {
        while(list($k, $v) = each($_COOKIE))
        {
            if(is_array($_COOKIE[$k]))
            {
                while(list($k2, $v2) = each($_COOKIE[$k]))
                {
                    $_COOKIE[$k][$k2] = addslashes($v2);
                }
                @reset(@$_COOKIE[$k]);
            }
            else
            {
                $_COOKIE[$k] = addslashes($v);
            }
        }
        @reset(@$_COOKIE);
    }
    if(is_array($_SERVER))
    {
        while(list($k, $v) = each($_SERVER))
        {
            if(is_array($_SERVER[$k]))
            {
                while(list($k2, $v2) = each($_SERVER[$k]))
                {
                    $_SERVER[$k][$k2] = addslashes($v2);
                }
                @reset(@$_SERVER[$k]);
            }
            else
            {
                $_SERVER[$k] = addslashes($v);
            }
        }
        @reset(@$_SERVER);
    }
}
 
Очередной быдлокод - про магические кавычки надо забыть вовсе.
 
юзай mysql_real_escape_string() или mysql_escape_string() когда ложишь текст в базу, а в остальном кавычки вроде нигде не помешают больше
 
Очередной быдлокод - про магические кавычки надо забыть вовсе.
Ты че такой злой? раздел называется "php для начинающих" а не "обсирание чужого кода". или ты таким образом посты набираешь?
 
Ты че такой злой? раздел называется "php для начинающих" а не "обсирание чужого кода"
Я добрый :p
Моё выражение - констатация факта, а не обсирание.
От того, что ты начинающий, код лучше не станет.

В следующий раз не пиши, а сперва ознакомся с матчастью: магические кавычки - убогая технология. И уже мёртвая.

или ты таким образом посты набираешь?
О да, мне это жуть как необходимо :D
 
кстати, ТС, есть такие функции как array_walk, array_map тыб почитал на досуге..

а так, для БД юзай mysql_real_escape_string (она безопасней чем mysql_escape_string, т.к. учитывает кодировку соединения) и не будет никаких проблем.

вообще, для предотвращения sql инъекций достаточно такого кода:
$integer = intval($var);
$string = mysql_real_escape_string($var);

и все, этого хватит....и не надо делать громоздкие проверки, условия и т.д.
 
Для saen ...Магические кавычки это зло от которого надо избавляться обрабатывайте все входящие данные $_GET $_POST...через функцию
PHP:
if (get_magic_quotes_gpc()== 1)
{
  function s_slash($v)
  {
    if (is_array($v))
	return array_map('s_slash', $v);
    return stripslashes($v);
  }
		if (!empty($_GET))     $_GET	 = s_slash($_GET);
		if (!empty($_POST))    $_POST    = s_slash($_POST);
		if (!empty($_COOKIE))  $_COOKIE  = s_slash($_COOKIE);
		if (!empty($_REQUEST)) $_REQUEST = s_slash($_REQUEST);
}
а затем обрабатывайте как надо те если числа то intval numeric
а при внесение их в БД mysql_real_escape_string
при выводе в браузер htmlspecialchars
 
serginio вроде оптимальную функцию написал, я пользуюсь подобной, и ни разу не подводила.

Совет забыть о магических кавычках конечно хороший, но далек от практики: на разных хостингах разные настройки, на которые клиенты влиять не в силах, особенно там, где поддерживается работоспособность старых скриптов.
 
Вот как раз из-за того, что на разных хостингах разные настройки, и стоит забыть про magic_quotes :D
В конце концов, скоро эти магические кавычки станут уже историей.

Эскейпить все суперглобальные массивы, затея тоже далёкая от оптимальности.
 
Какой вариант можешь предложить?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху