Nos includes / application_top, que são incluídos por todos os scripts em /admin
, você encontrará esta pequena joia (eu joguei algumas partes desinteressantes):
// redirect to login page if administrator is not yet logged in
if (!tep_session_is_registered('admin')) {
$redirect = false;
$current_page = basename($PHP_SELF);
if ($current_page != FILENAME_LOGIN) {
// session stuf blabla
$redirect = true;
}
if ($redirect == true) {
tep_redirect(tep_href_link(FILENAME_LOGIN));
}
unset($redirect);
}
Este código só é executado quando você não está logado. O que basicamente faz é verificar se basename
de $PHP_SELF
é login.php. Se for login.php, ele continuará a renderizar a página, caso contrário, você será redirecionado.
Se você fizer essa solicitação:
http://mysite.com/admin/configuration.php/login.php
Então o PHP_SELF será
/admin/configuration.php/login.php
E basename($PHP_SELF)
será, naturalmente, login.php
, portanto, a renderização continua e nenhum redirecionamento é executado. Mas é claro que não é login.php
, que é processado, mas configuration.php
. O resto da URL "/login.php" é "ignorado" e é fornecido apenas para o PHP em $ _SERVER ['PATH_INFO'].
Edit: Eu gostaria de acrescentar que este "bug" afeta apenas o oscommerce ou qualquer outro software que use uma solução como essa para "proteger" o login de administração (acho que não há muitos que sofrem com isso). Não é um bug que afeta todo o software PHP.