현재 SSL
을 사용하여 몇 페이지의 보안을 유지해야하는 앱을 개발 중입니다. 예를 들어, 로그인, 페이지 등록. 그러나 프로토콜이 https
에서 http
사이에서 전환되면 Laravel 세션이 HTTP를 통해 전송되지 않습니다.프로토콜을 전환 할 때 Laravel 세션이 작동하지 않습니다.
어떤 해결책이 있더라도 Laravel은 두 프로토콜에 대한 세션을 유지합니다.
현재 SSL
을 사용하여 몇 페이지의 보안을 유지해야하는 앱을 개발 중입니다. 예를 들어, 로그인, 페이지 등록. 그러나 프로토콜이 https
에서 http
사이에서 전환되면 Laravel 세션이 HTTP를 통해 전송되지 않습니다.프로토콜을 전환 할 때 Laravel 세션이 작동하지 않습니다.
어떤 해결책이 있더라도 Laravel은 두 프로토콜에 대한 세션을 유지합니다.
기본적으로 Laravel은 인증 쿠키 및 세션 쿠키에 대해 안전하거나 httponly로 설정합니다. 나는 Http 만이 하드 당신이 쿠키를 누설해서는 안 vendor/laravel/framework/src/Illuminate/Session/SessionManager.php
주에있는 설정으로 코딩 (이것은 더 이상의 경우) 설정에서 변경할 수있는 방법을 찾아 Laravel 4.0에서 가리키고 없습니다 HTTPS에서 HTTP로, 세션을 안전하게 유지할 수 없기 때문에 (네트워크에서 다른 사용자의 세션을 계속 스니핑 할 수 있습니다).
편집 app/config/session.php
. http에서 쿠키를 http로 읽으려면 'secure'
키를 false로 변경하십시오.
@ martinstoeckli의 조언에 따라 환경 값에 따라 키를 설정하십시오.
이 자신의 핸들러 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;
});
쿠키를 설정이 우선 새 쿠키 드라이버를 등록 . session-id를 포함하는 쿠키가 HTTPS로만 제한되는지 아니면 HTTP 페이지에도 전송할지 여부를 결정해야합니다. 쿠키가 HTTPS 페이지로 제한되어있는 경우
구성은 \app\config\session.php
파일에서 찾을 수 있으며 secure
입니다.세션을 유지
'secure' => App::environment('production'),
당신이 두 문제를 분리해야이 문제를 처리하려면 : 당신이 (그러나 개발을위한)에만 라이브 사이트에 true로 설정하려면, 당신은 뭔가를 쓸 수 및 인증. 나는 예제 코드와 함께이 주제에 대해 작은 article을 썼다. 프로토콜 간을 전환 할 때 항상 SSL 스트립 공격을 받기 쉽기 때문에 전체 사이트에 대해 HTTPS를 사용하는 것이 좋습니다. 오늘날의 서버에서는 더 이상 문제가되지 않습니다.
좋은 기사 마틴. – Anam
app/config/session.php에서 'secure'=> false'? 너 편집 했니? –
내 구성 파일에는 그런 것이 없습니다. 그러나, 나는 그것을 시도 할 것입니다. – Anam
@pleasedeleteme가 작동하지 않습니다. – Anam