Странный код с eval()
  • HnattHnatt Август 2011
    Не столько ошибка, сколько непонятый мною код. Нужно объяснение от старших товарищей.

    В контроллере компонента ядра com_users, в функции отправки нового пароля забывшему пользователю, встречается такой код:

    $message = _NEWPASS_MSG;
    eval("\$message = \"$message\";");
    $subject = _NEWPASS_SUB;
    eval("\$subject = \"$subject\";");


    Смотреть в контексте здесь: http://code.google.com/p/joostina/source/browse/tags/joostina_v1.3.0_stable/components/com_users/users.php#484

    Имеет ли это какой-нибудь смысл? И что это такое вообще.
    Отредактированно Hnatt в 2011-08-02 06:46:22
  • HnattHnatt Август 2011
    Еще интересней строка 483. Сперва подумал, что новый пароль выводится любому желающему, правильно ввевшему каптчу и логин и имейл пользователя-жертвы. Я уже начал искать способ отключить в браузере 301 перенаправления и смотреть тело ответа. Но потом понял, что перед редиректом ф-цией mosRedirect очищается буфер вывода, так что новый пароль никак не возвращается.

    Но все равно странно, зачем это делать? От такого кода очень пахнет критической уязвимостью.
  • ArkadiyArkadiy Август 2011
    Все что хранится в _NEWPASS_MSG является текстом (ну или другим типом данных), функция eval() превращает эти данные в исполняемый скрипт и присваивает результат его работы переменной $message
  • HnattHnatt Август 2011
    А, понял, когда взглянул на определение константы
    DEFINE('_NEWPASS_MSG','Учетная запись пользователя $checkusername соответствует адресу e-mail.\n'.
    ' Пользователь сайта JPATH_SITE сделал запрос на получение нового пароля.\n\n'.
    ' Ваш новый пароль: $newpass\n\nЕсли Вы не запрашивали изменение пароля, сообщите об этом администратору.'.
    ' Только Вы можете увидеть это сообщение, больше никто. Если это ошибка, просто зайдите '.
    ' на сайт, используя новый пароль, и затем, измените его на удобный Вам.');


    Какой-то странных ход, чем sprintf() плох?
  • HnattHnatt Август 2011
    И вообще, как сказал создатель PHP Rasmus Lerdorf, "Если eval() -- это решение вашей задачи, значит у вас какая-то неправильная задача".
  • ArkadiyArkadiy Август 2011
    Ну возможно нужно переделать, тем более что на соседнем форуме написали что JPATH_SITE в этом месте не интерпретируется.

Добро пожаловать!

Похоже, что Вы здесь впервые. Если хотите поучаствовать, нажмите на одну из этих кнопок!

Войти Зарегистрироваться

В теме отметились