2011-05-12 3 views
9

내가 작업하고있는 더 큰 프로젝트의 일환으로 사용자 로그인 프로세스에서 '기억하기'기능을 통합하려고합니다. 수석 개발자의 제안 중 하나는 PHP session_id()를 쿠키와 데이터베이스 내의 레코드에 저장하는 것이 었습니다. 다음에 사이트를 방문 할 때 쿠키에서 session_id를 찾아서 자격 증명을 검색하십시오.'기억 해요'기능의 모범 사례?

이것은 하나의 컴퓨터를 기반으로하지만 사용자가 다른 컴퓨터에서 사이트에 액세스 할 수있는 클라우드 컴퓨팅 (웹 앱)에 반대하여 사용자의 세부 정보를 기억하는 옵션을 원할 수 있습니다 그들 모두에. 예를 들어 한 시스템에서 session_id를 설정 한 다음 다시 설정하면 첫 번째 시스템에서 로그 아웃됩니다. 나는 우리가 다음과 같은 구조를 가지고 별도의 데이터베이스 테이블을 만들 팀에 제안하는 경향이있어

:

+----------------+----------------+------------------+--------------------+ 
| user_id  | session_id | ip_address | initial_login_date | 
+----------------+----------------+------------------+--------------------+ 
|  5  | 123456789101 | 192.168.0.1 |  1305194639  | 
+----------------+----------------+------------------+--------------------+ 
|  5  | 021456789101 | 255.255.255.255 |  1305194639  | 
+----------------+----------------+------------------+--------------------+ 

우리가 다음 표에 자신의 SESSION_ID를 조회하면된다 및 가져 오기 위해 필요한 것은 user_id.

더 좋은 방법이 있나요?

+0

proxys, AOL, 검은 모자 등의 물건 때문에 IP 주소를 사용하여 사용자를 식별하는 것은 좋지 않습니다. 나는 최고의 연습이 tho처럼 보이는 것에 흥미가 있습니다. – trickwallett

+0

죄송합니다. 분명히해야합니다. 우리는 IP 주소를 사용하여 사용자를 식별하지 않습니다. 이것이 바로 session_id 필드가있는 이유입니다. IP 주소는 실제 로그인 기능이나 사용자 ID가 아닌 일부 내부 관리 시스템 용입니다. – BenM

답변

2

쿠키에 고유 한 식별자를 저장하고 ip 대신 사용할 수 있습니다. 변경 될 수 있습니다.

0

coookies에 대한 아이디어는 AFAIK를 구현할 수있는 최상의 방법 중 하나입니다.

두 번째 아이디어는 예를 들어 BlowFish 알고리즘을 사용하는 것입니다. 따라서 사용자 배열을 직렬화하고 BlowFish 알고리즘을 통해 암호화합니다. 사용자가 사이트에 접속하면 그에게서 쿠키를 가져 와서 복어의 비밀로 해독하고, 그것을 직렬화 해제 한 다음 사용자 이름과 암호를 확인하지만 session_id 메소드와 같이 안전하지는 않습니다.

5

This 기사는 나에게 많은 모든

+0

우수 기사, 공유해 주셔서 감사합니다. – BenM

+0

동의 -이 기사에서는 상위 수준 사이트에서 나타나는 동작, 특히 반 사회 공학적 관행에 대해 설명합니다. "아, 사용자 세부 정보를 변경 하시겠습니까? 다시 암호가 무엇입니까?" –

2

먼저 도움 : 당신은 같은 기능을 가진 것이 않는 일반 세션보다 공격자가 많은 큰 시간 창을 생성하는 알 필요가있다. 세션은 오히려 짧기 때문에 (몇 분/시간) 그러한 은 나를 기억합니다. 기능은 대개 장기간 (며칠, 몇 주 또는 몇 달) 유효합니다.

공격에 대한 공격은 세션 공격과 유사합니다. 공격자는 식별에 사용되는 것이 아니라 인증에 사용되는 유효한 식별자를 목표로합니다. 따라서 기억 된 사용자가 정기적으로 인증 된 사용자와 다른 권한을 가져야하는지 여부를 고려해야합니다.

이러한 기능을 구현하려면 원래 인증 자격 증명을 사용하지 말고 임의의 고유 토큰을 사용하여 사용자와 컴퓨터를 식별하고 서버에 저장하십시오. 사용자가 모든 로그인 세션을 제어 할 수 있는지 확인하고 토큰을 기억하면 그/그녀가 그러한 세션을 취소 할 수 있습니다./필요하면 토큰을 기억하십시오.

1

컴퓨터 당 여러 개의 영구 세션 ID를 저장하는 데는 아무런 문제가 없습니다. "마지막 활성 시간 소인"을 저장하면 다른 컴퓨터에서 같은 계정을 동시에 사용할 수 없도록하는 것이 더 좋습니다.

영구 쿠키 로그인에는 항상 특별한 플래그를 사용하고 비밀번호 변경 등의 중요한 기능에 대해서는 실제 로그인을 요청하십시오.

또한 보안 강화 조치로 사용자가 사이트에 로그인 할 때마다 영구 쿠키를 업데이트하십시오.

또한 IP를 저장하고 IP가 일치하지 않으면 영구 로그인을 허용하지 않습니다. 사이트에 금이가는 것보다 자동 로그인하는 것이 낫습니다.