CakePHP中SSL的最佳实践

时间:2013-04-13 21:53:54

标签: php .htaccess cakephp ssl https

我想为所有网页实施HTTPS。

我将CakePHP 2.3与“Auth”组件一起使用。

实际上,我找到的唯一方法是添加“beforeFilter-condition”。

但这非常脏,因为我有很多“非SSL”请求,因为Auth-Component。


AppController.php --->

class AppController extends Controller {

  public function beforeFilter() {
    if (env("SERVER_PORT") != "443") {
      $this->Security->blackHoleCallback = 'forceSSL';
      $this->Security->requireSecure();
    }
  }

  public function forceSSL() {
    $this->redirect('https://' . env('SERVER_NAME') . $this->here);
  }

}




当我没有登录并且我尝试访问我的网站时出现问题

  • 请求 - >响应(因为)
  • GET hxxp:// MYSITE / - > 302 hxxp s :// MYSITE /(beforeFilter-redirection)
  • 获取hxxp s :// MYSITE / - > 302 hxxp:// MYSITE / users / login(Auth组件)
  • 获取hxxp:// MYSITE / users / login - > 302 hxxp s :// MYSITE / users / login(beforeFilter-redirection)
  • 获取hxxp s :// MYSITE / users / login - >的 200
  • POST hxxp s :// MYSITE / users / login(with creds) - > 302 hxxp:// MYSITE /(Auth组件)
  • GET hxxp:// MYSITE / - > 302 hxxp s :// MYSITE /
  • 获取hxxp s :// MYSITE / - >的 200

那么,你知道另一种方法吗?


注意:我必须在core.php中强制保护我的cookie,因为它们不是。

core.php --->

Configure::write('Session', array(
  'defaults' => 'php',
  'ini' => array(
    'session.cookie_secure' => true
  )));




请注意,我还尝试通过修改.htaccess强制SSL,但我得到的只是无限循环。

编辑:

CakePHP中的默认.htaccess是

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

我尝试添加的内容:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

1 个答案:

答案 0 :(得分:2)

最后,我选择的解决方案是:

  • 删除/app/webroot/.htaccess和/app/.htaccess

  • 修改/.htaccess到

.htaccess ---&gt;

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
  • 禁用蛋糕中的网址重写

core.php ---&gt;

Configure::write('App.baseUrl', env('SCRIPT_NAME'));



现在可通过 hxxps://www.mysite.com/index.php/controller/action

访问