Потенциальная дырка в wp_rel_nofollow()
Возможность превращения nofollow-ссылок в DoFollow
Копаясь в коде WordPress, обнаружил одну особенность функции wp_rel_nofollow() (функция используется для добавления rel="nofollow" к ссылкам): регулярное выражение, отвечающее за поиск ссылок, слишком упрощено.
- function wp_rel_nofollow( $text ) {
- global $wpdb;
- // This is a pre save filter, so text is already escaped.
- $text = stripslashes($text);
- $text = preg_replace_callback('|<a (.+?)>|i', 'wp_rel_nofollow_callback', $text);
- $text = esc_sql($text);
- return $text;
- }
- /**
- * Callback to used to add rel=nofollow string to HTML A element.
- *
- * Will remove already existing rel="nofollow" and rel='nofollow' from the
- * string to prevent from invalidating (X)HTML.
- *
- * @since 2.3.0
- *
- * @param array $matches Single Match
- * @return string HTML A Element with rel nofollow.
- */
- function wp_rel_nofollow_callback( $matches ) {
- $text = $matches[1];
- $text = str_replace(array(' rel="nofollow"', " rel='nofollow'"), '', $text);
- return "<a $text rel=\"nofollow\">";
- }
Таким образом, этот код пропустит, например, такую ссылку:
title="MyBlog">Some Text</a>
и неправильно обработает такую:
(во втором случае rel="nofollow" будет добавлен после rel="external", что будет некорректным HTML — но я не знаю, как такое воспримут поисковые системы: учтут ли они rel="nofollow" или нет).
Почему же эта дырка только потенциальная? Всё дело в том, что WordPress использует систему KSES, которая исправляет многие ошибки в HTML, а также переводит тэги в однострочную форму.
Тем не менее, пользователи, имеющие привилегию (capability) unfiltered_html (по умолчанию это пользователи с ролями Администратор (Administrator) и Редактор (Editor), но существуют плагины, которые могут это изменить), не подвергаются фильтрации KSES и, как следствие, могут размещать любой HTML-код.
Соответственно, все плагины, использующие wp_rel_nofollow(), но не использующие KSES, уязвимы.
Хотя описанную ошибку использовать довольно сложно (нужно быть редактором), если найти ошибку в KSES, то преобразовывать ссылки в DoFollow будет гораздо легче. Очень надеюсь, что к выходу WordPress 3.0 это исправят ![]()
Янв
2010
Комментарии к статье «Потенциальная дырка в wp_rel_nofollow()» (2) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «Потенциальная дырка в wp_rel_nofollow()»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


Ну,если дырка только потенциальная,то и волноваться не стоит
Возможно. Но забывать о ней не стоит.