Wordpress: проблема с реферерами
Вчера столкнулся с “вредной” фичей Wordpress, из-за которой пришлось немножко подправить его скрипты. Возможно, мой опыт будет полезен тем, кто столкнулся с ошибкой:
Sorry, you need to enable sending referrers
for this feature to work.
Надпись может появляться при выполнении действий, требующих прав администратора блога. Я уперся лбом в эту строчку, пытаясь добавить нового автора.
Дело в том, что создатели Wordpress весьма серьезно пекутся о безопасности, что не может не радовать. С другой стороны, каждый ход против хакеров с высокой долей вероятности бьет и по нам, пушистым пользователям.
У браузеров есть фича - возможность передачи информации о том, откуда пришел посетитель на страничку, так называемый реферер (referer). Эту возможность и эксплуатируют авторы движка, повышая защищенность панели управления.
Для того, чтобы узнать, как настроить параметры передачи рефереров для конкретного браузера, загляните на эту страничку Кодекса WordPress. Вероятно, что следуя приведенным там рекомендациям, вам удастся справиться с описанной выше напастью. Если не получилось - продолжайте чтение.
Cам факт передачи рефереров является угрозой вашей приватности, поэтому многие умные файрволлы просто-напросто блокируют их передачу. Например, именно так с реферами поступает комплекс Norton Internet Security. Впрочем, проблема решается весьма просто одним из двух способов: грубым разрешением передачи ваших приватных данных, или более красивым занесением конкретного сайта в “доверенную зону”.
В моем случае дело обстоит сложнее. Я не могу определить источник проблемы - антивирус, файроволл, или настройки хостера. Поэтому пришлось идти на крайние меры - отключать проверку рефереров путем хирургического вмешательства в тело WordPress.
Сразу оговорюсь, что все нижесказанное относится к новой версии движка, двойке. Для более старых версий нужно вносить иные коррективы в код скриптов.
Перейдем к делу. Найдите файл pluggable-functions.php в директории wp-includes. В нем находится следующий код:
if ( !function_exists('check_admin_referer') ) :
function check_admin_referer() {
$adminurl = strtolower(get_settings('siteurl')).'/wp-admin';
$referer = strtolower($_SERVER['HTTP_REFERER']);
if (!strstr($referer, $adminurl))
die(__(’Sorry, you need to enable sending referrers for this feature to work.’));
do_action(’check_admin_referer’);
}
endif;
Просто закомментируйте две строки:
// if (!strstr($referer, $adminurl))
// die(__('Sorry, you need to enable sending referrers for this feature to work.’));
Все, можно работать. Учтите, что внеся эти изменения, вы частично уменьшили безопасность вашего блога от вторжения хакеров!