2014-06-11 2 views
5

현재 SSL을 사용하여 몇 페이지의 보안을 유지해야하는 앱을 개발 중입니다. 예를 들어, 로그인, 페이지 등록. 그러나 프로토콜이 https에서 http 사이에서 전환되면 Laravel 세션이 HTTP를 통해 전송되지 않습니다.프로토콜을 전환 할 때 Laravel 세션이 작동하지 않습니다.

어떤 해결책이 있더라도 Laravel은 두 프로토콜에 대한 세션을 유지합니다.

+1

app/config/session.php에서 'secure'=> false'? 너 편집 했니? –

+0

내 구성 파일에는 그런 것이 없습니다. 그러나, 나는 그것을 시도 할 것입니다. – Anam

+0

@pleasedeleteme가 작동하지 않습니다. – Anam

답변

3

기본적으로 Laravel은 인증 쿠키 및 세션 쿠키에 대해 안전하거나 httponly로 설정합니다. 나는 Http 만이 하드 당신이 쿠키를 누설해서는 안 vendor/laravel/framework/src/Illuminate/Session/SessionManager.php

주에있는 설정으로 코딩 (이것은 더 이상의 경우) 설정에서 변경할 수있는 방법을 찾아 Laravel 4.0에서 가리키고 없습니다 HTTPS에서 HTTP로, 세션을 안전하게 유지할 수 없기 때문에 (네트워크에서 다른 사용자의 세션을 계속 스니핑 할 수 있습니다).

Laravel 4.1

편집 app/config/session.php. http에서 쿠키를 http로 읽으려면 'secure' 키를 false로 변경하십시오.

@ martinstoeckli의 조언에 따라 환경 값에 따라 키를 설정하십시오.

Laravel 아마 4.0

이 자신의 핸들러 CookieSessionHandler을 대체하는 것입니다 구현하는 가장 좋은 방법.

예를 들어, 모든 쿠키를 https/http만으로 표시하지 않는 업데이트 된 쓰기 기능으로 CookieSessionHandler를 확장하는 새로운 클래스를 만들 수 있습니다.

Class NewCookieSessionHandler extends CookieSessionHandler implements \SessionHandlerInterface { 
    /** 
    * {@inheritDoc} 
    */ 
    public function write($sessionId, $data) 
    { 
     // $this->cookie is \Illuminate\Cookie\CookieJar 
     $this->setCookie($this->cookie->make($sessionId, $data, $this->minutes, '/', false, false)); 
    } 

    /** 
    * Set the given cookie in the headers. 
    * 
    * @param \Symfony\Component\HttpFoundation\Cookie $cookie 
    * @return void 
    */ 
    protected function setCookie($cookie) 
    { 
     if (headers_sent()) return; 

     setcookie($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), false, false); 
    } 

} 

그런 app/config/session.php 안에 당신은 NewCookie

에 드라이버를 변경할 수 있습니다 마지막으로 app/start/global.php 안에이 Laravel와뿐만 아니라 문제가

use Illuminate\Cache\Repository; 

Cookie::extend('NewCookie', function($app) 
{ 
    return new NewCookieSessionHandler; 
}); 
+0

이 클래스에 'NewCookieSessionHandler'를 어디에 두시겠습니까? – Anam

+0

어느 곳에서나 라이브러리/클래스를로드 할 수 있으면 괜찮습니다. overbaord를 사용할 필요가 없습니다. 이것이 오래된 laravel을위한 것임을 주목하십시오. – timgws

3

쿠키를 설정이 우선 새 쿠키 드라이버를 등록 . session-id를 포함하는 쿠키가 HTTPS로만 제한되는지 아니면 HTTP 페이지에도 전송할지 여부를 결정해야합니다. 쿠키가 HTTPS 페이지로 제한되어있는 경우

  • , 그것은 안전하지 않은 HTTP 요청에 하여 브라우저를 전송되지 않습니다. 이 경우 HTTP 페이지로 전환 할 때 세션이 해제됩니다.
  • 쿠키가 HTTPS 및 HTTP 페이지로 전송되는 경우 공격자는 세션 ID를 읽고 HTTP 요청을들을 수있을 때 사용자를 가장 할 수 있습니다. 쿠키는 html 요청뿐만 아니라 그림 및 기타 자원 요청에 대해서도 전송됩니다.

구성은 \app\config\session.php 파일에서 찾을 수 있으며 secure입니다.세션을 유지

'secure' => App::environment('production'), 

당신이 두 문제를 분리해야이 문제를 처리하려면 : 당신이 (그러나 개발을위한)에만 라이브 사이트에 true로 설정하려면, 당신은 뭔가를 쓸 수 및 인증. 나는 예제 코드와 함께이 주제에 대해 작은 article을 썼다. 프로토콜 간을 전환 할 때 항상 SSL 스트립 공격을 받기 쉽기 때문에 전체 사이트에 대해 HTTPS를 사용하는 것이 좋습니다. 오늘날의 서버에서는 더 이상 문제가되지 않습니다.

+0

좋은 기사 마틴. – Anam

관련 문제