Вывод закодированного URL в браузере! Это проблема http_referer или phpbb?

Я интегрировал логин phpbb на свой сайт.
Шаги: он обращается к сценарию login.php для обработки данных и возврата на реферальную страницу.
Примечание: эта страница (реферер) имеет что-то вроде page.php?var1=x&var2=y. После входа в систему она возвращается как page.php?var1=x&var2=y. > выдает ошибку в браузере.
Мне не разрешено (phpbb) напрямую использовать $_server[http_referer]. Ниже вы можете увидеть код из login.php.
Я также повторяю данные, как видите, и это нормально!

$username=addslashes(strip_tags(strtolower(($_REQUEST['username']))));
$password=addslashes(strip_tags($_REQUEST['password']));

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../../forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
$te=$request->variable('HTTP_REFERER', '', false, \phpbb\request\request_interface::SERVER);
$user->session_begin();
$auth->acl($user->data);
$user->setup();

$result = $auth->login($username, $password, '', 1, 0);
print_r($result);
if($user->data['is_registered'])
        {
    echo '<br>//User is already logged in';
    }
else
{                    
if ($result['status'] == LOGIN_SUCCESS)
{
    echo '<br>//User was successfully logged into phpBB';
}
else
{
    echo '<br>//Users login failed';
}
}
//header('Location:'$te);
echo "location:..".$request->variable('HTTP_REFERER', '', false, \phpbb\request\request_interface::SERVER);

person John_Dean    schedule 07.02.2016    source источник
comment
Здравствуйте, это действительно так сложно или я недостаточно ясно выразился?   -  person John_Dean    schedule 08.02.2016


Ответы (1)


Класс $request phpBBs избегает вашего HTTP_REFERER в рамках встроенной очистки. Чтобы временно включить глобальные значения, вы можете использовать $request->enable_super_globals();, но вам придется выполнять собственные проверки/санацию, чтобы убедиться, что значения безопасны. Как только вы получите свое значение, вы можете снова отключить глобальные переменные с помощью $request->disable_super_globals();

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

$te = str_replace('&amp','&',$request->variable('HTTP_REFERER', '', false, \phpbb\request\request_interface::SERVER));

person Eeji    schedule 08.02.2016
comment
Спасибо. Скорее всего это оно. Но тогда почему это выглядит нормально, если я повторяю $te, как я упоминал выше? - person John_Dean; 09.02.2016
comment
Еще раз спасибо! Str_replace отлично работает! ... может быть, это был браузер, который отображал & вместо &, чтобы сбить меня с толку. - person John_Dean; 09.02.2016
comment
Это будет ваш браузер, интерпретирующий закодированный символ. Если вы просматриваете исходный код в своем браузере, он все равно будет &amp. - person Eeji; 09.02.2016