0

我正在修改 Opencart,其中包含几个由 PHP 页面表示的模块。但是,我的问题适用于涉及以下内容的任何情况。因此,无需将此作为 opencart 特定问题。

我希望在一个模块/PHP 页面完成工作后改变它的重定向方式。

我所做的是修改有问题的模块以处理会话变量以修改要重定向到的 URL。

自定义页面

if ( !$this->customer->isLogged() ) {
    $this->session->data['redirect'] = $this->url->link('account/blah');
    $this->redirect($this->url->link('account/register', '', 'SSL'));
}

已修改重定向的页面

if (isset($this->session->data['redirect'])) {
    $this->redirect($this->session->data['redirect']);
} 

它有效,但我觉得它不安全。可以做些什么来改进它?

PS:以下是在 opencart 中实际处理重定向的方式。

protected function redirect($url, $status = 302) {
    header('Status: ' . $status);
    header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url));
    exit();             
}
4

2 回答 2

1

不安全 ?为什么 ?用户是否可以修改 $this->session->data 的内容?如果不是,我会认为它是“安全的”,因为没有注入可能......话虽如此,我不知道 OpenCart 的内部结构。

如果要进行非特定于打开购物车的重定向,则需要使用 PHP 的header()函数或http_redirect()

于 2013-06-05T19:48:01.120 回答
1

通常,您可以通过以下方式在加载时执行自动重定向:

  • 来自服务器端脚本(例如 PHP)的 HTTP 标头header("Location: http://www.example.org/bar");
  • HTTP 元刷新<META HTTP-EQUIV=REFRESH CONTENT="1; URL=http://www.example.org/bar" />
  • Javascriptwindow.location.href = 'http://www.example.org/bar';

但也有一些其他的方法,比如使用一些小程序,如 Flash 或 Java。但不要依赖这些,因为大多数浏览器都有可能阻止此类重定向的弹出窗口阻止机制。

关于安全性没有什么好说的,除了重定向的命令来自服务器并且客户端应该遵循该命令。但是客户总是可能不听...

作为开发人员,您需要做的就是不要提供比重定向所需更多的数据。因此,例如,在 PHP 中,在使用 之后header("Location: http://www.example.org/bar");,请确保也这样做exit();,PHP 的其余部分也不会被解析为 HTML 并发送到客户端。

于 2013-06-05T19:50:33.733 回答