2011-06-11 5 views
8

나는 Codeigniter를 사용하여 웹 응용 프로그램을 개발 중입니다. 사용자가 내 사이트에서 인증을하면 현재 세션 쿠키 (암호화를 사용하도록 설정 한 쿠키)에 '사용자 식별자'를 저장하고 있습니다. 내 모델 클래스 중 몇몇은 세션/쿠키의 'user-identifier'매개 변수의 값을 사용하여 사용자 계정의 속성을 변경합니다.Codeigniter/PHP 세션 보안 질문

내 관심사는 누군가가 내가 설정 한 사용자 식별자로 유효한 codeigniter-session 쿠키를 가져갈 수 있는지, 사용자 식별자의 값을 다른 사용자의 값으로 변경하는지, 다른 사용자의 계정을 변경하십시오. 누군가가 세션 쿠키의 속성을 변경하려고 시도하면 codeigniter/php 세션에서 오류가 발생합니까?

답변

19

/application/config/config.php를 열고 "sess_use_database"를 찾은 다음 아직 없으면 "TRUE"로 변경하십시오. 이렇게하면 모든 세션 변수가 데이터베이스 테이블에 저장되고 세션 쿠키에는 세션 ID 문자열 만 포함됩니다.

보안을 강화하기 위해 "sess_match_ip"를 TRUE로 변경할 수도 있습니다. 이렇게하면 누군가가 사용자의 쿠키를 훔쳐서 자신의 것으로 쿠키를 전달하려고 시도하면 세션이 삭제됩니다.

+3

최신 CodeIgniter 3.0.1에서'sess_use_database' 이름은'sess_driver'로 대체되었으며'sess_use_driver'는'database'로 설정 될 수 있습니다. 최신 문서는 기본'file' 드라이버가 가장 안전한 선택이라고 주장합니다 : http://www.codeigniter.com/user_guide/libraries/sessions.html –

+0

알아두면 좋을 것 같습니다. – b3tac0d3

3

"사용자 식별자"가 정확히 무엇인지 확실하지 않습니다. 일반적인 규칙은 세션 쿠키에 아무것도 저장하지 말고 세션 ID입니다. 서버 측에 내부적으로 사용자 ID와 같은 다른 모든 것을 저장하고 세션 ID를 사용하여 검색하십시오.

사용자가 세션 ID (임의의 문자열)를 변경하면 새 세션이 시작됩니다. 세션 ID 뒤에있는 아이디어는 다른 사용자의 ID를 추측하는 것이 불가능하다는 것입니다. 이것이 바로 무작위 적이며 오랜 시간입니다.

+0

codeigniter의 세션 클래스에이 기능이 있는지 알 수 있습니까? 나는 그것이 좋은 생각 인 것에 동의한다. 예를 들어, 이렇게하면 : $ this-> sessions-> set_userdata ('id', 5); 이 값이 쿠키에서 앞뒤로 사용자에게 전달되었거나 서버에 저장되어 세션 ID와 연관되어 있습니까? –

+0

@Casey 저는 CI에 익숙하지 않지만 [docs] (http : // codeigniter.com/user_guide/libraries/sessions.html) 실제로 데이터는 쿠키에 저장됩니다. –

+0

내 '사용자 식별자'는 기본적으로 각 사용자에 대한 내 사용자 테이블의 기본 키입니다. 각 사용자와 관련된 속성을 수정하기 위해 SQL 쿼리에서 사용하고 있습니다. 나는 이것이 아마도 끔찍한 것임을 알고있다. –

4

"는 에 다른 사용자의 값을 사용자 식별자의 값을 변경 유효 CodeIgniter의 세션 쿠키를 취할 가능성이 경우, 그리고 다른 사용자의 계정을 변경합니다."

내 답변은 실제로 CI와 관련이 없으므로이를 염두에 두시기 바랍니다.

"username1"사용자를 인증 할 때 인증을 위해 클라이언트로 다시 보내야하는 내용은 서버가 해당 사용자와 관련이있는 해시 여야합니다. 클라이언트와 서버 간의 모든 통신은 해당 해시에 의존합니다.

서버는 사용자마다 고유 한 해시를 생성하며 해시는 짧은 시간 내에 살아야합니다. 누군가 해시를 캡처하여 해당 사용자로 전달할 수 있습니까? 확실히. 따라서 세션 하이재킹을 방지하기 위해 사용자의 에이전트와 IP가 해시와 일치하는지 확인해야합니다. 쿠키에 사용자 이름을 저장하고 자신의 데이터베이스를 업데이트하려면 해당 클라이언트 전송 변수에 reliing 새로운 개발자를 본 경우
:

이 작업을 수행하지 마십시오. 절대하지 마. 절대로 클라이언트를 신뢰하지 마십시오. 서버가 클라이언트의 해시를 얻으면 인증 된 사용자에 속하는지 확인하고 서버에서 user_id (사용자 데이터를 업데이트하기위한 변수)를 가져와야합니다. 절대로 클라이언트에서.