Самые частые из возникаемых вопросов - это требования при установке джумлы к:
magic_quotes_gps onregister_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 кавычки носят смысл не только текста, а ещё и управляющего (объединяющего) символа. И, если внутри одного выражения/текста появится "несанкционированная" кавычка, то это может привести к некорректному завершению выражения и, соответственно, к нарушениям при записи информации в БД.
В связи с ростом числа "любителей" в среде программистов на РНР, забывающих принудительно выполнять соответствующие преобразования с текстом, было решено ввести такую функцию для "забывчивых товарисчей"

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

Наличие потенциального "свободно гуляющего" кода во всей области выполнения программы всё же пугает и потенциально способствует ухудшению безопастности и увеличения вероятности взлома вследствие недосмотра программиста при парсинге передаваемых параметров.
К сожалению, никто так толком и не может доказать плохо это или хорошо...
Что же касается Джумлы, то переменные в массивах POST, GET, REQUEST... эмулируются через _POST, _GET, _REQUEST и т.д., а извлекаемые данные проверяются внутренними средствами. Т.о. програмист не "привязан" к тому, как выставлено register_globals on или off, а получение данных из передаваемых параметров рекомендуется производить через API переменной $mainframe, в частности, через функцию getUserStateFromRequest(...).
Так вы обезопасите свой код от "посягательств" с стороны.