【问题标题】:Encoded url output in browser! Is it http_referer or phpbb issue?浏览器中的编码 url 输出!是 http_referer 还是 phpbb 问题?
【发布时间】:2023-04-07 02:42:01
【问题描述】:

我将 phpbb 登录集成到我的网站中。
步骤:进入 login.php 脚本处理数据并返回引用页面。
注意:这个页面(referer)有类似 page.php?var1=x&var2=y 登录过程后,它返回为 page.php?var1=x&ampvar2=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);

【问题讨论】:

  • 您好,真的有那么复杂还是我说的不够清楚?

标签: php phpbb3 http-referer


【解决方案1】:

phpBBs $request 类正在逃避您的 HTTP_REFERER 作为其内置消毒的一部分。要临时启用全局变量,您可以使用$request-&gt;enable_super_globals();,但您必须自己进行检查/清理以确保这些值是安全的。一旦你有了你的价值,你可以用$request-&gt;disable_super_globals();再次禁用全局变量

或者,您可以使用 str_replace 找回您的 & 字符,这比上述更安全,因为该类仍会为您检查和清理...

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

【讨论】:

  • 谢谢。很可能就是这样。但是,如果我像上面提到的那样回显 $te,为什么看起来没问题?
  • 再次感谢您! Str_replace 效果很好!...也许是浏览器显示 & 而不是 &amp 让我感到困惑。
  • 这将是您的浏览器解释编码字符。如果您在浏览器中查看源代码,它仍然是&amp;amp。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2015-04-10
  • 2011-04-10
  • 2014-02-24
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多