Comments 44
Баг проявляется при включенном magic_quotes_gpc
Вобщем-то переведу подробней: Даже если в конфиге указано, что директива включена — она не включается.
Ничего собственно и страшного =)
Даже хорошо, что эта опция не включается!
Даже хорошо, что эта опция не включается!
Давайте уже 5.3.
Было бы неплохо, если нельзя было сделать register_globals = On
помоему какраз и хорошо получилось.
однозначно, это была фича!!! хватит бороться с этими кавычками On/Off — задолбало!
magic_quotes_gpc зло, такое же как и register_globals
ну и за что его заминусовали? человек правильно говорит — из-за этих директив и рождается куча будло-кодеров…
Да нет, тут имхо обратная взаимосвязь, не из-за директив рождаются быдлокодеры, а из-за быдлокодеров вводят директивы :)
не знаю как было в истории, но я вижу что быдлокодеры пишут код дома — где все с этими директивами итд :) и тут бац — на хостинге уже не то… короче начинается ужас :) скрипты не работают, или работают, но не так как надо )
Ну тех кто вообще не знаком с такой вещью как sql-injection, а таких людей на самом деле немало :) — магические кавычки худо-бедно спасают, так что в какой-то степени она оправдывает свое существование. Насчет register_globals конечно ничего такого сказать нельзя, ну да она теперь и отключена по умолчанию.
Всегдя использую функцию httpRequest и не думаю что там на сервере стоит
function httpRequest($var, $def = null)
{
$res = null;
if (isset($_POST[$var])) $res = $_POST[$var];
elseif (isset($_GET[$var])) $res = $_GET[$var];
if (isset($res) && get_magic_quotes_gpc())
if (is_array($res))
foreach ($res as $key => $value)
$res[$key] = stripslashes($value);
else $res = stripslashes($res);
return isset($res)? $res: $def;
}
function httpRequest($var, $def = null)
{
$res = null;
if (isset($_POST[$var])) $res = $_POST[$var];
elseif (isset($_GET[$var])) $res = $_GET[$var];
if (isset($res) && get_magic_quotes_gpc())
if (is_array($res))
foreach ($res as $key => $value)
$res[$key] = stripslashes($value);
else $res = stripslashes($res);
return isset($res)? $res: $def;
}
Что-то как-то очень замудрено :) По-моему проще тогда уж обертку сделать, а-ля:
или при старте скрипта фильтровать все кавычки, а я лично остановился на том что отключаю оную директиву в .htaccess
class MagicWrapper extends ArrayObject { protected $data = array(); public function __construct(&$data) { if(get_magic_quotes_gpc()) { $this->data = $data; $data = $this; } } public function offsetGet($name) { return $this->strip($this->data[$name]); } public function strip($data) { if(is_array($data)) { return array_map(array($this, 'strip'), $data); } elseif(is_string($data)) { return stripslashes($data); } else { return $data; } } } new MagicWrapper($_GET); new MagicWrapper($_POST);
или при старте скрипта фильтровать все кавычки, а я лично остановился на том что отключаю оную директиву в .htaccess
Тьфу, кривая обертка :) В конструкторе вместо
нужно вызывать родительский метод
а в offsetGet вместо
использовать
а то что-то я так и не определился, отнаследовался от готового объекта, а вместо логику стал писать как для реализации интерфейсов :)
$this->data = $data;
нужно вызывать родительский метод
parent::__construct($data);
а в offsetGet вместо
return $this->data[$name];
использовать
$this->strip(parent::offsetGet($name));
а то что-то я так и не определился, отнаследовался от готового объекта, а вместо логику стал писать как для реализации интерфейсов :)
function noMagic() { if (get_magic_quotes_gpc()) { if (!empty($_GET)) $_GET = stripMagicQuotes($_GET); if (!empty($_POST)) $_POST = stripMagicQuotes($_POST); if (!empty($_REQUEST)) $_REQUEST = stripMagicQuotes($_REQUEST); if (!empty($_COOKIE)) $_COOKIE = stripMagicQuotes($_COOKIE); } } function stripMagicQuotes($arr) { foreach ($arr as $k => $v) { $arr[$k] = is_array($v) ? stripMagicQuotes($v) : stripslashes($v); } return $arr; } noMagic();
Или такой вариант.
Ну да, это я и имел в виду под «при старте скрипта фильтровать все кавычки», тут впринципе есть простор для обсуждений, с одной стороны обертка в виде функции или-же объекта будет фильтровать данные снова и снова, с другой обработка при старте чревата тем что понадобиться может только часть данных, а обработаны все равно будут все.
>>Решение — откатиться на PHP 5.2.6 или ожидать PHP 5.2.8.
правильно: Решение — откатиться на PHP 5.2.6 и ожидать PHP 5.2.8.
правильно: Решение — откатиться на PHP 5.2.6 и ожидать PHP 5.2.8.
Вот только в данном случае все решения основанные на if(get_magic_quotes_gpc()) будут не корректными, т.к. при включённом magic_quotes функция вернёт true, а stripslashes затем уберёт нужные слеши.
magic_quotes_gpc == ЗЛО
Все данные надо обрабатывать ручками =)
Все данные надо обрабатывать ручками =)
Мне кажется, вопрос о вреде magic_quotes_gpc уже давно решён на всех уровнях. Однако каждому надо высказать своё мнение об этом. Все комментарии в плюсах, но в самом деле что-нибудь полезное говорит редкий комментатор.
Большую часть комментариев можно заменить фразой «magic_quotes — зло».
Это даже не холивар — здесь только одно мнение. Иначе, как словесным поносом, это назвать сложно.
Большую часть комментариев можно заменить фразой «magic_quotes — зло».
Это даже не холивар — здесь только одно мнение. Иначе, как словесным поносом, это назвать сложно.
«Кто понял жизнь, тот не спешит» ©
отличный урок для того, кто гониться за самыми последними и свежими версиями продуктов.
Хотя, канешн очень не приятно, что такой баг пропустили…
отличный урок для того, кто гониться за самыми последними и свежими версиями продуктов.
Хотя, канешн очень не приятно, что такой баг пропустили…
Пишите на Руби, там багов нету. :)
ведь никто не хочет холивара
1) Баги есть везде.
2) Рубе тормоз т.к. это не VM. Со второй версией будет лучше.
3) Пишите на питоне.
2) Рубе тормоз т.к. это не VM. Со второй версией будет лучше.
3) Пишите на питоне.
уж в рельсах-то точно есть:
www.rorsecurity.info/2008/09/08/sql-injection-issue-in-limit-and-offset-parameter/
ps пишите на grails
www.rorsecurity.info/2008/09/08/sql-injection-issue-in-limit-and-offset-parameter/
ps пишите на grails
Sign up to leave a comment.
Прекращено распространение PHP 5.2.7