2011-02-03 3 views
1

여기 내가 궁금해하는 것의 예입니다.어떻게 PHP의 세션이 작동합니까? 어떤 암호화 방법을 사용합니까

<?php 
    session_start(); 
    $_SESSION['name'] = "mike"; 
    $_SESSION['lname'] = "donwell"; 
    $_SESSION['address'] = "111 north welding ave."; 

    print $_SESSION['name'] . "<br/>"; 
    print $_SESSION['lname']. "<br/>"; 
    print $_SESSION['address']. "<br/>"; 

?> 

브라우저에서 실행하고 쿠키를 볼 때 값이 항상 임의 인 PHPSESSID 쿠키가 표시됩니다. 표시되는 값을 생성하는 데 사용하는 암호화 방법은 무엇입니까?

본인도 보안상의 이유로 사이트와 그 값에 대한 세션을 볼 수 있습니까? 항상 암호화 되었기 때문에?

감사합니다.

+1

PHPSESSID에 임의의 문자열 생성기를 요청 하시겠습니까? 기본적으로 세션 데이터는 서버에있는 데이터이므로 암호화되지 않으며 일반적으로 보안을 위해 암호화 할 필요가 없습니다. 사용자가 세션 데이터를 볼 수있는 유일한 방법은 데이터를 사용자에게 보내는 경우입니다 (쿠키와 거의 정반대입니다). – Patrick

답변

0

세션 데이터가 암호화되지 않았습니다. 이 불길한 문자열은 무작위로 해시 된 것일뿐 MD5 해싱 (MD5() 기능 참조) 일 수도 있지만 의미가 없으므로 암호를 해독하려는 이유가 없습니다. 세션은 비공개이므로 방문자와 사이트 관리자를 제외하고 아무도 사이트를 볼 수 없습니다. 그러나 누군가 당신의 PC에서 네트워크 스니핑이나 트로이 닝을 통해 세션 키를 강탈하면, 프로퍼티 셋업 인증을 당신에게 부여 할 수 있습니다. 세션 하이재킹이라고합니다.

최저

라파엘

+0

안녕하세요. 고맙습니다. – mike

0

원시 세션 데이터는 공개되지 않습니다. 기본적으로, PHP는 문서 루트/htdocs 외부 경로에 세션 데이터를 씁니다. 세션 저장 경로는 php.ini (session.save_path)에서 설정할 수 있습니다. 사용자는 세션 ID (기본적으로 쿠키에 저장된 세션 ID)와 연결된 세션 데이터에만 액세스 할 수 있습니다.

PHP는 세션 데이터를 저장하기 전에 세션 데이터를 암호화한다고 생각하지 않습니다. IMO, 사용자 지정 세션 처리기를 사용해야합니다. 데이터가 어디에 저장되고, 인코딩되고, 액세스되는지 (예 : 쿠키의 고유 ID를 통해)를 훨씬 더 효과적으로 제어 할 수 있습니다. 많은 프레임 워크에는 커스텀 세션 핸들러 (Kohana 3는 좋은 것을 가지고있다.)). 사용자 세션 핸들러를 사용하는 방법에 대한

문서 : http://www.php.net/manual/en/function.session-set-save-handler.php

편집은 :

+1

기본적으로 이는 단지 일련 번호가 매겨져 있습니다. base64 인코딩이 없습니다. 웹 서버의 임시 디렉토리에 액세스 할 수 있으면 일반 텍스트 편집기로 세션 파일을 조사 할 수 있습니다. – Mchl

5

세션은 기본적으로 암호화되지 않습니다 Mchl의 의견에 따라 업데이트되었습니다. 데이터는 서버의 하드 디스크에있는 임시 디렉토리에 직렬화 된 형식으로 저장됩니다. 이는 redefining session handling functions으로 변경할 수 있습니다.

예를 들어 데이터베이스를 사용하여 세션 데이터를 저장하고 암호화 할 수 있습니다.

표시되는 PHPSESSID 값은 현재 브라우저 세션에 할당 된 세션 파일의 MD5 식별자입니다.

관련 문제