Чтобы получить больше опыта в Wordpress, я углубился в его базу кода, чтобы изучить его внутреннюю работу и рабочий процесс, и я был очень удивлен, когда увидел это:
-
Они реализуют register_globals (выдержка из wp-includes/class-wp.php):
// The query_vars property will be extracted to the GLOBALS. So care should // be taken when naming global variables that might interfere with the // WordPress environment. function register_globals() { global $wp_query; // Extract updated query vars back into global namespace. foreach ( (array) $wp_query->query_vars as $key => $value) { $GLOBALS[$key] = $value; }
-
Они полагаются на магические кавычки (exrpt из wp-includes/functions.php. magic_quotes_gpc отключается при начальной загрузке перед вызовом этой функции):
function add_magic_quotes( $array ) { foreach ( (array) $array as $k => $v ) { if ( is_array( $v ) ) { $array[$k] = add_magic_quotes( $v ); } else { $array[$k] = addslashes( $v ); }
- Они полагаются на addlashes (но с 2.8.0 они ввели также mysql_real_escape_string, но функция
_weak_escape()
, которая используетaddslashes()
, все еще существует в классе wpdb)
ОБНОВЛЕНИЕ: Я вижу, что они эмулируют подготовленные заявления с помощьюsprintf()
и настраиваемых держателей, поэтому запросы должны быть безопасными, я думаю. Тем не менее я озадачен тем, почему они не предоставляют по крайней мере mysqli, ведь обнаружение Mysql и PHP-версии происходит в начале последовательности загрузки.
Теперь, из ежегодного посещения SO, я многому научился, особенно, что вышеупомянутые три функции "устарели" и показывают проблемы безопасности, и многие из них смотрят в ужасе.
Но у WP должна быть причина для их использования. Я бы хотел узнать более опытных программистов, если есть проблемы с безопасностью, или иногда их использование слишком затуманено слухами и ложными убеждениями. Я знаю, что magic_quotes является наследием прошлого, и то же самое можно сказать о добавочных файлах (по крайней мере, когда они используются для баз данных), но при поиске в google перед тем, как спросить об этом, я нашел много сайтов, говорящих об использовании addlashes() над mysql_real_escape_string().
Мне интересно узнать четкую и подробную причину того, почему используются эти плохо изображенные функции; На протяжении многих лет Wordpress много улучшал, рассматривая различные аспекты, и все же эти функции все еще используются; Поэтому я ищу конкретное объяснение положительных аспектов, которые каким-то образом переопределяют отрицательные и оправдывают использование этих функций.
Я не ищу мнения (я прекрасно знаю, что они оффтопические здесь), и я не пишу о Wordpress, надеюсь, это ясно. Я просто хотел бы знать, почему многие программисты PHP считают эти функции "плохими", и все же мировой гигант, такой как Wordpress, который в 3-й версии теперь все еще использует их.
Это для совместимости с разными серверами и версиями php? (тем не менее, они проверяют очень графу).
Есть ли что-то, что я пропустил в отношении этих функций, насколько они важны в такой среде, как wordpress (или вообще)? Честно говоря, я смущен.