XSS-уязвимость в WordPress
12 Ноября, 2005О том, как можно осуществить XSS-нападение через функцию header() в PHP я прочитал тут. Кстати, автор статьи сообщил, что об этой уязвимости уже писали 3 года назад на securitylab.ru.
Я решил выяснить, подвержен ли WordPress такого рода нападению. В коде нашлось вот такие интересные места:
$location = (empty($_POST['redirect_to'])) ? $_SERVER["HTTP_REFERER"] : $_POST['redirect_to'];
wp_redirect($location);
это 60-62 строчки в файле wp-comments-post.php и соответственно реализация этой функции в файле wp-includes/pluggable-functions.php
function wp_redirect($location) {
global $is_IIS;
if ($is_IIS)
header("Refresh: 0;url=$location");
else
header("Location: $location");
}
В итоге получается, что вся логика работы такого редиректа сводится к строчке вида:
header("Location: ".$_POST['redirect_to']);
Как видно, задача отличается от рассмотренной в выше указанной статье тем, что переменная берется из массива $_POST, а тут уже просто так символы "кавычка" и "обратный слеш" не передать, потому что предусмотрен механизм их экранирования.
Пришлось немного повозится, чтобы обойти эту преграду.