Кодированный вывод 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);
1 ответ
phpBBs $request
класс избегает вашего HTTP_REFERER
как часть его встроенной санитарии. Для временного включения глобалов вы можете использовать $request->enable_super_globals();
но вы должны будете сделать свои собственные проверки / дезинфекции, чтобы убедиться, что значения в безопасности. Как только вы наберете свое значение, вы можете снова отключить глобальные $request->disable_super_globals();
В качестве альтернативы, вы можете использовать str_replace
вернуть вашего персонажа амперсанда, который безопаснее, чем выше, так как класс все равно будет проверять и очищать вас...
$te = str_replace('&','&',$request->variable('HTTP_REFERER', '', false, \phpbb\request\request_interface::SERVER));